amazon-web-services - 跨账户更新秘密值
问题描述
我在一个帐户中的一个函数上编写了一个 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
(角色的功能策略和资源策略秘密)所以我不知道脚本是跨账户时是否需要添加任何额外的参数?
解决方案
只能在与您正在使用的 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
将访问另一个帐户。
选项 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
推荐阅读
- sql - How to get time difference inside window
- salesforce - 如何使用节点 js 访问 salesforce 公共图像链接?
- c# - 在 C# windows 窗体属性网格中,您可以提供类别本身的描述吗?
- reactjs - 无法使用 Redux 调度切换复选框
- c++ - C++如何调试生产中的悬空指针
- angular - 将表单中每个循环产品的数据显示为值,而不是 Angular 中的占位符
- java - 打开 Equella 脚本编码
- docker - 呃!enoent ENOENT:没有这样的文件或目录,打开'/opt/frontend/package.json'
- attributes - Robocopy - 复制后立即为每个源文件添加属性
- javascript - 即使在 javascript 中使用 BigInt() 后,二进制到十进制的结果也会出错