如何为 AWS 和 CF 用户分配对 S3 存储桶的访问权限?

How to assign access to an S3 bucket to both AWS and CF users?

我正在尝试为我的 S3 存储桶设置云前端分发。目前,S3 存储桶由不同的用户使用,并且为这些用户设置了存储桶策略。我想为完全不同的用户 X 设置云端分发。

我已经创建了分发,将用户 X 添加到可信签署人。现在我明白我需要创建一个原始访问身份并修改存储桶策略以授予对该身份的访问权限,以便 CF 可以访问该存储桶。

我想确保我不会剥夺已经拥有它的用户的 S3 存储桶访问权限,并授予 CF 访问该存储桶的权限。我修改了存储桶策略,如下所示。这是这样做的正确方法吗?

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": “1”,
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::12345678:root"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::AAAAAAA/*”
},
{
"Sid": "2",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin          Access Identity ABCDEFGHI”
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::AAAAAAA/*”
}
]
}

是的,这似乎是正确的。

使用此逻辑处理 IAM 策略(包括存储桶策略):

  • 如果任何匹配的策略语句拒绝该操作,则拒绝该请求;否则,继续:
  • 如果任何匹配的策略语句允许该操作,则允许该请求;否则,继续:
  • 拒绝请求

在当前情况下,一些请求匹配一个语句,一些请求匹配另一个,在这两种情况下,请求都被允许。任何与这两个语句都不匹配的请求都将被隐式拒绝。

有些人被绊倒的原因是没有完全理解 no 匹配拒绝语句 ever 被匹配允许覆盖这一事实,但是 every 匹配的允许语句 always 被匹配的拒绝覆盖。你的陈述没有否认,所以这不是问题。

另请注意,所有 策略语句都经过测试,因此语句声明的顺序并不重要。

The order in which the policies are evaluated has no effect on the outcome of the evaluation. All policies are evaluated, and the result is always that the request is either allowed or denied.

http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html