Há um exemplo específico disso na documentação da 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"]
}
}
}
}
Ele é baseado em uma correspondência Permitir, em vez de Negar, e usa correspondência de cadeia de caracteres positiva em vez de correspondência de cadeia de caracteres negativa. Existe alguma razão para você querer usar um Deny?
Usando um Deny, você está dizendo:
Se o usuário tentar criar um volume, negue a ação se (1) as tags "empname" e "team" não forem incluídas E (2) se alguma tag especificada for "empname" ou "team". / p>
Quando você especifica tags aleatórias, a primeira condição é satisfeita, , mas a segunda não é , portanto, a negação não ocorrerá.
Acho que seria muito mais lógico e menos confuso se você seguisse o exemplo da AWS e usasse a opção Permitir e corresponder de cadeia de caracteres positiva.
Caso contrário, tente alterar a segunda condição para:
"ForAllValues:StringNotEquals": {
"aws:TagKeys": [
"empname",
"team"
]
}
mas não tenho certeza se isso funcionaria.