我用来awscli
同步 2 个存储桶(同一个帐户):
aws s3 sync --only-show-errors s3://bucket-1 s3://bucket-2
但对于某些文件我收到权限错误:
copy failed: s3://bucket-1/dirname/file.flac to s3://bucket-2/dirname/file.flac An error occurred (AccessDenied) when calling the UploadPartCopy operation: Access Denied
(在某些情况下,失败的操作是CopyObject
)
这似乎只发生在.flac
文件中。所有其他文件都是.mp3
s,所以我能想到的唯一区别就是文件大小。
因为我使用的是具有完整 s3 权限的用户,所以我不明白为什么会发生这种情况(或者如何修复这个问题)。
答案1
可能是目的属于不同的帐户?
当 AWS 账户 AAA 中的存储桶可由 AWS 账户 BBB 写入时,可能会发生这种情况,例如通过BucketPolicy--acl bucket-owner-full-control
,但作者(在BBB)上传时没有指定权限。
使用以下方法检查对象的 ACL:
aws s3api get-object-acl --bucket bucket-1 --key dirname/file.flac
目标也类似 - 如果现有对象归其他帐户所有,则无法覆盖它。这就是UploadPartCopy
失败的原因。
希望有所帮助。
答案2
对我来说它失败了,因为 UploadPartCopy 操作需要额外的权限然后进行常规复制,我将策略更改为 s3:List* 并且它起作用了。