AWS IAM 条件冲突的多个策略

red*_*888 7 amazon-web-services amazon-iam

奇怪的是我找不到这方面的文档;也许我谷歌搜索不对。我在这里看不到任何有关条件的信息:https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html

我有两个问题:

  • 我对同一资源的同一实体应用了两个策略

一个看起来像这样:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "secretsmanager:*",
            "Resource": "*",
            "Condition": {
                "StringNotEquals": {
                    "secretsmanager:ResourceTag/allow": "True"
                }
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

其中一个看起来像这样:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "secretsmanager:*",
            "Resource": "*",
            "Condition": {
                "StringNotEquals": {
                    "secretsmanager:ResourceTag/allow": "False"
                }
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

哪一个获胜?我认为你不能订购保单。AWS如何合并条件?

  • 我的另一个问题:我的一份保单有条件,另一份则没有。两者都附加到同一实体并针对相同的资源

一项策略允许无条件访问所有资源,如下所示:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "secretsmanager:*",
            "Resource": "*"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

一项政策有一个条件:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "secretsmanager:*",
            "Resource": "*",
            "Condition": {
                "StringNotEquals": {
                    "secretsmanager:ResourceTag/allow": "True"
                }
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

是否允许实体访问未标记的资源Allow:True,或者其中一项策略的条件是否会阻止它?

Wal*_*tDe 12

首先,让我直接回答这个问题。从逻辑上讲,这就是 IAM 正在做的事情。

  1. 评估所有身份策略声明。
  2. 任何 Deny 策略语句的评估结果是否为 True。如果是这样,请拒绝该请求。
  3. 任何允许策略语句的评估结果是否为 True。如果是这样接受请求
  4. 拒绝请求,因为没有评估为 true 的允许语句。

对于上面的用例 1:

  1. 如果设置了标签“允许”,则允许用户。这是因为其中一个或两个陈述始终为真。
  2. 如果未设置“允许”标签,则用户将被拒绝。这是因为这两种说法都不会成立。

要仅在标签“allow”设置为 true 时允许用户访问,您需要以下内容:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "secretsmanager:*",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "secretsmanager:ResourceTag/allow": "True"
                }
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

上面的用例#2:

由于第一个策略声明始终为真,因此用户将始终被授予访问权限。

现在,如果仅当且仅当标签“allow”设置为 true 时才允许访问,该怎么办?当它不真实时,您需要明确否认:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "secretsmanager:*",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "secretsmanager:ResourceTag/allow": "True"
                }
            }
        },
        {
            "Effect": "Deny",
            "Action": "secretsmanager:*",
            "Resource": "*",
            "Condition": {
                "StringNotEquals": {
                    "secretsmanager:ResourceTag/allow": "True"
                }
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

这次我们广告了一个明确的拒绝策略来保证设置“允许”标签。

现在让我们了解 IAM 奇迹的更多信息。

AWS IAM 策略评估逻辑中有 11 个决策点。拒绝 6 条路径,仅允许 2 条路径。但这张图应该可以帮助你理解。

在此输入图像描述

如果条件中有多个语句,则多个语句是“布尔与”,多值是“布尔或”。

在此输入图像描述

  • 条件不会合并,而是使用布尔逻辑进行评估。我已经更新了我的答案来解释多个条件语句。如果您在效果声明中包含完整的政策声明,我将能够回答问题。 (2认同)