Boto3:如何承担 IAM 角色来访问其他帐户

MdM*_*MdM 3 python amazon-s3 amazon-web-services aws-access-policy

寻找有关通过 python 脚本和 IAM 角色将文件上传到 AWS S3 存储桶的一些指导。我可以使用 BOTO3 和其他脚本的aws_access_key_id&上传文件。aws_secret_access_key

但是,我现在已获得 IAM 角色来登录某个帐户。我使用 AWS CLI 来验证和查询 S3 数据没有任何问题,因此我相信我的文件.aws/credential.aws/config文件是正确的。但是我不确定如何在 python 代码中使用 ARN 值。

这是我到目前为止整理的内容,但出现了各种错误,这些错误都导致访问被拒绝:

session = boto3.Session(profile_name='randomName')
session.client('sts').get_caller_identity()

assumed_role_session = boto3.Session(profile_name='randomNameAccount')
print(assumed_role_session.client('sts').get_caller_identity())

credentials = session.get_credentials()
aws_access_key_id = credentials.access_key
aws_secret_access_key = credentials.secret_key

s3 = boto3.client('s3',
                  aws_access_key_id=aws_access_key_id,
                  aws_secret_access_key=aws_secret_access_key)

bucket_name = 'bucketName'

Run Code Online (Sandbox Code Playgroud)

这是我的凭据和配置文件的示例,作为参考。

.aws/config文件:

[profile randomNameAccount]
role_arn = arn:aws:iam::12345678910:role/roleName
source_profile = randomName
Run Code Online (Sandbox Code Playgroud)

aws/credentials文件:

[randomName]
aws_access_key_id = 12345678910
aws_secret_access_key = 1234567-abcdefghijk
Run Code Online (Sandbox Code Playgroud)

我的问题是帮助 python 代码能够针对 AWS 进行身份验证并使用 IAM 角色在 S3 存储桶中导航,然后在调用上传函数时上传文件。

先感谢您。

Joh*_*ein 5

您应该为 IAM 角色创建一个条目,其中~/.aws/credentials引用一组有权代入该角色的 IAM 用户凭证:

[my-user]
aws_access_key_id = AKIAxxx
aws_secret_access_key = xxx

[my-role]
source_profile = my-user
role_arn = arn:aws:iam::123456789012:role/the-role
Run Code Online (Sandbox Code Playgroud)

添加一个条目以~/.aws/config提供默认区域:

[profile my-role]
region = ap-southeast-2
Run Code Online (Sandbox Code Playgroud)

然后您可以使用以下代码承担 IAM 角色:

[my-user]
aws_access_key_id = AKIAxxx
aws_secret_access_key = xxx

[my-role]
source_profile = my-user
role_arn = arn:aws:iam::123456789012:role/the-role
Run Code Online (Sandbox Code Playgroud)