Amazon Route 53 Global ResolverのDNSクエリログを確認してみた

Amazon Route 53 Global ResolverのDNSクエリログを確認してみた

Route 53 VPC ResolverのDNSクエリログとはフォーマットが異なるので気をつけよう
2025.12.08

どのようなログ出力がされるか気になる

こんにちは、のんピ(@non____97)です。

皆さんはRoute 53 Global Resolverでどのようなログが出力されるのか気になったことはありますか? 私はあります。

Route 53 VPC Resolverと同じような以下フォーマットなのでしょうか。

{
  "srcaddr": "4.5.64.102",
  "vpc_id": "vpc-7example",
  "answers": [
      {
          "Rdata": "203.0.113.9",
          "Type": "PTR",
          "Class": "IN"
      }
  ],
  "firewall_rule_group_id": "rslvr-frg-01234567890abcdef",
  "firewall_rule_action": "BLOCK",
  "query_name": "15.3.4.32.in-addr.arpa.",
  "firewall_domain_list_id": "rslvr-fdl-01234567890abcdef",
  "query_class": "IN",
  "srcids": {
      "instance": "i-0d15cd0d3example"
  },
  "rcode": "NOERROR",
  "query_type": "PTR",
  "transport": "UDP",
  "version": "1.100000",
  "account_id": "111122223333",
  "srcport": "56067",
  "query_timestamp": "2021-02-04T17:51:55Z",
  "region": "us-east-1"
}

抜粋 : Route 53 VPC Resolver query log example - Amazon Route 53

実際に試してみました。

やってみた

  • Route 53 Global ResolverのDNSクエリログはOpen Cyber​​security Schema Framework(OCSF)フォーマットを使用している
  • Route 53 Global ResolverとRoute 53 VPC Resolverのクエリログとはフォーマットが異なるため、分析クエリを使い回すことはできない
  • ドメインリストはGlobal Resolver単位だが、DNSファイアウォールはDNSビュー単位で設定する
  • ログ出力の仕組みは標準ログV2
    • S3バケットに出力する際にサフィックスを何も指定しない場合は{requester_id}/{yyyy}{MM}{dd}{HH}/が自動で設定される
    • さらにサフィックスの前にAWSLogs/<AWSアカウントID>/Route53GlobalResolverLogs/<Route 53 Global Resolver ID>/のパーティションが設定される

ログ出力設定

まずはログ出力設定を行います。

ログ出力設定はDNSビュー単位で行います。

1.ログ配信.png

ログの配信先であるオブザーバビリティリージョンを指定します。指定可能なリージョンは一つだけです。

2.オブザーバビリティリージョン.png

オブザーバビリティリージョンを指定すると、具体的なログ出力の設定を行うことが可能です。

4.追加.png

設定可能な出力先はCloudWatch Logs / S3 / Data Firehoseと3種類です。今回はCloudWatch Logsへ配信してみましょう。

7.Amazon CloudWatch Logs への配信を追加.png

標準ログV2な具合の画面ですね。なお、標準ログV2をサポートしているログリソース一覧にはまだRoute 53 Global Resolverの記載はありませんでした。

21.Log source.png

抜粋 : Enable logging from AWS services - Amazon CloudWatch Logs

ログタイプはGLOBAL_RESOLVER_LOGS固定でした。

フィールドは以下が指定可能です。

  • action_id ※1
  • action_name
  • activity_id ※1
  • activity_name
  • answers
  • category_name
  • category_uid ※1
  • class_name
  • class_uid ※1
  • cloud ※1
  • connection_info
  • duration
  • end_time
  • enrichments
  • message
  • metadata ※1
  • query
  • query_time
  • rcode
  • rcode_id
  • response_time
  • severity
  • severity_id ※1
  • src_endpoint ※1
  • start_time
  • status
  • status_id
  • time ※1
  • type_name
  • type_uid ※1
  • event_timestamp ※2
  • timestamp ※2
  • resource_arn ※2
  • global_resolver_id ※2
  • requester_id ※2

※1 指定が必須なもの
※2 デフォルトで選択されていないもの

Route 53 VPC Resolverと異なることが分かりますね。そのため、Route 53 VPC Resolverのクエリログ分析に使用していたクエリをそのまま利用することはできません。

Route 53 Global ResolverはOCSFフォーマット準拠です。

OCSF format for security integration

DNS query logs use the Open Cybersecurity Schema Framework (OCSF), which provides a standardized format for security event data. This format enables:

  • Standardized analysis - Consistent schema across different security tools
  • Improved interoperability - Easy integration with SIEM and analytics platforms
  • Enhanced correlation - Ability to correlate DNS events with other security data
  • Future compatibility - Support for evolving security analysis requirements

Gain visibility into DNS activity with Route 53 Global Resolver - Amazon Route 53

