CodePipeline无法拉取CodeCommit源码的权限问题求助
问题描述
CodePipeline拉取CodeCommit源码时触发权限错误:
The service role or action role doesn’t have the permissions required to access the AWS CodeCommit repository named defon-liff. Update the IAM role permissions, and then try again. Error: User: arn:aws:sts::665852216333:assumed-role/df-stag-code-adminPipelineRole8AA4BBC2-LGTJJRF5EP4E/1720168399052 is not authorized to perform: codecommit:GetBranch on resource: arn:aws:codecommit:ap-northeast-1:665852216828:defon-liff because no identity-based policy allows the codecommit:GetBranch action
已完成排查:
- 确认报错角色
df-stag-code-adminPipelineRole8AA4BBC2-LGTJJRF5EP4E关联的adminPipelineRoleDefaultPolicyC79967BE策略包含STS AssumeRole权限,允许扮演df-stag-code-adminPipelinedfstagadmionsourcedfstag-1OZJ7LB64WXO2等角色 - 检查被扮演角色
df-stag-code-adminPipelinedfstagadmionsourcedfstag-1OZJ7LB64WXO2关联的adminPipelinedfstagadmionsourcedfstagadminsourceCodePipelineActionRoleDefaultPolicy32499DC6策略,已配置允许对arn:aws:codecommit:ap-northeast-1:665852216333:defon-*资源执行codecommit:GetBranch等操作,但错误仍存在
需解决两个问题:
- 如何修复该权限错误?
- 错误信息中ARN后缀的
1720168399052是什么?是否与问题相关?
解决方案与解释
一、修复权限错误
核心问题是资源ARN的账号ID不匹配:
- 报错里的CodeCommit资源ARN是
arn:aws:codecommit:ap-northeast-1:665852216828:defon-liff,账号ID为665852216828 - 策略中授权的资源是
arn:aws:codecommit:ap-northeast-1:665852216333:defon-*,账号ID为665852216333
两个账号ID不一致,导致策略权限无法覆盖目标仓库。修复步骤:
- 进入IAM控制台,找到
adminPipelinedfstagadmionsourcedfstagadminsourceCodePipelineActionRoleDefaultPolicy32499DC6策略 - 修改资源ARN中的账号ID为
665852216828,或根据安全需求使用通配符*匹配账号,示例配置:{ "Effect": "Allow", "Action": [ "codecommit:GetBranch", "codecommit:GetCommit", "codecommit:GitPull" // 按需添加其他必要的CodeCommit操作 ], "Resource": "arn:aws:codecommit:ap-northeast-1:665852216828:defon-*" } - 保存策略后,重新触发CodePipeline执行,验证错误是否消除
额外检查:确认CodePipeline的Source阶段配置中,是否正确指定了df-stag-code-adminPipelinedfstagadmionsourcedfstag-1OZJ7LB64WXO2作为动作角色,避免CodePipeline直接使用主角色df-stag-code-adminPipelineRole8AA4BBC2-LGTJJRF5EP4E访问CodeCommit(该角色无直接CodeCommit权限)
二、ARN后缀1720168399052的说明
这个数字是STS临时会话的Unix时间戳(转换为北京时间约2024-07-05 08:33:19),用于标识本次角色扮演的临时会话实例。它仅用来区分同一角色的不同会话,和当前权限问题无直接关联,无需对其做任何配置修改。
内容的提问来源于stack exchange,提问作者whitebear
相关产品推荐
相关产品推荐

