我需要将内容从我一直用到的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/*"
}
]
}
aws s3 sync
作为newaccountid:user / myadminuser 我可以使用新帐户中的用户浏览src-bucket
,我可以上传和下载文件。运行最初提到的aws s3 sync
命令会将几个100个对象从src-bucket
复制到dst-bucket
,但对于其他一些对象的数据库则会失败。
我尝试将不可同步的对象与我能够成功同步的对象进行比较。我在aws s3api get-object-acl
中的许多对象上做了src-bucket
。对于成功复制的和复制失败的ACL,它们的ACL看起来都一样:
{
"Owner": {
"ID": "reallylongidihadbashcomparethemformetomakesuretheyareidentical"
},
"Grants": [
{
"Grantee": {
"Type": "CanonicalUser",
"ID": "reallylongidihadbashcomparethemformetomakesuretheyareidentical"
},
"Permission": "FULL_CONTROL"
}
]
}
在dst-bucket
上,真正长的id是另一个,但除此之外,ACL看起来是一样的。
答案 0 :(得分:2)
不,没有这样的事情。我正在纠正错误的事情。显然s3 sync
"取决于"能够复制对象'标签,以及他们的数据。阅读对象' tags是读取对象数据的独立权限。在向新用户授予权限时,我错过了s3:GetObjectTagging
操作。
显然"他们"在开始使用对象标签的同时开始将数据拆分成更小的块。