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

Dav*_*542 5 amazon-web-services amazon-iam

对于 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" }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)
// second document
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DenyS3ListRead",
            "Effect": "Deny",
            "Action": ["s3:ListAllMyBuckets"],
            "Resource": "*",
            "Principal": { "AWS": "arn:aws:iam::12345:user/david" }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

如果存在冲突的语句,如何确定该资源最终是否会被拒绝给用户?例如,是按文档顺序吗?原则的粒度?或者,当存在可能适用于给定用户的多个策略文档时,通常如何确定这一点。

jar*_*mod 2

在最基本的层面上:显式拒绝 > 显式允许 > 隐式拒绝。

在您的示例中,尽管明确允许 David 的 IAM 组调用s3:ListAllMyBuckets,但 David 的 IAM 用户被明确拒绝执行相同的操作。在这种情况下,显式拒绝胜过显式允许,并且 David 被拒绝。

如需更深入的了解,请参阅策略评估逻辑