0 голос против любимый Я создал политику IAM, запрещающую создание томов EBS, если они не помечены как ключами «empname» и «team». Политика закреплена за тестовым пользователем.
Когда я пытаюсь создать том без определенных тегов, возникает ошибка, и это нормально. Но теперь, когда я пытаюсь создать том с любым другим тегом (что-либо с динамическим значением), он создает том, что является неожиданным.
Это созданная политика IAM для того же:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowCreateTaggedVolumes",
"Effect": "Deny",
"Action": "ec2:CreateVolume",
"Resource": "arn:aws:ec2:us-east-1:axxxxxxxxxxx:volume/*",
"Condition": {
"ForAllValues:StringNotLike": {
"aws:RequestTag/empname": "*",
"aws:RequestTag/team": "*"
},
"ForAllValues:StringEquals": {
"aws:TagKeys": [
"empname",
"team"
]
}
}
}
]
}
Есть ли способ ограничить для создания объема тогда и только тогда, когда используются оба этих тега. Было бы здорово, если бы мы также могли указать значения тегов для использования.
В документации AWS есть конкретный пример:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowCreateTaggedVolumes",
"Effect": "Allow",
"Action": "ec2:CreateVolume",
"Resource": "arn:aws:ec2:us-east-1:123456789012:volume/*",
"Condition": {
"StringEquals": {
"aws:RequestTag/costcenter": "115",
"aws:RequestTag/stack": "prod"
},
"ForAllValues:StringEquals": {
"aws:TagKeys": ["costcenter","stack"]
}
}
}
}
Он основан на разрешении, а не на запрете, и использует положительное сопоставление строк, а не отрицательное сопоставление строк. Есть ли причина, по которой вы хотите использовать Deny?
Используя Deny, вы говорите:
Если пользователь пытается создать том, запретите действие, если (1) теги empname и team не включаются И (2), если какие-либо указанные теги являются либо "empname", либо "team".
Когда вы указываете случайные теги, первое условие удовлетворяется, , но второе - нет , поэтому отказ не произойдет.
Я думаю, что было бы намного логичнее и менее запутанно, если бы вы следовали примеру AWS и использовали Allow и положительное сопоставление строк.
В противном случае попробуйте изменить второе условие на:
"ForAllValues:StringNotEquals": {
"aws:TagKeys": [
"empname",
"team"
]
}
, но Я не совсем уверен, сработает ли это.