【问题标题】:Route53 getHostedZone AccessDenied. User doesn't have permission to call route53:GetHostedZoneRoute53 getHostedZone 访问被拒绝。用户无权调用 route53:GetHostedZone
【发布时间】:2018-06-19 11:02:44
【问题描述】:

我正在创建一个 AWS Cloudformation 堆栈,我在其中将记录集添加到现有的 Route53 托管区域。资源指定如下(YAML格式):

DNS:
    Type: AWS::Route53::RecordSetGroup
    Properties:
        HostedZoneName: !Ref HostedZoneName
        Comment: Zone apex alias targeted to myELB LoadBalancer.
        RecordSets:
        - Name: !Join [ ".", ["alb", !Ref HostedZoneName]]
          Type: A
          AliasTarget:
              HostedZoneId: !Ref AliasTargetHostedZoneId
              DNSName: !Ref AliasTargetDNSName

HostedZoneNameAliasTargetHostedZoneIdAliasTargetDNSName 作为参数传入。

我的问题是由于标题中指定的权限错误,堆栈不会创建。默认情况下,CloudFormation 将使用创建堆栈的用户我的权限。我有 AdministratorAccess 政策,所以应该允许我做所有事情,包括所有 Route53 操作。

我还尝试通过传递同样具有 AdministratorAccess 策略的 IAM 角色来创建堆栈,这给了我同样的错误。

模板中指定的所有其他资源(VPC、Loadbalancer、RDS、..)都可以正常创建。

【问题讨论】:

  • 如何定义和传递 AliasTargetHostedZoneId 参数?
  • @ddewaele 负载均衡器的CanonicalHostedZoneID

标签: amazon-web-services amazon-cloudformation amazon-iam


【解决方案1】:

定义正确的 HostedzoneId 并将其传递到模板中很重要。

由于您在执行 CloudFormation 脚本时拥有管理员权限,因此您应该能够将记录集添加到您帐户中的 Route53 托管区域,而无需指定任何其他角色/配置文件。

但是,您需要确保传递了正确的 HostedzoneId。这通常作为字符串或使用CanonicalHostedZoneID attribute of the load balancer 来完成。

当将其作为字符串传递时,您需要确保参数类型是字符串类型,而不是AWS::Route53::HostedZone::Id

【讨论】:

  • 为什么是String而不是具体类型?
  • 关于最后一点的好问题,为什么?它解决了我的问题(将类型更改为纯字符串),但这是一个谜
  • 当 AWS 的 doco 无用时,请来救援。我也使用了 HostedZone::Id 类型(因为我为什么不呢?!)并且在我的键盘上猛击我的头,直到我找到了这篇文章。
猜你喜欢
  • 2020-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-10
  • 1970-01-01
  • 1970-01-01
  • 2011-01-27
  • 2017-07-19
相关资源
最近更新 更多