You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS CodePipeline触发多CodeBuild失败:Access Denied(GitHub源)

解决CodePipeline触发CodeBuild报Access Denied的问题

这种情况我之前处理过好几次,核心原因是CodePipeline触发CodeBuild时使用的权限身份和你手动启动CodeBuild时不一样——手动运行通常用的是你的IAM用户权限或者CodeBuild自身的服务角色,但CodePipeline是用它专属的服务角色来调用CodeBuild的,这个角色权限不足就会触发Access Denied。下面是一步步的排查和解决方法:

1. 检查CodePipeline服务角色的权限

首先确认CodePipeline的服务角色是否拥有调用CodeBuild的权限:

  • 打开IAM控制台,搜索并找到你的CodePipeline对应的服务角色(默认命名格式是AWSCodePipelineServiceRole-<区域>-<流水线名称>)
  • 查看该角色附加的权限策略,确保包含codebuild:StartBuild动作,并且资源范围覆盖你的目标CodeBuild项目ARN
  • 如果没有对应的权限,添加一条类似下面的策略片段(替换成你的实际资源ARN):
{
    "Effect": "Allow",
    "Action": "codebuild:StartBuild",
    "Resource": "arn:aws:codebuild:<你的区域>:<你的账号ID>:project/<你的CodeBuild项目名>"
}

2. 检查CodeBuild项目的资源策略

有些场景下,CodeBuild项目会设置资源策略,限制只有特定主体能触发构建,这时候需要把CodePipeline的服务角色加入允许列表:

  • 打开CodeBuild控制台,进入你的项目配置页面,切换到资源策略标签
  • 如果已有策略,检查是否包含允许CodePipeline角色调用codebuild:StartBuild的语句;如果没有,添加如下语句(替换对应的ARN):
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "<你的CodePipeline服务角色ARN>"
            },
            "Action": "codebuild:StartBuild",
            "Resource": "<你的CodeBuild项目ARN>"
        }
    ]
}

3. 额外排查:KMS密钥权限(如果使用了加密)

如果你的CodeBuild项目使用了加密的S3存储桶或者其他需要KMS加密的资源,还要确认CodePipeline的服务角色拥有对应的KMS密钥解密权限:

  • 找到对应的KMS密钥,在密钥策略中添加允许CodePipeline角色执行kms:Decrypt和kms:GenerateDataKey的语句

如果以上步骤都没解决问题,建议去CloudTrail控制台搜索codebuild:StartBuild的API调用记录,查看具体的拒绝原因(比如是哪个资源的权限不足),这样能更精准定位问题。

内容的提问来源于stack exchange,提问作者Eugenio Valeiras

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:18:53