【问题标题】:Access other aws user s3 buckets using boto3使用 boto3 访问其他 aws 用户 s3 存储桶
【发布时间】:2017-11-11 02:03:27
【问题描述】:

我正在制作一个 Django Web 应用程序,它可以列出用户的 s3 存储桶,还可以让我访问 s3 存储桶中的其他用户文件。 有什么方法可以访问其他用户帐户,例如使用 boto3 的一些临时凭据?

【问题讨论】:

  • “其他帐户”将如何授予您访问权限?一些选项:存储桶策略、角色、用户。在开始编写代码之前考虑一下这个过程。

标签: amazon-web-services amazon-s3 boto3


【解决方案1】:

boto3 具有 assume_role 方法,该方法返回角色的临时凭据。

为了使其正常工作,您正在访问的账户必须具有一个角色,该角色具有允许访问 S3 存储桶的策略,并且该角色本身必须与您从中调用的账户具有信任关系。

此外,运行 django 应用程序的实例应该具有允许AssumeRole 权限的实例角色。

代码看起来像

import boto3

sts = boto3.client('sts')
response = sts.assume_role(
    RoleArn='aws:arn:iam::OTHERACCOUNTID:role/role-that-allows-s3-access',
    RoleSessionName='my-random-session-name',
    DurationSeconds=900 # how many seconds these credentials will work
)

s3 = boto3.client(
    's3',
    aws_access_key_id=response['Credentials']['AccessKeyId'],
    aws_secret_access_key=response['Credentials']['SecretAccessKey'],
    aws_session_token=response['Credentials']['SessionToken']
)

response = s3.list_objects(
    Bucket='bucket-in-other-account'
)

【讨论】:

  • OTHERACCOUNTID 您的意思是其他用户创建的 IAM 用户 ID?
  • 我指的是另一个 AWS 账户。对于为特定 IAM 用户创建的存储桶,步骤相同,只需使用您自己的 AWS 帐号,并确保您担任的角色具有访问该用户存储桶的权限
  • 那么 ['AccessKeyId'] 是什么?是其他用户的吗?
  • AccessKeyId 用于从 assume_role 调用生成的临时凭据
  • sts = boto3.client('sts') 我应该在这一行提供 access_key 吗?
猜你喜欢
  • 2020-03-12
  • 2021-06-22
  • 1970-01-01
  • 2021-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-29
  • 1970-01-01
相关资源
最近更新 更多