AWS IAM несколько политик с конфликтующими условиями - PullRequest
0 голосов
/ 23 сентября 2019

Странно, я не могу найти никаких документов по этому вопросу - может быть, я не гуглюсь правильно: я ничего не вижу об условиях здесь: 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, или состояние одной из политик заблокирует его?

Ответы [ 2 ]

1 голос
/ 23 сентября 2019

Это похоже на политику, которая гласит:

  • если вы мужчина, проходите и собирайте $ 200
  • , если вы женщина, проходите и собирайте $ 200

Вы получаете $ 200 в любом случае.

Если какое-либо (или несколько) из условий allow имеет значение true, то у вас есть разрешение (конечно, при условии, что нет явного правила deny).

1 голос
/ 23 сентября 2019

Во-первых, позвольте мне ответить на вопрос напрямую.Это логически то, что делает IAM.

  1. Оцените все операторы политики идентификации.
  2. Все ли операторы политики Deny оценивают слишком True.Если это так, отклоните запрос.
  3. Если какой-либо из операторов политики Разрешить оценивает слишком True.Если это так, примите запрос
  4. Отклоните запрос, потому что нет оператора allow, который был оценен слишком верно.

Для приведенного выше варианта использования 1:

  1. Еслиустановлен тэг "allow", пользователю разрешеноЭто связано с тем, что 1 или оба оператора всегда будут истинными.
  2. Если тэг "allow" не установлен, то пользователю будет отказано.Это потому, что ни одно утверждение не будет правдой.

Чтобы разрешить пользователю доступ только в том случае, если для тега «allow» установлено значение true, необходимо следующее:

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

Вариант использования № 2 выше:

Пользователю всегда будет предоставлен доступ, поскольку первый оператор политики всегда имеет значение true.

Теперь, что, если только разрешить доступ, если и только если для тега "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"
                }
            }
        }
    ]
}

На этот раз мы объявляем политику явного запрета, чтобы гарантировать, что установлен тег "allow".

Теперь для получения дополнительной информации о чудесах IAM.

В логике оценки политики AWS IAM есть 11 решений.6 путей для отказа и только 2 для разрешения.Но этот график должен помочь вам понять это.

enter image description here

В случае несколько операторов в условии несколько операторов "логическое"и значениями "и multi" являются "логические или".

enter image description here

...