首页 > 解决方案 > 跨账户更新秘密值

问题描述

我在一个帐户中的一个函数上编写了一个 Python 脚本,该脚本尝试使用 boto3 和client.get_secret_value(). 但是,client.update_secret()似乎只适用于同一帐户中的秘密,而不适用于第二个帐户中的秘密。

secretUpdated = client.update_secret(
    SecretId=’arn for my test secret',
    Description='',
    KmsKeyId='kms key arn’,
    SecretString='the Secret string for my test secret with key values'
)

我回来了Access denied,但据我所知,它应该secretsmanager:UpdateSecret同时具有第一个帐户中的功能和另一个帐户中的机密,并且它设置在我添加的所有相同位置getsecret(角色的功能策略和资源策略秘密)所以我不知道脚本是跨账户时是否需要添加任何额外的参数?

标签: amazon-web-servicesboto3

解决方案


只能在与您正在使用的 IAM 凭证关联的账户中访问/更新密钥。(否则,我将能够查看/更改帐户中的秘密!)

你有两个选择:

选项 1:使用与“其他”帐户关联的凭据

为有权使用 Secrets Manager 的“其他”账户中的 IAM 用户获取访问密钥和密钥。然后,将这些凭据与 boto3 一起使用。这可以通过以下几种方式完成:

  • 将凭据存储为不同的配置文件,使用aws configure --profile account2
  • 然后像这样使用配置文件:
import boto3

session = boto3.Session(profile_name='account2')
secrets_client = session.client('secretsmanager')

或者

  • 将凭据传递给客户端:
import boto3

secrets_client = boto3.client('secretsmanager', aws_access_key_id='AKIAxxx', aws_secret_access_key='xyz')

然后secrets_client将访问另一个帐户。

请参阅:凭证 — Boto3 Docs 文档

选项 2:在“其他”账户中担任 IAM 角色

  • 在“其他”账户中创建 IAM 角色并为其授予 Secrets Manager 权限
  • 向 IAM 角色添加信任策略,允许 IAM 用户在您的“普通”账户中“假定”它
  • 使用 boto3,调用assume_role()以在另一个账户中担任 IAM 角色
import boto3
from boto3.session import Session


client = boto3.client('sts')

response = client.assume_role(RoleArn='arn:aws:iam::00000000000000:role/example-role`, RoleSessionName='account2')
     
session = Session(aws_access_key_id='AKIAxxx', aws_secret_access_key='xyz')
secrets_client = session.client('secretsmanager')

请参阅:切换到 IAM 角色 (AWS API) - AWS Identity and Access Management


推荐阅读