跨账号传递角色不允许:AWS CodePipeline跨账号部署故障排查
解决跨账号CodePipeline的"Cross-account pass role is not allowed"错误
以下是你可能存在的配置问题,按优先级排查:
- Account B跨账号角色的信任关系配置错误
你当前允许Account A根用户扮演该角色,但实际发起请求的是Account A的CodePipeline服务角色,而非根用户。需要修改Account B角色的信任策略,将Principal指定为Account A的CodePipeline服务角色ARN,示例如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::[AccountA-ID]:role/[你的CodePipeline服务角色名]" }, "Action": "sts:AssumeRole" } ] }
- Account A的CodePipeline服务角色缺少精确的
iam:PassRole权限
确保服务角色的权限策略中,iam:PassRole动作的资源明确指向Account B的跨账号角色ARN,而不是通配符。示例权限片段:
{ "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::[AccountB-ID]:role/[AccountB跨账号角色名]" }
注意:通配符*可能因IAM安全限制无法生效,必须指定具体角色ARN。
- Account B跨账号角色的权限策略不完整
该角色需要具备访问自身CodeCommit仓库的权限,至少包含以下动作:
{ "Effect": "Allow", "Action": [ "codecommit:GetRepository", "codecommit:GitPull", "codecommit:ListBranches" ], "Resource": "arn:aws:codecommit:[区域]:[AccountB-ID]:[你的仓库名]" }
CodePipeline源阶段的角色配置错误
在配置跨账号CodeCommit源时,确认选择的角色是Account A的CodePipeline服务角色,且该角色已被授权传递Account B的跨账号角色。避免直接在源阶段指定Account B的角色(除非服务角色已完全具备传递权限)。检查IAM权限边界的限制
如果Account A的CodePipeline服务角色或Account B的跨账号角色附加了权限边界,需确认边界策略允许sts:AssumeRole(针对Account B角色)和iam:PassRole(针对Account A服务角色)动作,否则会拦截跨账号角色传递操作。
内容的提问来源于stack exchange,提问作者abc
相关产品推荐
相关产品推荐

