Amazon cloudformation 假定角色无权执行:route53:ListHostZonesByDomain;将Route53策略添加到CodePipeline CodeBuildAction';假设规则

Amazon cloudformation 假定角色无权执行:route53:ListHostZonesByDomain;将Route53策略添加到CodePipeline CodeBuildAction';假设规则,amazon-cloudformation,amazon-iam,amazon-route53,aws-cdk,aws-codebuild,Amazon Cloudformation,Amazon Iam,Amazon Route53,Aws Cdk,Aws Codebuild,我的目标是在subdomain.mydomain.com上创建一个网站,指向一个CloudFront CDN,该CDN分发一个Lambda running Express,它正在呈现一个S3网站。我正在使用AWS CDK来实现这一点 我有一个错误说 [Error at/plants domain]用户:arn:aws:sts::413025517373:假定角色/plants-pipeline-BuildCDKRole0DCEDB8F-1BHVX6Z6H5X0H/AWSCodeBuild-39a

我的目标是在subdomain.mydomain.com上创建一个网站,指向一个CloudFront CDN,该CDN分发一个Lambda running Express,它正在呈现一个S3网站。我正在使用AWS CDK来实现这一点

我有一个错误说

[Error at/plants domain]用户:arn:aws:sts::413025517373:假定角色/plants-pipeline-BuildCDKRole0DCEDB8F-1BHVX6Z6H5X0H/AWSCodeBuild-39a582bf-8b89-447e-a6b4-b7f7f13c9db1无权执行:路由53:ListHostedZonesByName

这意味着:

  • [Error at/plants domain]
    -名为
    plants domain的堆栈中的错误
  • 用户:arn:aws:sts::1234567890:假定角色/plants-pipeline-BuildCDKRole0DCEDB8F-1BHVX6Z6H5X0H/AWSCodeBuild-39a582bf-8b89-447e-a6b4-b7f7f13c9db
    是假定角色的arn,该角色与
    plants管道中的我的对象关联
    执行
    路由53.HostedZone.fromLookup()
    (但它是哪个对象?)
  • 无权执行:route53:ListHostedZonesByName
    假定角色需要额外的route53权限
我相信此策略将允许相关对象查找托管区域:

const listHostZones BynamePolicy=new IAM.policy语句({
操作:['route53:ListHostedZonesByName'],
资源:['*'],
效果:IAM.effect.ALLOW,
});
使用
Route53.HostedZone.fromLookup()
的代码位于第一个堆栈
domain.ts
。我的另一个堆栈使用
CodePipelineAction.CloudFormationCreateUpdateStackAction
使用
domain.ts
模板(见下文)

domain.ts


//此区域查找的添加破坏了CDK
const zone=route53.HostedZone.fromLookup(这是'baseZone'{
域名:“domain.com”,
});
//我想将我的subdomain.domain.com指向的分发
const distribution=new CloudFront.CloudFrontWebDistribution(此“网站cdn”{
//这里有更多的东西
});
//创建指向我的发行版的子域记录
const aRecord=新路由53.aRecord(此“别名记录”{
地带:地带,,
recordName:'子域',
目标:route53.RecordTarget.fromAlias(新目标.CloudFrontTarget(分发)),
});
pipeline.ts


const pipeline=new codepippeline.pipeline(这是“管道”{
pipelineName:props.name,
RestartExecutionUpdate:false,
});
//缺少AssumedRole synth错误的解决方案:创建一个角色,向其中添加缺少的策略(以及管道,以防万一)
const buildRole=新的IAM.Role(此“buildRole”{
假设:new IAM.ServicePrincipal('codebuild.amazonaws.com'),
路径:“/”,
});
const listHostZones BynamePolicy=新IAM.Policy语句({
操作:['route53:ListHostedZonesByName'],
资源:['*'],
效果:IAM.effect.ALLOW,
});
buildRole.AddTopPrincipPolicy(ListHostZones ByNamePolicy);
pipeline.addStage({
//这是调用'cdk synth'时失败的操作`
stageName:'构建',
行动:[
新建CodePipelineAction.CodeBuildAction({
actionName:'CDK',
项目:新建CodeBuild.PipelineProject(此“BuildCDK”{
项目名称:“CDK”,
buildSpec:CodeBuild.buildSpec.fromSourceFilename('./aws/buildspecs/cdk.yml'),
role:buildRole,//这不起作用
}),
输入:输出源,
输出:[outputCDK],
顺序:10,
role:buildRole,//这不起作用
}),
新建CodePipelineAction.CodeBuildAction({
actionName:'资产',
//其他东西
}),
新建CodePipelineAction.CodeBuildAction({
actionName:'渲染',
//其他东西
}),
]
})
pipeline.addStage({
stageName:'部署',
行动:[
//这是调用已编译域堆栈模板的操作
新建CodePipelineAction.CloudFormationCreateUpdateStackAction({
actionName:'域',
templatePath:outputCDK.atPath(`${props.name}-domain.template.json`),
stackName:`${props.name}-域`,
管理员权限:对,
订单:50,
role:buildRole,//这不起作用
}),
//其他行动
]
});
不幸的是,通过上述配置,我仍然收到相同的错误:

[Error at/plants domain]用户:arn:aws:sts::413025517373:假定角色/plants-pipeline-BuildCDKRole0DCEDB8F-1BHVX6Z6H5X0H/AWSCodeBuild-957b18fb-909d-4e22-94f0-9aa6281ddb2d未被授权执行:路由53:ListHostedZonesByName


使用假定的角色ARN,是否可以跟踪缺少权限的对象?是否有其他方法可以解决我的IAM/AssumedUser角色问题?

基于错误,管道角色(它将在阶段或操作中工作…)

默认情况下:

角色

类型:IRole(可选,默认:将创建新的IAM角色。)

将由该管道承担的IAM角色

相反,在构建管道时,请在此处添加
buildRole

constpipeline=newcodepippeline.pipeline(这是“管道”{
pipelineName:props.name,
RestartExecutionUpdate:false,
角色:buildRole
});
根据您的管道,您从未将角色分配给相关阶段行动:

pipeline.addStage({
stageName:'部署',
行动:[
//这是调用已编译域堆栈模板的操作
新建CodePipelineAction.CloudFormationCreateUpdateStackAction({
...
role:buildRole,//这不起作用
}),
//其他行动
]
});
应该是:

pipeline.addStage({
stageName:'部署',
行动:[
//这是调用已编译域堆栈模板的操作
新建CodePipelineAction.CloudFormationCreateUpdateStackAction({
....
deploymentRole:buildRole
}),
]
});
为什么是
deploymentRole
而不仅仅是
role