我有一个 S3 存储桶,在其策略中对我的 CloudFront 源访问身份具有权限:
{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity <mine>"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::<my-bucket>/*"
}
]
}
此外,我创建了一个组并将 AmazonS3FullAccess 托管策略附加到它,并向该组添加了一个 IAM 用户。托管策略如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
}
]
}
但是,当该用户尝试向存储桶添加任何内容时,我收到 403(拒绝访问)。我不确定任何其他操作是否有效,我还没有编写代码来尝试它们。只有当我在存储桶策略中明确允许该用户的 ARN 直接访问存储桶时,他们才被允许添加对象。我错过了什么?上面的组策略似乎应该允许该组的成员访问所有存储桶中的所有操作,但事实并非如此。
编辑:在对文档进行了大量研究之后,我想我已经发现亚马逊不打算以这种方式使用群组。他们希望您改用角色,您可以将角色分配给 EC2 实例以进行自动凭证管理。很好,但是我不知道如何在本地测试我的代码(使用 aws-sdk Ruby gem)。亚马逊说要为您的访问 ID 和 key 定义环境变量 - 但什么访问 ID 和 key ?一个角色没有这样的东西......
最佳答案
尝试更换(在您的政策中):
"Resource": "arn:aws:s3:::<my-bucket>/*"
和:
"Resource": ["arn:aws:s3:::<my-bucket>", "arn:aws:s3:::<my-bucket>/*",]
和:
"Principal": {"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity <mine>"},
和:
"Principal": {"AWS": "arn:aws:iam::ACCOUNT_ID:user/USERNAME"},
关于amazon-web-services - 组上的 AmazonS3FullAccess 托管策略不授予 S3 权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28742320/