首页 > 解决方案 > boto3 s3角色arn

问题描述

我不能使用 boto3 以编程方式提供 100% 的角色 arn 连接到 S3。

session = boto3.Session(role_arn="arn:aws:iam::****:role/*****",
                        RoleSessionName="****")

s3_client = boto3.client('s3',
                         aws_access_key_id="****",
                         aws_secret_access_key="****")

for b in s3_client.list_buckets()["Buckets"]:
    print (b["Name"])

我无法向 Session 和客户端提供 arn 信息,并且基于 s3 的客户端上没有假设角色()。

我找到了一种使用 sts 临时令牌的方法,但我不喜欢那样。

sess = boto3.Session(aws_access_key_id="*****",
                     aws_secret_access_key="*****")
sts_connection = sess.client('sts')
assume_role_object = sts_connection.assume_role(RoleArn="arn:aws:iam::***:role/******",
                                                RoleSessionName="**",
                                                DurationSeconds=3600)

session = boto3.Session(
    aws_access_key_id=assume_role_object['Credentials']['AccessKeyId'],
    aws_secret_access_key=assume_role_object['Credentials']['SecretAccessKey'],
    aws_session_token=assume_role_object['Credentials']['SessionToken'])

s3_client = session.client('s3')

for b in s3_client.list_buckets()["Buckets"]:
    print (b["Name"])

你有什么主意吗 ?

标签: amazon-web-servicesboto3

解决方案


您需要了解如何创建临时凭证。

首先,您需要使用您当前的访问密钥创建一个客户端。然后,这些凭证将用于验证您是否有权调用 assume_role 并有权从 IAM 角色颁发凭证。

如果有人可以按照您的方式进行操作,那么假设角色将存在巨大的安全漏洞。必须首先验证您的权利,然后才能颁发临时凭证。


推荐阅读