AmazonRoute53FullAccess を付与した IAM ユーザで AccessDenied が発生するときの対処方法

2022.02.24

困っていた内容

AWS CLI を使って Amazon Route 53 のレコードを変更すると「Access Denied」が表示されます。操作している IAM ユーザには AmazonRoute53FullAccess を付与しており、レコードの表示等のその他操作は問題なく実施できています。 AmazonRoute53FullAccess 以外にも権限が必要なのでしょうか。対処方法を教えてください。

$ aws route53 change-resource-record-sets --hosted-zone-id Z2FDTNDATAQYW2 --change-batch file://change-resource-record-sets.json

An error occurred (AccessDenied) when calling the ChangeResourceRecordSets operation: User: arn:aws:sts::123456789012:assumed-role/hato/botocore-session-123456789 is not authorized to access this resource

どう対応すればいいの?

--hosted-zone-idの値をご確認ください。

--hosted-zone-idオプションで指定する値は、変更するレコード(例:example.com)が登録されたホストゾーンのIDとなります。この値に、AWSが管理するドメイン(cloudfront.netやelb.amazonaws.com)など管理外ドメインのホストゾーンIDを指定すると「Access Denied」が発生します。

そのため、--hosted-zone-idオプションに誤ったホストゾーンIDを指定していないか確認してください。

ホストゾーンIDの確認方法

レコードのホストゾーンIDは、Amazon Route 53 コンソールもしくは AWS CLI のlist-hosted-zonesで確認できます。

なお、AWSが管理するドメインのホストゾーンIDは、レコードセットのAliasTargetで指定する関係から公開されており、現時点で次の値となります。
(AliasTargetHostedZoneIdの値をそのまま--hosted-zone-idオプションで使用するとエラーとなりますのでご注意ください)

  • Z2FDTNDATAQYW2(CloudFront)
  • Z14GRHDCWA56QT(ALB/CLB、東京リージョン)
  • Z31USIVHYNEOWT(NLB、東京リージョン)
  • Z5LXEXXYW11ES(ALB/CLB、大阪リージョン)
  • Z1GWIQ4HH19I5X(NLB、大阪リージョン)

change-resource-record-sets.json

{
    "Comment": "optional comment about the changes in this change batch request",
    "Changes": [
        {
            "Action": "DELETE",
            "ResourceRecordSet": {
                "Name": "hato.example.com.",
                "Type": "A",
                "AliasTarget": {
                    "HostedZoneId": "Z2FDTNDATAQYW2",
                    "DNSName": "xxxxxx.cloudfront.net.",
                    "EvaluateTargetHealth": false
                }
            }
        }
    ]
}

参考資料