我有一个连接到Github存储库的AWS CodeBuild项目,并且在每次新提交时,它都会基于预定义的模板创建一个新的CloudFormation堆栈。完整模板can be found here。
CodeBuild项目将其作为其构建命令:
version: 0.2
phases:
install:
runtime-versions:
nodejs: 12
pre_build:
commands:
- NODE_ENV=development npm install
- npm run makeScriptsExecutable
build:
commands:
- stackName="stack-$CODEBUILD_RESOLVED_SOURCE_VERSION"
- apiGatewayName="gateway-$CODEBUILD_RESOLVED_SOURCE_VERSION"
- FUNCTION_NAME="lambda-$CODEBUILD_RESOLVED_SOURCE_VERSION"
- S3_ASSETS_BUCKET="s3-$CODEBUILD_RESOLVED_SOURCE_VERSION"
- S3_ASSETS_BUCKET_URI="s3://$S3_ASSETS_BUCKET"
- DOMAIN_NAME="$CODEBUILD_RESOLVED_SOURCE_VERSION.guacchain.com"
- BASE_NAME="prod"
- echo "S3_ASSETS_BUCKET_URI value here:"
- echo $S3_ASSETS_BUCKET_URI
- TEMPLATE_URL=https://s3-external-1.amazonaws.com/cf-templates-1npj2t2ifo384-us-east-1/2020146JeV-stack2.yaml
- aws cloudformation create-stack --stack-name $stackName --template-url $TEMPLATE_URL --parameters ParameterKey=apiGatewayStageName,ParameterValue=$BASE_NAME ParameterKey=lambdaFunctionName,ParameterValue=$FUNCTION_NAME ParameterKey=s3BucketName,ParameterValue=$S3_ASSETS_BUCKET ParameterKey=domainName,ParameterValue=$DOMAIN_NAME ParameterKey=subdomain,ParameterValue=$CODEBUILD_RESOLVED_SOURCE_VERSION --capabilities CAPABILITY_IAM
- sleep 45
- sed -i "s/COMMIT_ID/$CODEBUILD_RESOLVED_SOURCE_VERSION/g" .babelrc
- NODE_ENV=production npm run start
- NODE_ENV=production npm run build
- NODE_ENV=production npm run build:server
- NODE_ENV=production npm run deploy
我当前遇到的问题是,自从添加类型AWS::Route53::RecordSet
的资源以来,由于以下原因,堆栈创建失败:API: route53:GetHostedZone User: arn:aws:sts::XXXX:assumed-role/CodeBuildServiceRole/AWSCodeBuild-XXXX is not authorized to access this resource
。
该资源当前如下所示:
domainRecordSet:
Type: 'AWS::Route53::RecordSet'
Properties:
AliasTarget:
DNSName: !GetAtt domainNameResource.DistributionDomainName
HostedZoneId: !GetAtt domainNameResource.DistributionHostedZoneId
Type: A
HostedZoneId: !GetAtt domainNameResource.DistributionHostedZoneId
Name: !Sub '${subdomain}.guacchain.com'
subdomain
变量作为参数提供给堆栈。在堆栈创建失败之前,成功创建了引用的domainNameResource
:
此外,CodeBuildServiceRole
将应用于CodeBuild项目。我认为给它AdministratorAccess
,AmazonRoute53FullAccess
和AWSCloudFormationFullAccess
策略就足够了,但显然没有!
在“ IAM权限”选项卡上,它显示Permissions boundary (not set)
。
在“受信任的关系”选项卡上,“受信任的实体”列表中只有一行:The identity provider(s) codebuild.amazonaws.com
。还显示“与此角色没有任何条件。”
要成功创建Route53 RecordSet资源,必须对此IAM角色,Codebuild项目或CloudFormation堆栈(或它们的某种组合)执行什么操作?
答案 0 :(得分:2)
根据评论,问题在于对第二个HostedZoneId
的错误分配:
HostedZoneId: !GetAtt domainNameResource.DistributionHostedZoneId
它应该是 OP控制的托管区域的ID,而不是AWS拥有的CloudFront发行版的托管区域。这说明了错误消息-您无权修改AWS拥有的托管区域。