我在一个帐户中的一个函数上编写了一个 Python 脚本,该脚本尝试使用带有
client.get_secret_value()
的 boto3 从第二个帐户获取秘密值。然而,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 角色
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
假设所有策略均符合要求,我使用 boto3 引导程序上的完整秘密 ARN 以及秘密端 AWS KMS 密钥的完整 ARN 集解决了该问题。