Я пытаюсь разрешить пользователям выполнять 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 неправильно?