我的AWS配置有一些配置文件:
猫配置
[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获得临时资格,对吗?那是怎么回事吗?
答案 0 :(得分:2)
这是您应该做的。在您的代码中,使用默认的会话构造函数,例如:
session = boto3.Session()
client = session.client(...)
在具有IAM角色的EC2上运行时,您的应用将使用与该IAM角色关联的凭据。
现在,理想情况下,您希望编写无需任何更改即可在笔记本电脑上运行的代码。您可以做到。上面的代码可以正常工作。它将从您的AWS_xxx environment variables或默认的AWS凭证配置文件中提取凭证。
如果您是在笔记本电脑上运行,并且希望不使用默认的AWS凭证配置文件,而是使用专门为承担IAM角色而设置的其他配置文件,例如{ {1}}和cat
配置文件,然后只需在您的环境中提供该配置文件即可,例如:
sandbox
或者:
AWS_PROFILE=sandbox python3 my-boto-app.py
但是我更喜欢前者,因为export AWS_PROFILE=sandbox
python3 my-boto-app.py
环境变量的分配是临时的。
最后,请阅读boto3 credentials文档。他们很有帮助。