以下OCSFのDNS Activity Classを確認すると、確かにaction_idclass_uidなどのフィールドが存在することが分かります。

https://schema.ocsf.io/1.7.0/classes/dns_activity

一方で、dst_endpointtimezone_offsetja4_fingerprint_listなどOCSFのDNS Activity Classに定義されているフィールドでRoute 53 Global Resolverのクエリログがサポートしていないものもあります。注意しましょう。

出力形式はplainjsonをサポートしています。plainの場合は区切り文字として以下をサポートしています。

  • \t
  • ''
  • ,

今回は出力形式をjsonにして出力フィールドはデフォルトのものにしました。

設定が完了すると以下のようになります。

8.CWL.png

アクセスソースで許可されていないクライアントからの名前解決

それでは実際に名前解決をしてみます。

まずはアクセスソースで許可されていないクライアントからの名前解決をしてみます。

$ dig www.non-97.net @52.223.8.240
;; communications error to 52.223.8.240#53: timed out
;; communications error to 52.223.8.240#53: timed out
;; communications error to 52.223.8.240#53: timed out

; <<>> DiG 9.18.33 <<>> www.non-97.net @52.223.8.240
;; global options: +cmd
;; no servers could be reached

はい、タイムアウトとなりました。

CloudWatch LogsやS3バケットを見てもログ出力はされていないです。

どうやらアクセスソースで許可されていないログは記録されないようです。

アクセスソースで許可されているクライアントからの名前解決

続いて、アクセスソースで許可されているクライアントからの名前解決です。

$ dig www.non-97.net @52.223.8.240

; <<>> DiG 9.18.33 <<>> www.non-97.net @52.223.8.240
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3957
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;www.non-97.net.                        IN      A

;; ANSWER SECTION:
www.non-97.net.         300     IN      A       10.20.30.40

;; Query time: 0 msec
;; SERVER: 52.223.8.240#53(52.223.8.240) (UDP)
;; WHEN: Thu Dec 04 08:44:18 UTC 2025
;; MSG SIZE  rcvd: 59

はい、名前解決できました。

出力先のCloudWatch Logsロググループである/aws/vendedlogs/route53globalresolver/global-resolver/GLOBAL_RESOLVER_LOGS/gr-2788e8200b414d28を確認すると、Route53GlobalResolverLogs_gr-2788e8200b414d28というログストリームが作成されており、以下のようなログが記録されていました。

{
    "action_id": 1,
    "action_name": "Allowed",
    "activity_id": 6,
    "activity_name": "Traffic",
    "answers": [
        {
            "rdata": "10.20.30.40",
            "type": "A",
            "class": "IN",
            "ttl": 300
        }
    ],
    "category_name": "Network Activity",
    "category_uid": 4,
    "class_name": "DNS Activity",
    "class_uid": 4003,
    "cloud": {
        "provider": "AWS",
        "region": "us-east-1",
        "account": {
            "uid": "<AWSアカウントID>"
        }
    },
    "connection_info": {
        "direction": "Inbound",
        "direction_id": 1,
        "protocol_name": "udp",
        "protocol_num": 17,
        "protocol_ver_id": 4,
        "uid": "b97275d716684e3e"
    },
    "duration": 3,
    "end_time": 0,
    "enrichments": [
        {
            "name": "global-resolver",
            "value": "gr-2788e8200b414d28",
            "data": {
                "dns_view_id": "dnsv-e4385db72ac849b4"
            }
        }
    ],
    "message": "",
    "metadata": {
        "version": "1.2.0",
        "product": {
            "name": "Global Resolver",
            "vendor_name": "AWS",
            "feature": {
                "name": "DNS"
            }
        }
    },
    "query": {
        "hostname": "www.non-97.net.",
        "class": "IN",
        "type": "A",
        "opcode": "Query",
        "opcode_id": 0
    },
    "query_time": 1764837858176,
    "rcode": "NOERROR",
    "rcode_id": 0,
    "response_time": 1764837858179,
    "severity": "Informational",
    "severity_id": 1,
    "src_endpoint": {
        "ip": "3.90.9.99",
        "port": 39131
    },
    "start_time": 0,
    "status": "Success",
    "status_id": 1,
    "time": 1764837858179,
    "type_name": "DNS Activity: Traffic",
    "type_uid": 400306
}

かなり細かめに確認できますね。実際に分析をする際には絞り込む際に使用するフィールドのフィールドインデックスと作成してあげるとCloudWatch Logs Insightsのコスト削減に繋がるでしょう。

個人的には以下はフィールドインデックスで設定したいところです。

  • action_name : 許可/拒否
  • connection_info.protocol_name : Do53/DoH/DoT
  • message : メッセージ
  • query.hostname : 名前解決しようとしたホスト名
  • query.type : DNSクエリのタイプ
  • rcode : 応答コード
  • src_endpoint.ip : DNSクライアントのIPアドレス
  • src_endpoint.port : DNSクライアントのポート番号

