Политика AWS IAM: помечать только немаркированные ресурсы

У нас есть пользователь 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": "*"
            }
        }

Это ведет себя точно так же, как «Нулевое» условие, даже в Симуляторе политики.

Есть ли у вас какие-либо идеи? Заранее спасибо.


person SiLeX    schedule 03.09.2015    source источник
comment
Вы пробовали это против экземпляра EC2, а не группы безопасности? Было бы интересно посмотреть, работает ли политика в этом сценарии.   -  person jarmod    schedule 03.09.2015
comment
@jarmod да, ведет себя точно так же.   -  person SiLeX    schedule 03.09.2015


Ответы (1)


Amazon EC2 частично поддерживает разрешения на уровне ресурсов. На момент написания действие CreateTags не поддерживает разрешения на уровне ресурсов. Вы можете увидеть список действий, поддерживающих разрешения на уровне ресурсов здесь.

Вы можете проверить это, изменив свою политику, указав StopInstances (которая поддерживает разрешения на уровне ресурсов) вместо CreateTags. Ваш пользователь IAM сможет остановить экземпляр EC2 только в том случае, если у этого экземпляра нет тега Project. В качестве альтернативы, если вы измените условие Null на false, то пользователь IAM сможет остановить экземпляр EC2 только в том случае, если у экземпляра есть есть тег Project.

Итак, ваша политика предположительно будет правильной в какой-то момент в будущем, когда CreateTags будет поддерживать разрешения на уровне ресурсов.

person jarmod    schedule 03.09.2015