【发布时间】:2017-03-29 00:15:34
【问题描述】:
我一直在阅读多个帖子,例如 this one,关于如何使用不同的帐户将带有 aws cli 的数据从一个 S3 存储桶传输到另一个存储桶,但我仍然无法这样做。我确定是因为我还没有完全掌握 AWS 中账户 + 权限设置的概念(例如 iam 账户与访问密钥)。
我有一个供应商给了我一个名为 "Foo" 的用户和帐号 "123456789012",并使用 2 个访问密钥来访问他们的 S3 存储桶 "SourceBucket " 在 eu-central-1 中。我使用供应商提供的名为 "sourceProfile" 的访问密钥在我的机器上创建了一个配置文件。我在 us-east-1 中有名为 "DestinationBucket" 的 S3,我将存储桶策略设置为以下内容。
{
"Version": "2012-10-17",
"Id": "Policy12345678901234",
"Statement": [
{
"Sid": "Stmt1487222222222",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:user/Foo"
},
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::DestinationBucket/",
"arn:aws:s3:::DestinationBucket/*"
]
}
]
}
奇怪的部分来了。我可以使用以下命令行列出文件,甚至可以从 "DestinationBucket" 下载文件。
aws s3 ls s3://DestinationBucket --profile sourceProfile
aws s3 cp s3://DestinationBucket/test ./ --profile sourceProfile
但是当我尝试使用配置文件将任何内容复制到 "DestinationBucket" 时,我收到了拒绝访问错误。
aws s3 cp test s3://DestinationBucket --profile sourceProfile --region us-east-1
upload failed: ./test to s3://DestinationBucket/test An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
我是否设置了存储桶策略,尤其是操作列表?从目的地到本地的 ls 和 cp 怎么能工作,但从本地到目的地桶的 cp 不起作用?
【问题讨论】:
-
你能不能暂时把Action改成
"s3:*"来测试是否有效?如果是这样,那么aws s3 cp命令可能需要在目标存储桶中执行一些额外的操作。 -
是的,我试过 s3:* 并得到相同的结果
-
那么它肯定可以工作!我建议暂时将其更改为
*的 Principal 以查看它是否有效。这将有助于缩小可能出错的范围。
标签: amazon-web-services amazon-s3 aws-cli