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, вы говорите:
Если пользователь пытается создать том, отклоните действие, если (1) теги empname и team не включены И (2) если какие-либо указанные теги являются либо empname, либо team.
Когда вы указываете случайные теги, первое условие выполняется, но второй нет, поэтому отказ не произойдет.
Я думаю, что было бы намного логичнее и менее запутанно, если бы вы последовали примеру AWS и использовали Allow и положительное сопоставление строк.
В противном случае попробуйте изменить второе условие на:
"ForAllValues:StringNotEquals": {
"aws:TagKeys": [
"empname",
"team"
]
}
но я не уверен, что это сработает.