AWS 秘密管理器更新

AWS Secret Manager Update

是否有任何可能的方法可以在 AWS Secret Manager 中更新 key/values 而无需检索当前值然后更新它们?

我找到的当前解决方案首先从机密管理器中检索值:

original_secret = client.get_secret_value(SecretId="my_first_secret")

然后对它们进行更新,运行 update-secret 命令:

updated_secret = original_secret.update({"UPDATE_KEY": "update_value"})
client.update_secret(SecretId="my_secret_name", SecretString=json.dumps(updated_secret))

但我不想检索秘密值。 首选语言是 python.

您可以使用 put_secret_value():

import boto3
client = boto3.client('secretsmanager')

# Create secret
client.create_secret(
    Name='foo',
    SecretString='bar'
)

# Update secret
client.put_secret_value(
    SecretId='foo',
    SecretString='bar2'
)

遗憾的是你不能这样做,因为秘密值事实上不可变。相反,您所谓的“更新”只是 creating 秘密的 新版本 的过程:

When you update the encrypted secret value in a secret, you create a new version of the secret. The new version automatically receives the staging label AWSCURRENT.

AWS 控制台转储此过程,因为它看起来您可以就地“更新”密钥的值。相反,它只是复制当前版本,更新它的值,并创建一个新版本的秘密值。这一切都在后台完成,所以你看不到这个。

但是使用 AWS CLI,您可以列出密钥值版本list-secret-version-ids. If you do this, you will see that you never update any secret values directly, you just keep creating new versions of it with a past value still present (only one past value is kept). You can always retrieve the old version using --version-id in get-secret-value

所以你必须对 python 做同样的事情。获取当前版本的密钥值,在本地更新它,并创建一个新版本的值。