我正在尝试从一个存储桶复制到另一个存储桶,每个存储桶都有自己的访问密钥和密码。
我可以连接到第一个存储桶并下载文件就好了。可能需要注意的是,我没有完全访问我正在复制的存储桶,这意味着我无法读取存储桶中的所有密钥,只是我可以访问的子集。我完全控制了我要复制的第二个桶。
client2是我要复制的地方,客户端是我要复制的地方。
copy_source = {
'Bucket': bucketName,
'Key': key
}
client2.copy(CopySource = copy_source,Bucket=bucketName2,Key=key,SourceClient=client)
这是我得到的错误: botocore.exceptions.ClientError:调用UploadPartCopy操作时发生错误(AccessDenied):拒绝访问
我是新手,非常感谢任何帮助!!
答案 0 :(得分:3)
您可能获得Access Denied
的原因是因为SourceClient
仅用于getting the size of the object来确定是否可以直接复制,或者是多部分上传是必需的。
当涉及到实际的副本本身时,客户端上的基础copy_object方法的基础,它不接受SourceClient,并调用S3 API PUT Object - Copy方法。
因此,如果您希望能够从一个存储桶执行S3复制,则可以为与client2
权限使用的访问密钥关联的用户提供从源存储桶读取的权限,或者您可以使用client1
执行S3获取,然后使用client2
执行S3投放。