AWS具有存储秘密信息的秘密管理器。它具有获取个人秘密的API。我想一次获取与帐户相关的所有机密。有什么办法可以做到这一点?
答案 0 :(得分:3)
您可以使用方法ListSecrets列出除SecretString或SecretBinary之外的所有秘密元数据。
答案 1 :(得分:0)
ListSecrets中的“加密字段SecretString和SecretBinary不包含在输出中”。
如果您尝试获取所有秘密值,则选项可能包括:
1)脚本化list-secrets和get-secret-value以获取所有秘密值。由于使用串行请求,因此该示例将很慢。
#!/usr/bin/env python3
import json
import subprocess
secrets = json.loads(subprocess.getoutput("aws secretsmanager list-secrets"))
for secret in secrets.values():
for s in secret:
name = s.get('Name')
data = json.loads(subprocess.getoutput("aws secretsmanager get-secret-value --secret-id {}".format(name)))
value = data.get('SecretString')
print("{}: {}".format(name, value))
2)使用带有Summon的第三方工具,例如AWS Provider,该工具可以接受secrets.yml文件并进行异步调用,以将机密信息注入到您要调用的任何命令的环境中。
答案 2 :(得分:0)
我尝试使用 boto3 python 在我的机密管理器中列出机密名称:使用 list.secrets()
secrets = secret_client.list_secrets()
secrets_manager = (secrets['SecretList'])
for secret in secrets_manager:
print ("{0}".format(secret['Name']))
完整的列表大约有 20 个,但输出只有大约 5 个秘密。
将代码更新到下面,成功了:
secrets = secret_client.list_secrets()
secrets_manager = (secrets['SecretList'])
while "NextToken" in secrets:
secrets = secret_client.list_secrets(NextToken=secrets["NextToken"])
secrets_manager.extend(secrets['SecretList'])
for secret in secrets_manager:
print ("{0}".format(secret['Name']))
所以基本上,AWS secrets manager list.secrets() 调用对您的输出进行分页,因此最好使用 https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/secretsmanager.html#SecretsManager.Client.list_secrets 中提到的“NextToken”