我有一个AWS CodeBuild项目连接到Github repo,在每次新提交时,它都会根据预定义的模板创建一个新的CloudFormation栈。完整的模板 可以在这里找到.
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
. 还显示 "没有与该角色相关联的条件"。
必须对该 IAM 角色、Codebuild 项目或 CloudFormation 堆栈(或其中的某些组合)进行哪些操作,才能成功创建 Route53 RecordSet 资源?
根据评论,问题是 错派 到第二个 HostedZoneId
:
HostedZoneId: !GetAtt domainNameResource.DistributionHostedZoneId
它应该是托管区的id,即 OP控制而不是 AWS 拥有的 CloudFront 分发的托管区。这就解释了错误信息--您未被授权修改 AWS 拥有的托管区。