将文件从一个帐户中的S3存储桶复制到另一个帐户中的S3存储桶

时间:2020-03-25 00:13:01

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

我有2个AWS账户。 account1在us-east-1区域的bucket1中有1个文件。我正在尝试将文件从帐户1复制到us-west-2区域下bucket2中的account2。我已准备好所有必需的IAM策略,并且两个帐户使用相同的凭据。我正在使用python boto3库。

cos = boto3.resource('s3', aws_access_key_id=COMMON_KEY_ID, aws_secret_access_key=COMMON_ACCESS_KEY, endpoint_url="https://s3.us-west-2.amazonaws.com")

copy_source = {
                'Bucket': bucket1,
                'Key': SOURCE_KEY
              }
cos.meta.client.copy(copy_source, "bucket2", TARGET_KEY)

如图所示,复制功能是在指向目标帐户account2 / us-west-2的客户端对象上执行的。如何获取account1 / us-east1中的源文件?我是否应该提供SourceClient作为复制功能的输入?

1 个答案:

答案 0 :(得分:0)

执行这种复制的最干净的方法是:

  • 使用Account-2中对GetObject(或所有存储桶)具有Bucket-1权限且对PutObject具有Bucket-2权限的凭据(IAM用户或IAM角色)
  • Bucket-1添加存储桶策略,该策略允许将Account-2凭据从存储桶添加到GetObject
  • 将复制命令发送到目标区域

此方法很好,因为它只需要一组凭据。

一些注意事项:

  • 如果您改为使用来自 source 帐户的凭据复制文件,请确保将ACL=bucket-owner-full-control设置为将所有权移交给目标存储桶。
  • 资源copy()方法允许指定SourceClient。我认为这不适用于客户端copy()方法。