假设python中有IAM角色,该怎么做?

时间:2019-12-05 20:11:40

标签: amazon-web-services amazon-iam

我的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获得临时资格,对吗?那是怎么回事吗?

1 个答案:

答案 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文档。他们很有帮助。