BOTO3 - 复制 s3 对象时拒绝访问

BOTO3 - Getting Access Denied when copying a s3 object

我正在尝试从一个存储桶复制到另一个存储桶,每个存储桶都有自己的访问密钥和秘密。

我可以连接到第一个存储桶并下载一个文件就好了。可能需要注意的是,我没有对要从中复制的存储桶的完全访问权限,这意味着我无法读取存储桶中的所有密钥,只能读取我有权访问的一个子集。我可以完全控制要复制到的第二个存储桶。

client2 是我要复制到的地方,client 是我要复制的地方。

copy_source = {
    'Bucket': bucketName,
    'Key': key
     }

client2.copy(CopySource = copy_source,Bucket=bucketName2,Key=key,SourceClient=client)

这是我得到的错误: botocore.exceptions.ClientError: 调用 UploadPartCopy 操作时发生错误 (AccessDenied): Access Denied

我是新手,如有任何帮助将不胜感激!!

你可能得到 Access Denied 的原因是因为 SourceClient 仅用于 getting the size of the object 以确定它是否可以直接复制,或者是否 multi-part 需要上传。

当涉及到实际副本本身时,底层的底层 copy_object method on the client, which does not accept a SourceClient, and calls out to the S3 APIs PUT Object - Copy 方法。

因此,如果您希望能够执行从一个存储桶到另一个存储桶的 S3 复制,您可以授予与 client2 使用的访问密钥关联的用户从源存储桶中读取的权限,或者您可以使用 client1 执行 S3 Get,然后使用 client2.

执行 S3 Put