我试图让用户执行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/[email protected] /cdn-cgi/l/email-protection
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 在这里做错了什么?