DNSファイアウォールでブロックされるドメインの名前解決

続いて、DNSファイアウォールでブロックされるドメインを名前解決した場合です。

AWSマネージドのドメインリストに登録されている具体的なドメインを確認する方法はありません。

Managed Domain Lists cannot be downloaded or browsed. To protect intellectual property, you can't view or edit the individual domain specifications within the Managed Domain Lists. This restriction also helps to prevent malicious users from designing threats that specifically circumvent published lists.

Managed Domain Lists for Route 53 Global Resolver - Amazon Route 53

ということでセルフマネージドのドメインリストを作成します。ドメインリストはRoute 53 Global Resolver単位です。

22.ドメインリストを作成.png

作成が完了すると、以下のようになります。

12.ドメインリストの作成完了.png

ドメインリスト名をクリックし、ドメインタブのドメインを追加をクリックします。

ドメインリストの追加方法としてはドメインリストのS3オブジェクトを指定する方法と、直接ドメインリストを入力する方法の2種類があります。

13.ドメインを deny-domain に追加.png

今回は後者にしました。ドメインはwww.non-97.netです。

14.ドメインリストの追加.png

ドメインリストへのドメインの追加が完了すると以下のようになります。

15.ドメインリストの追加完了.png

続いて、DNSファイアウォールルールの作成です。DNSファイアウォールはDNSビュー単位で作成します。

16.DNS ファイアウォールルール.png

先ほど作成したドメインリストに登録されているDNSクエリをブロックするように設定します。

17.作成.png

今回は指定しませんでしたが、クエリタイプで指定できるタイプは以下のとおりです。

  • A
  • AAAA
  • CAA
  • CNAME
  • DS
  • MX
  • NAPTR
  • NS
  • PTR
  • SOA
  • SPF
  • SRV
  • TXT

その他ルールアクションについては以下AWS公式ドキュメントをご覧ください。

https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/gr-configure-manage-firewall-rules.html

ルールが作成完了すると以下のようになります。

18.実行中.png

せっかくなので、S3バケットにログ出力する場合にどのようなプレフィックスになるのかを確認します。

設定は以下のとおりです。

23.Amazon S3 への配信を追加.png

なお、出力形式は以下がサポートされています。

  • plain
  • json
  • w3c
  • parquet

parquetもフィールド区切り文字が指定できるのですが、ここは指定するとProvided field delimiter is not applicable for delivery destination's output formatとエラーになります。注意しましょう。

19.Provided field delimiter is not applicable for delivery destination's output format.png

作成後のサフィックスは{requester_id}/{yyyy}{MM}{dd}{HH}/が自動で設定されていました。

20.作成後のサフィックス.png

ちなみにrequester_idはDNSビューIDのことです。

この状態でwww.non-97.netの名前解決をしてみます。

$ dig @2788e8200b414d28.route53globalresolver.global.on.aws. www.non-97.net

; <<>> DiG 9.18.33 <<>> @2788e8200b414d28.route53globalresolver.global.on.aws. www.non-97.net
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10019
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: f8d6ad25b9e6b568 (echoed)
;; QUESTION SECTION:
;www.non-97.net.                        IN      A

;; Query time: 9 msec
;; SERVER: 166.117.206.85#53(2788e8200b414d28.route53globalresolver.global.on.aws.) (UDP)
;; WHEN: Thu Dec 04 14:55:41 UTC 2025
;; MSG SIZE  rcvd: 55

はい、名前解決ができなくなりました。

他ドメインでは名前解決できることを確認します。

$ dig @2788e8200b414d28.route53globalresolver.global.on.aws. host.phz.test.corp.non-97.net

; <<>> DiG 9.18.33 <<>> @2788e8200b414d28.route53globalresolver.global.on.aws. host.phz.test.corp.non-97.net
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57125
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;host.phz.test.corp.non-97.net. IN      A

;; ANSWER SECTION:
host.phz.test.corp.non-97.net. 300 IN   A       10.10.10.10

;; Query time: 9 msec
;; SERVER: 52.223.8.240#53(2788e8200b414d28.route53globalresolver.global.on.aws.) (UDP)
;; WHEN: Thu Dec 04 14:55:53 UTC 2025
;; MSG SIZE  rcvd: 74

こちらは名前解決できましたね。

CloudWatch Logsを確認すると、以下ログが出力されました。

