Написание политики IAM для ограничения подключений AWS SSM к экземплярам EC2 с помощью тегов EC2 - PullRequest
0 голосов
/ 04 апреля 2019

Я бы хотел, чтобы все пользователи могли подключаться к экземплярам EC2 с помощью команды startsession AWS SSM (Systems Manager), но ограничивать, к каким из них они могут подключаться, с помощью тегов на экземплярах EC2.Пользователи IAM, принадлежащие к группе 'webserver-dev', будут иметь политику, позволяющую им aws ssm start-session --target i-12341234 к любому экземпляру EC2 с именем тега 'SSMTag' и значением 'WebServer'.Любые пользователи в группе devserver-dev смогут подключаться к экземплярам с SSMTag = 'DevServer' и т. Д.

У меня есть политика, позволяющая подключаться к любым EC2 экземплярам,но как только я добавляю условие 'условие' в политику JSON, доступ всегда запрещен (или всегда разрешен).

Я попытался добавить условия с различными синтаксисами для политики, aws: TagKeys, ssm: ResourceTag, ec2: ResourceTag и некоторые другие, но ни один из них не позволяет мне делать то, что я хочу.Документация , кажется, указывает на то, что я могу сделать именно это, но либо я не понимаю, как работает тегирование, либо неправильно понимаю документы.

Моя текущая политикадля серверов разработки выглядит так:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "ssm:StartSession",
            "Resource": "arn:aws:ec2:*:*:instance/*",
            "Condition": {
                "StringEquals": {
                    "ssm:ResourceTag/SSMTag": "DevServer"
                }
            }
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "ssm:TerminateSession",
            "Resource": "arn:aws:ssm:*:*:session/${aws:username}-*"
        }
    ]
}

Я также пробовал варианты строк условий на:

            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/SSMTag": "DevServer"
                }
            }

и

            "Condition": {
                "ForAllValues:StringEquals": {
                    "ec2:ResourceTag:SSMTag": "DevServer"
                }
            }

Что я хочуесли пользователь не входит в группу webserver-dev, он не может запустить aws ssm start-session и подключиться к любым экземплярам ec2 , если не помечен тегом SSMTag со значением WebServer.

Результатом является либо пользователь, который является частью группы, к которой присоединена политика, либо ему отказано в доступе, либо ему разрешено подключаться к любому экземпляру независимо от прикрепленных к нему тегов.

Прочтите, что многие решения подобных проблем в основном заключаются в том, что "некоторые функции не поддерживают тегирование на уровне ресурсов, но в документации явно говорится, что это так.

1 Ответ

1 голос
/ 04 апреля 2019

Я получил электронное письмо от службы поддержки AWS, и похоже, что это проблема с частью условия «StringEquals».Эта политика работает правильно:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "ssm:StartSession",
            "Resource": "arn:aws:ec2:*:*:instance/*",
            "Condition": {
                "ForAnyValue:StringEqualsIfExists": {
                    "ssm:resourceTag/SSMTag": "DevServer"
                }
            }
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "ssm:TerminateSession",
            "Resource": "arn:aws:ssm:*:*:session/${aws:username}-*"
        }
    ]
}

Разница в синтаксисе: "ForAnyValue:StringEqualsIfExists": {

Надеюсь, это поможет кому-то в будущем.

...