【问题标题】:AWS IAM multiple policies with conflicting conditionsaws iam 具有冲突条件的多个策略
【发布时间】:2020-01-23 18:25:25
【问题描述】:

奇怪的是我找不到这方面的文档-也许我没有正确搜索:我在这里看不到任何关于条件的信息: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"
                }
            }
        }
    ]
}

一个看起来像这样:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "secretsmanager:*",
            "Resource": "*",
            "Condition": {
                "StringNotEquals": {
                    "secretsmanager:ResourceTag/allow": "False"
                }
            }
        }
    ]
}

谁赢了?我不认为你可以订购政策。 AWS 如何合并条件?

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

一个策略允许访问所有资源,没有这样的条件:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "secretsmanager:*",
            "Resource": "*"
        }
    ]
}

一个政策有一个条件:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "secretsmanager:*",
            "Resource": "*",
            "Condition": {
                "StringNotEquals": {
                    "secretsmanager:ResourceTag/allow": "True"
                }
            }
        }
    ]
}

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

【问题讨论】:

标签: amazon-web-services amazon-iam


【解决方案1】:

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

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

对于上述用例 1:

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

如果标签“allow”设置为true,则只允许用户访问,您需要以下内容:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "secretsmanager:*",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "secretsmanager:ResourceTag/allow": "True"
                }
            }
        }
    ]
}

上面的用例 #2:

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

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

{
    "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"
                }
            }
        }
    ]
}

这一次我们发布了一个明确的拒绝政策,以保证设置了“允许”标签。

现在了解有关 IAM 奇迹的更多信息。

AWS IAM Policy Evaluation Logic 中有 11 个决策点。 6 条拒绝路径,只有 2 条允许。但是这张图应该可以帮助你弄清楚。

multiple statements in the condition 的情况下,多个语句是“布尔与”,多个值是“布尔或”。

【讨论】:

  • 这并没有说明冲突条件是如何合并的
  • 条件不合并,它们使用布尔逻辑进行评估。我已经更新了我的答案以解释多个条件语句。如果您在效果声明中包含完整的政策声明,我将能够回答 where 问题。
  • 将我的问题添加到行动和一切
  • 我用完整的政策示例更新了我的问题。如果你能帮我确定行为会是什么,那就太棒了
  • 感谢您提供的详细信息,这对您有所帮助。我更新了我的答案。我认为您正在寻找的是我的第二条政策,其中包含允许和拒绝声明。请注意我对允许和拒绝所做的 StringNotLike 和 StringLike 的更改。
【解决方案2】:

这就像一个政策规定:

  • 如果你是男性,通过去收集 200 美元
  • 如果你是女性,通过去收集 200 美元

无论哪种方式,你都会得到 200 美元。

如果allow 子句中的任何一个(或多个)为真,那么您就有权限(当然,假设没有明确的deny 规则)。

【讨论】:

  • 所以在我在帖子中询问的第二种情况下,我需要将策略明确拒绝并使用StringEquals?
  • 如果你想允许访问当且仅当标签“allow”设置为true,那么你只需要一个带有该条件的allow语句。你不需要否认。拒绝是默认行为。如果您没有明确允许某事,您将被拒绝。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-11
  • 2012-11-23
  • 2016-06-05
  • 1970-01-01
  • 2016-12-23
相关资源
最近更新 更多