У нас есть пользователь AWS, который должен иметь возможность Create использовать различные ресурсы, такие как Instances, Volumes и SecurityGroups, но не изменять ресурсы, не являющиеся частью его проекта.
Для этого мы разрешаем создание ресурсов и позволяем пользователю CreateTags его ресурсы с тегом Project и значением <user's team name here>. Он не должен иметь возможность помечать уже отмеченные ресурсы и, следовательно, ресурсы других команд. (Здесь каждый ресурс правильно помечен).
Я создал политику с утверждением:
[...]
{
"Effect": "Allow",
"Action": "ec2:CreateTags",
"Resource": "*",
"Condition": {
"Null": {
"ec2:ResourceTag/Project": "true"
}
}
}
[...]
Если я использую Policy Simulator от AWS, мне разрешено вызывать CreateTags для ресурса без тега Project. Если я имитирую это, установив тег Project, действие будет отклонено, как и ожидалось.
К сожалению, если я использую одни и те же действия из интерфейса командной строки AWS с этой политикой, CreateTags будет разрешено каждый раз. Даже если тег уже установлен и даже в сторонних экземплярах, пользователь не может изменять:
как пользователь с указанной политикой
aws ec2 create-security-group --group-name "test-sg" --description "test" # creation of a new resource
(AWS answer){
"GroupId": "sg-4a3151aa"
}
.
aws ec2 create-tags --resources sg-4a31513c --tags Key=Project,Value=web-performance # this should work, ResourceTag Project is Null
(success)
aws ec2 create-tags --resources sg-4a31513c --tags Key=Project,Value=web-performance # should *not* work, ResourceTag Project is already set and not Null
(success)
Как видите, он работает оба раза, а также работает на сторонних проектах, где тег уже установлен.
Я также пробовал это с
"Condition": {
"StringNotLike": {
"ec2:ResourceTag/Project": "*"
}
}
Это ведет себя точно так же, как «Нулевое» условие, даже в Симуляторе политики.
Есть ли у вас какие-либо идеи? Заранее спасибо.