Boto3:如何承担 IAM 角色以访问其他帐户
Boto3: How to assume IAM Role to access other account
寻找有关通过 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'
这是我的凭据和配置文件的示例,作为推荐。
.aws/config
文件:
[profile randomNameAccount]
role_arn = arn:aws:iam::12345678910:role/roleName
source_profile = randomName
aws/credentials
文件:
[randomName]
aws_access_key_id = 12345678910
aws_secret_access_key = 1234567-abcdefghijk
我的问题是关于 python 代码的帮助,以便能够针对 AWS 进行身份验证并使用 IAM 角色在 S3 存储桶中导航,然后在我调用上传功能时上传文件。
提前致谢。
您应该在 ~/.aws/credentials
中为 IAM 角色创建一个条目,该条目引用一组有权承担该角色的 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
向 ~/.aws/config
添加条目以提供默认区域:
[profile my-role]
region = ap-southeast-2
然后您可以使用以下代码承担 IAM 角色:
import boto3
# Create a session by assuming the role in the named profile
session = boto3.Session(profile_name='my-role')
# Use the session to access resources via the role
s3_client = session.client('s3')
response = s3_client.list_objects(Bucket=...)
寻找有关通过 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'
这是我的凭据和配置文件的示例,作为推荐。
.aws/config
文件:
[profile randomNameAccount]
role_arn = arn:aws:iam::12345678910:role/roleName
source_profile = randomName
aws/credentials
文件:
[randomName]
aws_access_key_id = 12345678910
aws_secret_access_key = 1234567-abcdefghijk
我的问题是关于 python 代码的帮助,以便能够针对 AWS 进行身份验证并使用 IAM 角色在 S3 存储桶中导航,然后在我调用上传功能时上传文件。
提前致谢。
您应该在 ~/.aws/credentials
中为 IAM 角色创建一个条目,该条目引用一组有权承担该角色的 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
向 ~/.aws/config
添加条目以提供默认区域:
[profile my-role]
region = ap-southeast-2
然后您可以使用以下代码承担 IAM 角色:
import boto3
# Create a session by assuming the role in the named profile
session = boto3.Session(profile_name='my-role')
# Use the session to access resources via the role
s3_client = session.client('s3')
response = s3_client.list_objects(Bucket=...)