AWS CodePipeline DOWNLOAD_SOURCE阶段授权失败求助
问题描述
我注册了免费AWS账号用于学习,已在IAM中创建管理员用户组及用户。按照《Automating your API testing with AWS CodeBuild, AWS CodePipeline, and Postman》教程操作时,在CodePipeline的Build转换环节DOWNLOAD_SOURCE阶段遇到错误:
CLIENT_ERROR: authorization failed for primary source and source version
已尝试的操作
- 为服务角色添加并附加连接权限策略,后续将Action修改为
codepipeline:GetPipelineState - 添加并附加GitPull权限策略
- 断开并重新连接GitHub连接、创建新个人访问令牌
- 将S3设置为公开并配置对应权限
- 将源代码中的Node.js版本升级至16.18.0
以上操作均未解决问题,现寻求可行的排查与解决方向。代码仓库地址:https://github.com/venushofler/my-aws-codepipeline-codebuild-with-postman.git
排查与解决步骤
确认CodePipeline服务角色的GitHub连接权限
若使用AWS CodeStar Connections连接GitHub,需确保CodePipeline的服务角色被授予codestar-connections:UseConnection权限(而非仅codepipeline:GetPipelineState)。可给角色附加如下策略(替换占位符为实际值):{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "codestar-connections:UseConnection", "Resource": "arn:aws:codestar-connections:<区域>:<AWS账号ID>:connection/<连接ID>" } ] }验证GitHub个人访问令牌(PAT)权限
若直接使用PAT连接GitHub,需确认PAT拥有repo权限(仓库读取权限),且未过期。避免授予多余权限,但必须包含仓库的读访问权限。检查CodeBuild服务角色的S3权限
DOWNLOAD_SOURCE阶段的错误可能源于CodeBuild角色无权限读取CodePipeline的Artifact存储桶。需确保角色拥有s3:GetObject和s3:ListBucket权限,对应Artifact桶的策略如下:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::<你的Artifact桶名>", "arn:aws:s3:::<你的Artifact桶名>/*" ] } ] }确认源码版本有效性
检查CodePipeline中配置的源码分支/标签是否存在于GitHub仓库中,避免拼写错误或分支已被删除。检查AWS区域一致性
确保CodePipeline、CodeBuild、S3桶及GitHub连接均处于同一AWS区域,跨区域配置可能导致权限验证失败。查看详细错误日志
进入CodePipeline的失败阶段,点击「查看日志」跳转至CloudWatch Logs,查看具体的授权错误细节(如缺失的资源或权限),精准定位问题。
内容的提问来源于stack exchange,提问作者Venus

