Я пытаюсь написать политику 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"
}
}
}
]
}