www.non-97.netを名前解決した際のログ
{
    "action_id": 2,
    "action_name": "Denied",
    "activity_id": 6,
    "activity_name": "Traffic",
    "answers": [],
    "category_name": "Network Activity",
    "category_uid": 4,
    "class_name": "DNS Activity",
    "class_uid": 4003,
    "cloud": {
        "provider": "AWS",
        "region": "us-east-1",
        "account": {
            "uid": "<AWSアカウントID>"
        }
    },
    "connection_info": {
        "direction": "Inbound",
        "direction_id": 1,
        "protocol_name": "udp",
        "protocol_num": 17,
        "protocol_ver_id": 4,
        "uid": "c07985a23ee24cb8"
    },
    "duration": 0,
    "end_time": 0,
    "enrichments": [
        {
            "name": "global-resolver",
            "value": "gr-2788e8200b414d28",
            "data": {
                "dns_view_id": "dnsv-e4385db72ac849b4",
                "firewall_rule_id": "fr-cf8ff490fef34d1b"
            }
        }
    ],
    "message": "",
    "metadata": {
        "version": "1.2.0",
        "product": {
            "name": "Global Resolver",
            "vendor_name": "AWS",
            "feature": {
                "name": "DNS"
            }
        }
    },
    "query": {
        "hostname": "www.non-97.net.",
        "class": "IN",
        "type": "A",
        "opcode": "Query",
        "opcode_id": 0
    },
    "query_time": 1764860141852,
    "rcode": "NOERROR",
    "rcode_id": 0,
    "response_time": 1764860141852,
    "severity": "Informational",
    "severity_id": 1,
    "src_endpoint": {
        "ip": "3.90.9.99",
        "port": 48648
    },
    "start_time": 0,
    "status": "Success",
    "status_id": 1,
    "time": 1764860141852,
    "type_name": "DNS Activity: Traffic",
    "type_uid": 400306
}
www.non-97.netを名前解決した際のログ
{
    "action_id": 1,
    "action_name": "Allowed",
    "activity_id": 6,
    "activity_name": "Traffic",
    "answers": [
        {
            "rdata": "10.10.10.10",
            "type": "A",
            "class": "IN",
            "ttl": 300
        }
    ],
    "category_name": "Network Activity",
    "category_uid": 4,
    "class_name": "DNS Activity",
    "class_uid": 4003,
    "cloud": {
        "provider": "AWS",
        "region": "us-east-1",
        "account": {
            "uid": "<AWSアカウントID>"
        }
    },
    "connection_info": {
        "direction": "Inbound",
        "direction_id": 1,
        "protocol_name": "udp",
        "protocol_num": 17,
        "protocol_ver_id": 4,
        "uid": "ecf286dcc0184a9e"
    },
    "duration": 2,
    "end_time": 0,
    "enrichments": [
        {
            "name": "global-resolver",
            "value": "gr-2788e8200b414d28",
            "data": {
                "dns_view_id": "dnsv-e4385db72ac849b4"
            }
        }
    ],
    "message": "",
    "metadata": {
        "version": "1.2.0",
        "product": {
            "name": "Global Resolver",
            "vendor_name": "AWS",
            "feature": {
                "name": "DNS"
            }
        }
    },
    "query": {
        "hostname": "host.phz.test.corp.non-97.net.",
        "class": "IN",
        "type": "A",
        "opcode": "Query",
        "opcode_id": 0
    },
    "query_time": 1764860153981,
    "rcode": "NOERROR",
    "rcode_id": 0,
    "response_time": 1764860153983,
    "severity": "Informational",
    "severity_id": 1,
    "src_endpoint": {
        "ip": "3.90.9.99",
        "port": 55790
    },
    "start_time": 0,
    "status": "Success",
    "status_id": 1,
    "time": 1764860153983,
    "type_name": "DNS Activity: Traffic",
    "type_uid": 400306
}

また、S3バケットにはAWSLogs/<AWSアカウントID>/Route53GlobalResolverLogs/gr-2788e8200b414d28/dnsv-e4385db72ac849b4/2025/12/04/14/<AWSアカウントID>_route53globalresolver_gr-2788e8200b414d28_dnsv-e4385db72ac849b4_2025-12-04-14_0231ccae.log.parquetというキーのオブジェクトが作成されていました。

AWSLogs/<AWSアカウントID>/Route53GlobalResolverLogs/gr-2788e8200b414d28/はサフィックスとして指定していないのに勝手に挿入されてしまっています。EventBridge Ruleでトリガーさせる場合やAthenaでクエリをする場合は注意しましょう。

Route 53 VPC ResolverのDNSクエリログとはフォーマットが異なるので気をつけよう

Amazon Route 53 Global ResolverのDNSクエリログを確認してみました。

Route 53 VPC ResolverのDNSクエリログとはフォーマットが異なるので気をつけましょう。

個人的にはDNSファイアウォール使っていると場合とDoHやDoTを使っている場合はトラブルシューティングのために使用したいところです。

この記事が誰かの助けになれば幸いです。

以上、クラウド事業本部 コンサルティング部の のんピ(@non____97)でした!

この記事をシェアする

FacebookHatena blogX

関連記事