Сбой для PassRole с iam: PassedToService для CodeBuild - PullRequest
2 голосов
/ 25 марта 2019

Я пытаюсь разрешить пользователям выполнять codebuild:StartBuild, ограничивая iam:PassRole передачей пользовательской роли Codebuild только службе CodeBuild.

Консервированные политики никогда не ограничивают iam:PassRole и даже не используют "Resource":"*", что позволяет эффективно передавать любую роль любой службе. Это кажется мне немного неряшливым, но, возможно, это только я.

Ниже приводится выдержка из правил - codebuild:StartBuild, codebuild:List* и т. Д., Все разрешены.

{   "Version": "2012-10-17",
    "Statement": [
        {   "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::*:role/my-codebuild-role",
            "Condition": {
                "StringLike": {
                    "iam:PassedToService": "*"
                }
            }
        }
    ]
}

Эта политика заставляет codebuild:StartBuild возвращать ошибку:

User: arn:aws:sts::123456789:assumed-role/MyDevRole/me@example.com
  is not authorized to perform: iam:PassRole on resource:
    arn:aws:iam::123456789:role/my-codebuild-role

Теперь удаление части политики Condition делает codebuild:StartBuild успешным.

Журналы CloudTrail имеют одно и то же состояние, не предоставляя никакой дополнительной информации ни об этом конкретном событии, ни о событиях до или после него.

Я также пробовал варианты соответствия Condition, в том числе: укажите codebuild.amazonaws.com в качестве службы; укажите codebuild.eu-west-1.amazonaws.com в качестве услуги; то же самое, используя StringEquals; указав список всех принципалов AWS и используя ForAnyValue:StringLike.

Не имеет смысла, что StringLike совпадение с * не удается, в то время как удаление Condition в целом заставляет его работать.

Что я делаю не так? Что AWS не говорит мне? Или, что здесь делает AWS неправильно?

...