我正在尝试为我的S3 bucket设置一个云前端分发。目前,S3 bucket由不同的用户使用,并且为这些用户设置了bucket策略。我想为一个完全不同的用户X.设置cloudfront分发
我已经创建了分发,将用户X添加到受信任的签名者中。现在我明白了,我需要创建一个原始访问标识,并修改bucket策略以授予对该标识的访问权限,以便CF可以访问该bucket。
我想确保我不会剥夺已经拥有S3存储桶的用户对它的访问权限,并允许CF访问该存储桶。我已经修改了bucket策略,如下所示。这样做对吗?
{
"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策略(包括bucket策略)使用以下逻辑进行处理:
- 如果任何匹配的策略语句拒绝该操作,则拒绝该请求;否则,继续:
- 如果任何匹配的策略语句允许该操作,则允许该请求;否则,继续:
- 拒绝请求
在当前情况下,有些请求与一条语句匹配,有些与另一条匹配,在这两种情况下,请求都是允许的。任何与这两条语句都不匹配的请求都将被隐式拒绝。
有些人被绊倒的原因是没有完全理解这样一个事实,即no匹配的拒绝语句ever被匹配的允许覆盖,但每个的匹配的允许语句总是被匹配的拒绝覆盖。你的声明没有否认,所以这不是问题。
还请注意,所有策略语句都经过了测试,因此语句声明的顺序并不重要。
评估策略的顺序对评估结果没有影响。评估所有策略,结果总是允许或拒绝请求。
http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html