Попытка предоставить пользователю IAM права на создание и назначение ролей, но ограничить тип доступных политик - PullRequest
1 голос
/ 26 мая 2020

Я пытаюсь дать пользователю права на создание ролей (поскольку я не предоставляю права на создание ключей доступа).

Я придумал политику, позволяющую пользователю создавать и назначать Роли. Проблема, с которой я столкнулся, заключается в том, что прямо сейчас пользователь может создать роль с политикой «Доступ к администратору», даже если он не является администратором. Есть ли способ отклонить определенные политики в списке параметров?

Ниже приведена политика, созданная с помощью предоставленного мастера.

Спасибо,

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "iam:CreateInstanceProfile",
        "iam:UpdateAssumeRolePolicy",
        "iam:ListRoleTags",
        "iam:UntagRole",
        "iam:PutRolePermissionsBoundary",
        "iam:TagRole",
        "iam:RemoveRoleFromInstanceProfile",
        "iam:CreateRole",
        "iam:AttachRolePolicy",
        "iam:PutRolePolicy",
        "iam:ListInstanceProfilesForRole",
        "iam:PassRole",
        "iam:DetachRolePolicy",
        "iam:DeleteRolePolicy",
        "iam:ListAttachedRolePolicies",
        "iam:ListRolePolicies",
        "iam:ListPolicies",
        "iam:GetRole",
        "iam:ListRoles",
        "iam:DeleteRole",
        "iam:UpdateRoleDescription",
        "iam:CreateServiceLinkedRole",
        "iam:UpdateRole",
        "iam:DeleteServiceLinkedRole",
        "iam:GetRolePolicy"
      ],
      "Resource": "*",
      "Condition": {
        "BoolIfExists": {
          "aws:MultiFactorAuthPresent": "true"
        }
      }
    }
  ]
}

EDIT: 26 / 6/20 Я попытался использовать границы разрешений, как было предложено, но, возможно, моего понимания все еще недостаточно. Я создал новую политику:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DenyAdmin",
            "Effect": "Deny",
            "Action": [
                "iam:*"
            ],
            "Resource": "*",
            "Condition": {
                "ArnEquals": {
                    "iam:PolicyArn": [
                        "arn:aws:iam::aws:policy/AdministratorAccess"
                    ]
                }
            }
        }
    ]
}

Я думаю, это будет означать Запретить любые / все действия iam, когда это касается политики доступа администратора. Однако в результате все назначения / создание ролей запрещены, даже если присоединяемая политика НЕ ​​является AdministratorAccess. Однако, если я настрою политику и добавлю условие ArnNotEquals к AdministratorAccess - тогда я, похоже, смогу делать то, что хочу (просто используя это как политику, а не как границу)

На основе того, что я Вы уже видели, Граница разрешений, вероятно, является правильным путем к go, но я пока не могу понять его, поэтому не решаюсь пометить его как «Правильный ответ».

Ответы [ 2 ]

2 голосов
/ 26 мая 2020

Вы можете использовать AWS Границы разрешений IAM: Границы разрешений для объектов IAM - AWS Управление идентификацией и доступом

«Граница разрешений - это расширенная функция для использования управляемого policy для установки максимальных разрешений, которые политика на основе идентификации может предоставить объекту IAM. Граница разрешений объекта позволяет ему выполнять только те действия, которые разрешены как политиками, основанными на идентификации, так и границами разрешений. «

Вот пошаговое введение в AWS Блог безопасности: Делегируйте управление разрешениями разработчикам с помощью границ разрешений IAM | AWS Блог по безопасности

0 голосов
/ 26 июня 2020

Итак, используя указания Джона Ротенштейна и, наконец, осознав, где я ошибся, способ получить то, что я хочу, - это добавить пользователю следующую границу разрешений:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "BoundaryAllowAllNotAdminAccess",
            "Effect": "Allow",
            "Action": "*",
            "Resource": "*",
            "Condition": {
                "ArnNotEquals": {
                    "iam:PolicyArn": [
                        "arn:aws:iam::aws:policy/AdministratorAccess"
                    ]
                }
            }
        }
    ]
}

Я ошибся, подумал Мне нужно Запретить, но Граница - это ограничение И, поэтому я могу разрешить все, если это не AdministratorAccess, тогда другие политики предоставят фактические действия / ресурсы, а AWS разрешит, пока он не использует Доступ администратора.

...