
Amazon Route 53 Global ResolverのDNSクエリログを確認してみた
どのようなログ出力がされるか気になる
こんにちは、のんピ(@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 Cybersecurity 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>/のパーティションが設定される
- S3バケットに出力する際にサフィックスを何も指定しない場合は
ログ出力設定
まずはログ出力設定を行います。
ログ出力設定はDNSビュー単位で行います。

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

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

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

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

抜粋 : 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_idやclass_uidなどのフィールドが存在することが分かります。
一方で、dst_endpointやtimezone_offset、ja4_fingerprint_listなどOCSFのDNS Activity Classに定義されているフィールドでRoute 53 Global Resolverのクエリログがサポートしていないものもあります。注意しましょう。
出力形式はplainとjsonをサポートしています。plainの場合は区切り文字として以下をサポートしています。
\t'',
今回は出力形式をjsonにして出力フィールドはデフォルトのものにしました。
設定が完了すると以下のようになります。

アクセスソースで許可されていないクライアントからの名前解決
それでは実際に名前解決をしてみます。
まずはアクセスソースで許可されていないクライアントからの名前解決をしてみます。
$ 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/DoTmessage: メッセージ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単位です。

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

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

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

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

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

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

今回は指定しませんでしたが、クエリタイプで指定できるタイプは以下のとおりです。
- A
- AAAA
- CAA
- CNAME
- DS
- MX
- NAPTR
- NS
- PTR
- SOA
- SPF
- SRV
- TXT
その他ルールアクションについては以下AWS公式ドキュメントをご覧ください。
ルールが作成完了すると以下のようになります。

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

なお、出力形式は以下がサポートされています。
plainjsonw3cparquet
parquetもフィールド区切り文字が指定できるのですが、ここは指定するとProvided field delimiter is not applicable for delivery destination's output formatとエラーになります。注意しましょう。

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

ちなみに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を確認すると、以下ログが出力されました。
{
"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
}
{
"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)でした!







