我的aws配置有几个概要文件:
cat配置
[default]
region = us-west-2
[profile sandbox]
region = us-west-2
role_arn = arn:aws:iam::11111111111:role/team-role
source_profile = default
[profile cat]
role_arn = arn:aws:iam::22222222222:role/data-systems-role
region = us-west-2
source_profile = default当我从CLI运行这个命令时,我可以通过在末尾键入cat来承担--profile的角色。
aws secretsmanager get-secret-value --secret-id "prod/Aurora/klondike/twou_id_ro" --profile dsci但我不知道如何在python代码中做到这一点。我有这段代码,但它似乎扮演了错误的角色:
session = boto3.session.Session()
client = session.client(
service_name='secretsmanager',
region_name=region_name
)
{'Error': {'Message': 'User: arn:aws:sts::3333333333:assumed-role/.../user@company.com is not authorized to perform: secretsmanager:GetSecretValue on resource: arn:aws:secretsmanager:us-west-2...我认为我的代码是默认的?如何让我的python代码承担cat角色?当一个角色被假定时,它会从sts获得临时的creds,对吗?这就是发生的事吗?
发布于 2019-12-05 20:20:39
这是你该做的。在代码中,使用默认的会话构造函数,例如:
session = boto3.Session()
client = session.client(...)在带有IAM角色的EC2上运行时,应用程序将使用与该IAM角色关联的凭据。
现在,理想情况下,您希望编写的代码也可以在您的笔记本电脑上工作,而不作任何更改。你能做到的。以上代码可以正常工作。它将从xxx环境变量或默认的AWS凭据配置文件中提取凭据。
如果您在笔记本上运行,并且希望而不是使用默认的AWS凭据配置文件,而是使用您专门设置的另一个配置文件来承担IAM角色,比如您的cat和sandbox配置文件,那么只需在您的环境中提供该配置文件:
AWS_PROFILE=sandbox python3 my-boto-app.py或者:
export AWS_PROFILE=sandbox
python3 my-boto-app.py但是我更喜欢前者,因为AWS_PROFILE环境变量赋值是临时的。
最后,请阅读boto3凭证文档。它们是有帮助的。
https://stackoverflow.com/questions/59202622
复制相似问题