CloudForm route53:GetHostedZone 用户未被授权访问此资源。

问题描述 投票:0回答:1

我有一个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 在堆栈创建失败之前,确实成功创建了。enter image description here

同时, CodeBuildServiceRole 被应用到CodeBuild项目中。我想,如果给它一个 AdministratorAccess, AmazonRoute53FullAccessAWSCloudFormationFullAccess 政策就够了,但显然不是!

在IAM权限选项卡上,它显示的是 Permissions boundary (not set).

在 "可信关系 "选项卡上,"可信实体 "列表中只有一行。The identity provider(s) codebuild.amazonaws.com. 还显示 "没有与该角色相关联的条件"。

必须对该 IAM 角色、Codebuild 项目或 CloudFormation 堆栈(或其中的某些组合)进行哪些操作,才能成功创建 Route53 RecordSet 资源?

amazon-web-services amazon-cloudformation amazon-route53
1个回答
1
投票

根据评论,问题是 错派 到第二个 HostedZoneId:

 HostedZoneId: !GetAtt domainNameResource.DistributionHostedZoneId

它应该是托管区的id,即 OP控制而不是 AWS 拥有的 CloudFront 分发的托管区。这就解释了错误信息--您未被授权修改 AWS 拥有的托管区。

© www.soinside.com 2019 - 2024. All rights reserved.