簡體   English   中英

從 AWS 機密管理器獲取所有機密

[英]get all secrets from AWS secret manager

AWS 有用於存儲機密的機密管理器。 它具有獲取個人秘密的 API。 我想一次獲取與帳戶相關的所有秘密。 我們有什么辦法可以做到這一點?

您可以使用ListSecrets方法列出除 SecretString 或 SecretBinary 之外的所有機密元數據。

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 文件並進行異步調用以將秘密注入到您正在調用的任何命令的環境中。

我嘗試使用 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/ 中提到的“NextToken” secretsmanager.html#SecretsManager.Client.list_secrets

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM