Создание политики AWS IAM, которая ограничивает запуск экземпляров определенными группами безопасности - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь написать политику IAM, которая позволяет пользователям AWS запускать экземпляр только в том случае, если группа безопасности относится к одному из двух типов.Поскольку нет ключа безопасности группы условий, я выбрал использование условных операторов, так что экземпляр EC2 нельзя запускать / запускать , если группа безопасности не входит ни в одну из двух категорий.В приведенной ниже политике я обращаюсь к этим утвержденным группам безопасности с помощью их тегов.

Проблема, с которой я сталкиваюсь, заключается в том, что когда у меня есть группа безопасности, которая соответствует , равному первому условию, экземпляр может быть запущен.Однако, когда я использую группу безопасности, равную «UCSFInbound» (второе условие), экземпляр не будет запущен (даже если он должен).

У меня есть отдельная политика, которая предоставляет более широкий доступ к ресурсам EC2, однако, насколько я понимаю, AWS сначала регистрирует действия "запретить", а затем "разрешает" действия.И если по этой причине у меня возникла проблема, то ни один из двух случаев (групп безопасности) не должен работать.

Политика IAM :

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Deny",
            "Action": [
                "ec2:StartInstances",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:subnet/*",
                "arn:aws:ec2:*:*:key-pair/*",
                "arn:aws:ec2:*:*:instance/*",
                "arn:aws:ec2:*::snapshot/*",
                "arn:aws:ec2:*:*:launch-template/*",
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:security-group/*",
                "arn:aws:ec2:*:*:placement-group/*",
                "arn:aws:ec2:*:*:network-interface/*",
                "arn:aws:ec2:*::image/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "ec2:ResourceTag/aws:cloudformation:stack-id": "NetworkResourcesStack"
                },
                "StringNotEquals": {
                    "ec2:ResourceTag/Name": "UCSFInbound"
                }
            }
        }
    ]
} 

1 Ответ

0 голосов
/ 22 мая 2018

Как правило, вам следует избегать использования политик Deny, если они не отменяют другие политики.

Например, вы можете контролировать доступ к Amazon S3 следующим образом:

  1. Allow все сотрудники имеют доступ ко всем корзинам S3
  2. Deny доступ к корзине HR, если вы не являетесь сотрудником отдела кадров

При этом используется общая политика для предоставления большинству доступа, нозатем использует Deny для покрытия особого случая.

Таким образом, вы должны поместить arn:aws:ec2:region:account:security-group/security-group-id в начальную политику Allow, которая позволяет им использовать EC2.

...