我有一个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和密钥定义环境变量 - 但访问ID和密钥是什么?对于一个角色来说,没有这样的事情......
答案 0 :(得分:0)
尝试替换(在您的政策中):
"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"},