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

sig*_*asl 3 amazon-s3 python-3.x boto3 tealium

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

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

client2 是我要复制到的位置,而 client 是我要复制的位置。

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

client2.copy(CopySource = copy_source,Bucket=bucketName2,Key=key,SourceClient=client)
Run Code Online (Sandbox Code Playgroud)

这是我收到的错误: botocore.exceptions.ClientError: 调用 UploadPartCopy 操作时发生错误 (AccessDenied):访问被拒绝

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

Jam*_*rke 6

您可能会收到此信息的原因Access Denied是因为它SourceClient仅用于获取对象的大小以确定是否可以直接复制它,或者是否需要分段上传。

当涉及到实际副本本身时,客户端上的底层copy_object方法不接受 SourceClient,并调用 S3 API PUT Object - Copy方法。

因此,如果您希望能够执行从一个存储桶到另一个存储桶的 S3 复制,您可以向与所使用的访问密钥关联的用户授予client2从源存储桶读取的权限,也可以使用client1以下命令执行 S3 Get一个 S3 Put,带有client2.