Я бы хотел, чтобы все пользователи могли подключаться к экземплярам 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.
Результатом является либо пользователь, который является частью группы, к которой присоединена политика, либо ему отказано в доступе, либо ему разрешено подключаться к любому экземпляру независимо от прикрепленных к нему тегов.
Прочтите, что многие решения подобных проблем в основном заключаются в том, что "некоторые функции не поддерживают тегирование на уровне ресурсов, но в документации явно говорится, что это так.