boto3 s3角色

时间:2018-07-24 13:57:40

标签: amazon-web-services boto3

我无法使用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"])

我无法向会话以及客户端提供arn信息,并且基于s3的客户端上没有accept_role()。

我找到了一种使用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"])

你有什么主意吗?

2 个答案:

答案 0 :(得分:0)

首先,从不在代码中放入访问密钥和秘密密钥。始终将凭据存储在~/.aws/credentials文件中(例如,通过aws configure)。这样可以避免尴尬的情况,因为您的凭据被意外地发布给了全世界。另外,如果您在Amazon EC2实例上运行,则只需为该实例分配一个IAM角色,它将自动获取凭证。

boto3中扮演角色的简单方法是使用单独的配置文件将角色详细信息存储在凭据文件中。然后,您可以在创建客户端时参考配置文件,并且boto3会自动代表您调用assume-role

请参阅:boto3: Assume Role Provider

答案 1 :(得分:0)

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

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

如果有人可以按照您的方式进行操作,则会出现一个带有承担的角色的巨大安全漏洞。您的权限必须先经过验证,然后才能颁发临时凭据。