IAM 策略中跨多个 json 策略的评估逻辑

Evaluation logic in IAM policy across multiple json policies

对于 IAM 策略,假设有两个策略:

  1. 包含允许访问的单个语句的策略。
  2. 第二个策略只有一条语句来拒绝访问。

例如:

// first document
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowS3ListRead",
            "Effect": "Allow",
            "Action": ["s3:ListAllMyBuckets"],
            "Resource": "*",
            "Principal": { "AWS": "arn:aws:iam::12345:group/davidsgroup" }
        }
    ]
}
// second document
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DenyS3ListRead",
            "Effect": "Deny",
            "Action": ["s3:ListAllMyBuckets"],
            "Resource": "*",
            "Principal": { "AWS": "arn:aws:iam::12345:user/david" }
        }
    ]
}

如果声明冲突,资源最终是否拒绝给用户,如何判断?例如,是按文件顺序吗?原则的粒度?或者,当有 多个政策文件 可能适用于给定用户时,通常如何确定。

最基本的级别:显式拒绝 > 显式允许 > 隐式拒绝。

在您的示例中,即使明确允许 David 的 IAM 组调用 s3:ListAllMyBuckets,David 的 IAM 用户也被明确拒绝相同的操作。在这种情况下,显式拒绝胜过显式允许,David 被拒绝了。

如需更深入的了解,请参阅 Policy evaluation logic