Amazon web services 无法在代码管道操作AWS CDK上由代码管道承担角色
我一直在玩AWS CDK,并正在我的Amazon web services 无法在代码管道操作AWS CDK上由代码管道承担角色,amazon-web-services,amazon-iam,aws-codepipeline,aws-cdk,Amazon Web Services,Amazon Iam,Aws Codepipeline,Aws Cdk,我一直在玩AWS CDK,并正在我的AWS教育帐户上构建代码管道堆栈。我使用的用户有足够的权限访问和使用代码管道。我的问题是,AWS CDK为代码管道操作生成一个角色,该操作的原则是根帐户的ARN。因此,它没有在根帐户上执行该角色的权限 行动代码: { 舞台名称:“建造”, 行动:[ 新建codepipelineActions.CodeBuildAction( { actionName:“构建”, 输入:sourceOutput, 项目:建筑商 } ) ] } Cloudformation模板
AWS教育帐户上构建代码管道堆栈
。我使用的用户有足够的权限访问和使用代码管道。我的问题是,AWS CDK为代码管道操作生成一个角色,该操作的原则是根帐户的ARN
。因此,它没有在根帐户上执行该角色的权限
行动代码:
{
舞台名称:“建造”,
行动:[
新建codepipelineActions.CodeBuildAction(
{
actionName:“构建”,
输入:sourceOutput,
项目:建筑商
}
)
]
}
Cloudformation模板输出:
"devPipelineBuildCodePipelineActionRole8696D056": {
"Type": "AWS::IAM::Role",
"Properties": {
"AssumeRolePolicyDocument": {
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"AWS": {
"Fn::Join": [
"",
[
"arn:",
{
"Ref": "AWS::Partition"
},
":iam::",
{
"Ref": "AWS::AccountId"
},
":root"
]
]
}
}
}
],
"Version": "2012-10-17"
}
},
"Metadata": {
"aws:cdk:path": "PipeLineStack/dev-Pipeline/Build/Build/CodePipelineActionRole/Resource"
}
}
...
{
"Actions": [
{
"ActionTypeId": {
"Category": "Build",
"Owner": "AWS",
"Provider": "CodeBuild",
"Version": "1"
},
"Configuration": {
"ProjectName": {
"Ref": "BuildAndTestB9A2F419"
}
},
"InputArtifacts": [
{
"Name": "SourceOutput"
}
],
"Name": "Build",
"RoleArn": {
"Fn::GetAtt": [
"devPipelineBuildCodePipelineActionRole8696D056",
"Arn"
]
},
"RunOrder": 1
}
],
"Name": "Build"
}
这将抛出错误:
arn:aws:iam::acount_id:role/PipeLineStack-devPipelineRole5B29FEBC-1JK24J0K5N1UG is not authorized to perform AssumeRole on role arn:aws:iam::acount_id:
role/PipeLineStack-devPipelineBuildCodePipelineActionRo-17ETJU1KZCCNQ (Service: AWSCodePipeline; Status Code: 400; Error Code: InvalidStructureException; Req
uest ID: c8c8af89-2409-4cc1-aad8-4de553a1764f; Proxy: null)
如果我从操作
中删除角色学习
,并执行该模板,它就会工作
我的问题是,如何防止CDK使用根帐户或解决方法添加默认角色,以防止添加原则性的默认角色?管道配置中的以下代码:
"RoleArn": {
"Fn::GetAtt": [
"devPipelineBuildCodePipelineActionRole8696D056",
"Arn"
]
},
。。。表示当CodePipeline服务调用“Build”操作时,它将“承担”角色“devPipelineBuildCodePipelineActionRole8696D056”,但此角色没有与“CodePipeline.amazonaws.com”服务的信任策略,因此出现错误
当您有跨帐户操作(CodeBuild项目位于另一个帐户中)时,该操作下的“RoleArn”属性非常有用,因此除非是这种情况,否则最好删除此属性
我们需要查看cdk代码来回答您的问题:
如何防止CDK使用根帐户或解决方法添加默认角色
目前,似乎不允许操作在AWS中扮演任何角色。因此,要有一个变通方法并消除手动开销,请使用来修改生成的云形成
管道的创建方式如下:
//要传递到管道的自定义角色
const pipeLineRole=新的iam.Role(这是“CodePipeLineRole”{
假设人:new iam.ServicePrincipal(“codepippeline.amazonaws.com”),
});
pipeLineRole.addToPolicy(
//要运行的每个aciton所需的策略
)
const pipeline=new codepippeline.pipeline(这个“管道”{
角色:pipeLineRole,
阶段:[
// ...
{
行动:[行动1,行动2],
},
// ...
],
});
//更改云结构以从操作中删除角色arn
const pipelineCfn=pipeline.node.defaultChild作为cdk.CfnResource;
//addDeletionOverride从cloudformation本身移除属性
//删除创建的每个阶段和动作的动作arn
pipelineCfn.addDeletionOverride(“Properties.Stages.1.Actions.0.RoleArn”);
pipelineCfn.addDeletionOverride(“Properties.Stages.2.Actions.0.RoleArn”);
pipelineCfn.addDeletionOverride(“Properties.Stages.3.Actions.0.RoleArn”);
这是一个解决方法,它可以工作,但是仍然有一些不需要的、悬而未决的策略和角色未分配给为单个操作创建的任何服务。感谢您的解释。我在寻找是否有办法阻止CDK添加该行谢谢!生成的云形成无需任何修改即可工作