【问题标题】:cross-account file upload in S3 bucket using boto3 and python使用 boto3 和 python 在 S3 存储桶中跨账户文件上传
【发布时间】:2021-02-10 11:47:43
【问题描述】:

我有一个 S3 存储桶,其中包含给定的 access_keysecret_access_key。我使用以下代码成功将文件上传到我的 S3 存储桶中。

import boto3
import os

client = boto3.client('s3',
                        aws_access_key_id = access_key,
                        aws_secret_access_key = secret_access_key)

upload_file_bucket = 'my-bucket'
upload_file_key = 'my_folder/' + str(my_file)
client.upload_file(file, upload_file_bucket, upload_file_key)

现在,我想将 my_file 上传到另一个属于新团队的存储桶中。因此,我无权访问access_keysecret_access_key。使用 boto3 和 Python 进行跨账户文件上传的最佳做法是什么?

【问题讨论】:

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


    【解决方案1】:

    您实际上可以使用相同的代码,但其他 AWS 账户的所有者需要将存储桶策略添加到目标存储桶,以允许您的 IAM 用户进行访问。它看起来像这样:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Action": [
            "s3:PutObject",
            "s3:PutObjectAcl"
          ],
          "Effect": "Allow",
          "Resource": "arn:aws:s3:::their-bucket/*",
          "Principal": {
            "AWS": [
              "arn:aws:iam::YOUR-ACCOUNT-ID:user/username"
            ]
          }
        }
      ]
    }
    

    将对象上传到另一个 AWS 账户拥有的存储桶时,我建议添加 ACL= bucket-owner-full-control ,如下所示:

    client.upload_file(file, upload_file_bucket, upload_file_key, ExtraArgs={'ACL':'bucket-owner-full-control'})
    

    这会将对象的所有权授予存储桶所有者,而不是上传的帐户。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-29
      • 2018-06-02
      • 2021-11-25
      • 2018-11-26
      • 2019-01-15
      • 1970-01-01
      • 2021-06-28
      相关资源
      最近更新 更多