首页 > 解决方案 > AWS IAM 角色的条件

问题描述

我创建了一个具有以下条件的 IAM 角色。如果满足我的三个条件中的任何一个,我想授予访问权限。因为不可能遇到他们三个。这是正确的方法吗?

{
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Effect": "Allow",
                    "Principal": {
                        "AWS": "*"
                    },
                    "Action": "*",
                    "Condition": {
                        "StringEquals": {
                            "a": "b",
                            "c": "d",
                            "x": "y"
                        }
                    }
                }
            ]
          }

对此的任何提示将不胜感激,谢谢!

标签: amazon-web-servicesamazon-iam

解决方案


本文档概述了工作原理:

如果您的策略具有多个条件运算符或附加到单个条件运算符的多个键,则使用逻辑 AND 评估条件。如果单个条件运算符包含一个键的多个值,则使用逻辑 OR 评估该条件运算符。所有条件都必须解析为 true 才能触发所需的 Allow 或 Deny 效果。

在您的示例中,您有一个条件运算符 -- StringEquals。该条件运算符有多个键a——、、cx。因此,您当前的示例将使用逻辑 AND 进行评估,这听起来不像您想要的,因为它需要满足所有三个条件,您说这永远不会发生。

要按照您的描述允许访问,我相信您需要做出 3 个单独的声明。每个语句都有一个条件运算符StringEquals,并且该运算符有一个键。然后,如果用户满足 3 条语句中的任何条件,则用户将获得您希望的访问权限:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "*",
            "Condition": {
                "StringEquals": {
                    "a": "b"
                }
            }
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "*",
            "Condition": {
                "StringEquals": {
                    "c": "d"
                }
            }
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "*",
            "Condition": {
                "StringEquals": {
                    "x": "y"
                }
            }
        }       
    ]
}

推荐阅读