我有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
作为复制功能的输入?
答案 0 :(得分:0)
执行这种复制的最干净的方法是:
Account-2
中对GetObject
(或所有存储桶)具有Bucket-1
权限且对PutObject
具有Bucket-2
权限的凭据(IAM用户或IAM角色) Bucket-1
添加存储桶策略,该策略允许将Account-2
凭据从存储桶添加到GetObject
此方法很好,因为它只需要一组凭据。
一些注意事项:
ACL=bucket-owner-full-control
设置为将所有权移交给目标存储桶。copy()
方法允许指定SourceClient
。我认为这不适用于客户端copy()
方法。