从AWS Secret Manager获得所有机密

时间:2018-08-20 11:12:49

标签: amazon-web-services

AWS具有存储秘密信息的秘密管理器。它具有获取个人秘密的API。我想一次获取与帐户相关的所有机密。有什么办法可以做到这一点?

3 个答案:

答案 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”