我想将s3存储桶从一个帐户迁移到另一个帐户,这是我的存储桶策略
{
"Version": "2008-10-17",
"Id": "Policy1335892530063",
"Statement": [
{
"Sid": "DelegateS3Access",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::xxxxxxxx:root"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::test123",
"arn:aws:s3:::test123/*"
]
},
{
"Sid": "Stmt1335892150622",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::xxxxxxx:root"
},
"Action": [
"s3:GetBucketAcl",
"s3:GetBucketPolicy"
],
"Resource": "arn:aws:s3:::test123"
},
{
"Sid": "Stmt1335892526596",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::xxxxxxxxx:root"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::test123/*"
}
]
}
这是我的IAM用户政策
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": ["arn:aws:s3:::*"]
}
]
}
当我运行命令
时aws s3 sync s3://test123 s3://abc-test123
我收到错误
调用CopyObject操作时发生客户端错误(AccessDenied):拒绝访问
答案 0 :(得分:0)
您的存储桶政策似乎是正确的。 请验证您是否正在使用root帐户,正如您的存储桶策略中指定的那样。 此外,您可能需要检查目标存储桶上是否存在任何拒绝存储桶策略。
如果没有任何帮助,您可以启用对存储桶的临时公共访问作为解决方法。是的,它不安全但它可能适用于所有情况。
答案 1 :(得分:0)
确保您在源存储桶(读取)和目标存储桶(写入)上都提供了足够的权限。
如果您对拥有该存储桶的帐户使用Root凭据(通常不推荐),您可能甚至不需要存储桶策略 - 默认情况下,root帐户应具有必要的访问权限。 / p>
如果您要为IAM用户分配权限,则不要创建 Bucket Policy ,而是为IAM用户自己分配权限。在这种情况下无需提供校长。
首先检查您是否有权列出两个存储桶:
aws s3 ls s3://test123
aws s3 ls s3://abc-test123
然后检查您是否有权从源和目标复制文件:
aws s3 cp s3://test123/foo.txt .
aws s3 cp foo.txt s3://abc-test123/foo.txt
如果它们有效,那么sync
命令也应该有效。