【发布时间】:2018-05-02 11:10:42
【问题描述】:
我需要将内容从迄今为止一直使用的 S3 存储桶 (src-bucket) 移动到新 AWS 账户 (dst-bucket) 中的新 S3 存储桶中。据我所知,直接的方法是
aws s3 sync s3://src-bucket s3://dst-bucket --exclude "*" --include="important_prefix*"
但这只是有点作用。对于一部分对象,我不断收到错误消息
An error occurred (AccessDenied) when calling the CopyObject operation: Access Denied
我找不到原因。
到目前为止,我可以说所有无法同步的文件都相当小(小于 700kb),而成功复制的每个文件至少有几 MB。
在s3 sync 可以工作之前,是否必须满足一些最小对象大小(具有相对较高的默认值)?
更多信息
- 我可以完美地
aws s3 cp和aws s3api get-object有问题的对象。他们只是失败了aws s3 sync。 - 在这两个帐户中,我都有一个具有
S3FullAccess权限的用户 -
我在 src-bucket 中添加了以下存储桶策略
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Example permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::newaccountid:user/myadminuser" }, "Action": [ "s3:GetBucketLocation", "s3:ListBucket" ], "Resource": "arn:aws:s3:::src-bucket" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::newaccountid:user/myadminuser" }, "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Resource": "arn:aws:s3:::src-bucket/*" } ] }- 我以 newaccountid:user/myadminuser 身份运行
aws s3 sync
- 我以 newaccountid:user/myadminuser 身份运行
我可以使用新帐户的用户浏览src-bucket,并且可以正常上传和下载文件。运行最初提到的aws s3 sync 命令将几个100 个对象从src-bucket 复制到dst-bucket,但对于其他数百个对象失败。
我尝试将无法同步的对象与我能够成功同步的对象进行比较。我对src-bucket 中的许多对象做了aws s3api get-object-acl。它们的 ACL 看起来都一样,复制成功的和复制失败的:
{
"Owner": {
"ID": "reallylongidihadbashcomparethemformetomakesuretheyareidentical"
},
"Grants": [
{
"Grantee": {
"Type": "CanonicalUser",
"ID": "reallylongidihadbashcomparethemformetomakesuretheyareidentical"
},
"Permission": "FULL_CONTROL"
}
]
}
在dst-bucket 上,真正长的 id 是不同的,但除此之外 ACL 看起来相同。
【问题讨论】:
标签: amazon-web-services amazon-s3 aws-cli