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

使用AWS CDK配置CI/CD流水线时遇codebuild:StartBuild权限错误

问题描述

我尝试用AWS CDK配置基于AWS Pipelines的CI/CD流程,操作步骤如下:

  1. 执行初始化命令:
    npx cdk bootstrap --context env=prod --profile il-prod
    
  2. 部署PipelineStack:
    npx cdk deploy Pipeline --context env=prod --profile il-prod
    

部署成功后,流水线在构建步骤失败,报错信息:

Error calling startBuild: User: arn:aws:sts::915521058023:assumed-role/Pipeline-
PipelineCodeBuildActionRole226DB0CB-yMIdGC4ozzfo/1706514727988 is not authorized to
perform: codebuild:StartBuild on resource: arn:aws:codebuild:eu-
central-1:915521058023:project/PipelineBuildSynthCdkBuildP-ZTRILHu8CwbK because no 
identity-based policy allows the codebuild:StartBuild action (Service: AWSCodeBuild; Status
 Code: 400; Error Code: AccessDeniedException; Request ID: 9a698065-9530-4262-
b920-863bbf9e281c; Proxy: null)

我的PipelineStack代码如下:

import { SecretValue, Stack, StackProps, pipelines } from "aws-cdk-lib";
import { Construct } from "constructs";
import { AppStage } from "./app.stage";

interface PipelineStackProps extends StackProps {
  github: {
    branch: string
  }
}

export class PipelineStack extends Stack {
  #props: PipelineStackProps

  constructor(scope: Construct, id: string, props: PipelineStackProps) {
    super(scope, id, props);

    this.#props = props

    this.#init();
  }

  #init() {
    const pipeline = new pipelines.CodePipeline(this, "Pipeline", {
      synth: new pipelines.ShellStep('Synth', {
        input: pipelines.CodePipelineSource.gitHub("owner/project", this.#props.github.branch, {
          authentication: SecretValue.secretsManager("token")
        }),
        commands: [
          "npm ci",
          "npm run build",
          "npx cdk synth"
        ]
      })
    })

    const appStage = new AppStage(this, 'App', { env: this.#props.env })

    pipeline.addStage(appStage)
  }
}

预期流水线能正常运行,却因缺少启动构建的权限失败,请问配置中遗漏了什么?


解决方案

1. 确保在目标Region完成CDK Bootstrap

报错中的CodeBuild项目位于eu-central-1,但你之前的bootstrap命令未指定Region,可能使用了il-prod profile的默认Region(如以色列区域),导致目标Region的CDK环境未正确初始化。需在eu-central-1执行bootstrap:

npx cdk bootstrap aws://915521058023/eu-central-1 --profile il-prod

2. 明确指定PipelineStack的Env参数

在CDK入口文件(如bin/your-app.ts)中,创建PipelineStack时必须明确传入env属性,确保账户和Region与实际部署一致,否则CDK生成的IAM权限策略会匹配错误的资源ARN:

import { App } from 'aws-cdk-lib';
import { PipelineStack } from '../lib/pipeline.stack';

const app = new App();
new PipelineStack(app, 'PipelineStack', {
  env: {
    account: '915521058023',
    region: 'eu-central-1',
  },
  github: {
    branch: 'your-branch-name', // 替换为实际分支名
  },
});
app.synth();

3. 重新部署PipelineStack

完成上述两步后,重新部署流水线:

npx cdk deploy Pipeline --context env=prod --profile il-prod --region eu-central-1

额外排查步骤

如果问题仍存在,可手动检查IAM角色Pipeline-PipelineCodeBuildActionRolexxxx的权限策略,确认是否包含针对目标CodeBuild项目的codebuild:StartBuild权限。若缺失,可通过重新执行上述步骤让CDK自动生成正确的策略。


内容的提问来源于stack exchange,提问作者Roman Mahotskyi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 07:36:10