我有一个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在存储桶策略中直接访问存储桶时,才允许他们添加对象。我想念什么?似乎上述组策略应该允许该组的成员访问所有存储桶中的所有操作,但事实并非如此。
编辑:在对文档进行了大量研究之后,我想我发现Amazon不打算以这种方式使用组。他们希望您改用角色,您可以将角色分配给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/