代码之家  ›  专栏  ›  技术社区  ›  raphaelauv

Boto3 S3角色ARN

  •  0
  • raphaelauv  · 技术社区  · 7 年前

    我不能使用boto3连接到具有arn以100%编程方式提供的角色的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的客户机上假定_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 回复  |  直到 7 年前
        1
  •  0
  •   John Hanley    7 年前

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

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

    如果有人能按你的方式来做,就会有一个巨大的安全漏洞承担起责任。必须先验证您的权限,然后才能颁发临时凭据。

        2
  •  0
  •   John Rotenstein    7 年前

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

    一个简单的方法来承担一个角色 boto3 将角色详细信息存储在凭据文件中 轮廓 . 然后,您可以在创建客户端时引用配置文件,而boto3将自动调用 assume-role 代表你。

    见: boto3: Assume Role Provider

    推荐文章