我想在 CDK 中导入一个角色以使用它来配置新的 CodeBuild 项目。
const role1 = Role.import(this, "service-role", {
roleArn: "arn:aws:iam::1234567890:role/service-role/codebuild-manualproject-service-role" ,
});
注意:为了安全起见,我更改了 Arn 中的 Account Ref。
这是创建代码构建项目的代码..
// Create build
// note: now that there is one bucket per build project it is not necessary to have a prefix/subdirectory in the bucket for storing cache items
const project = new codebuild.Project(this, CODEBUILD_PROJECT_NAME, {
// render url for build badge
badge: true,
cacheBucket: cacheBucket,
cacheDir: "Cache",
description: "An AWS codebuild project for repo: " + REPO + ", created: " + Date(),
// note will use standard buildspec.yml
// set the environment
environment: {
buildImage: CODEBUILD_IMAGE,
computeType: CODEBUILD_COMPUTETYPE,
},
projectName: CODEBUILD_PROJECT_NAME,
role: role1,
// add in source control
source: source,
// set timeout - mins
timeout: 30,
vpc: vpc,
securityGroups: [securityGroup]
});
我跑..
npm run build
没有错误
然后我跑
cdk synth
得到错误..
Error: Validation failed with the following errors:
[Quicktest2Stack/frontend-v3-codebuild/PolicyDocument] Policy must be attached to at least one principal: user, group or role
at Synthesizer.synthesize (C:\scratch\CDKTest\quicktest2\node_modules\@aws-cdk\cdk\lib\synthesis.js:22:23)
at App.run (C:\scratch\CDKTest\quicktest2\node_modules\@aws-cdk\cdk\lib\app.js:44:31)
at process.<anonymous> (C:\scratch\CDKTest\quicktest2\node_modules\@aws-cdk\cdk\lib\app.js:24:51)
at Object.onceWrapper (events.js:284:20)
at process.emit (events.js:196:13)
Subprocess exited with error 1
因此,如果我在 CDK 中“导入”角色并尝试将其绑定到新的 CodeBuild 项目,那么它会失败(cdk 合成器)
但是我允许 CDK 在构建新的 CodeBuild 项目时创建自己的角色,然后 cdk synth 工作并且可以部署堆栈但是 codebuild 项目失败。
如果我使用 CodeBuild 项目并手动将角色更改为我尝试导入的初始角色 - 那么一切正常并且可以构建将运行。
我需要能够创建 CodeBuild 项目并通过 CDK 绑定到角色。
CDK 版本:0.28.0
感激地收到任何帮助。