![[アップデート] Route53 Resolver で DNS クエリをログ出力できるようになりました!](https://devio2023-media.developers.io/wp-content/uploads/2019/05/amazon-route-53.png)
[アップデート] Route53 Resolver で DNS クエリをログ出力できるようになりました!
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
Route53 Resolver で DNS クエリのログ出力がサポートされ、VPC 内の AWS リソースが、どのドメインに接続しているかわかるようになりました。
なにが嬉しいのか
Route 53 Resolver は、VPC 作成時にデフォルトで備わっている DNS サーバー(フォワーダー+フルサービスリゾルバー)で、VPC 内からパブリック DNS への名前解決をしたり、VPC 内部に閉じた DNS の名前解決を行います。昔から AWS を使われている方には Amazon Provided DNS と表現するほうが馴染み深いかもしれません。

20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolverより抜粋
Route 53 Resolver は、VPC 作成時にデフォルトで備わっている DNS サーバー(フォワーダー+フルサービスリゾルバー)で、VPC 内からパブリック DNS への名前解決をしたり、VPC 内部に閉じた DNS の名前解決を行います。昔から AWS を使われている方には Amazon Provided DNS と表現するほうが馴染み深いかもしれません。
Route 53 Resolver は、VPC 作成時にデフォルトで備わっている DNS サーバー(フォワーダー+フルサービスリゾルバー)で、VPC 内からパブリック DNS への名前解決をしたり、VPC 内部に閉じた DNS の名前解決を行います。昔から AWS を使われている方には Amazon Provided DNS と表現するほうが馴染み深いかもしれません。
これまで Route53 のパブリックホストゾーンへ行われるの DNS クエリはログ出力が可能でしたが、VPC 内部から発信される DNS クエリやレスポンスをロギングできませんでした。
アップデートで VPC の DNS クエリをログ出力できるようになったので、セキュリティ強化やコンプライアンス上 DNS クエリの記録取得を求められるケースに対応できるようになったり、また、インシデント調査で役立つことが期待できます。
ログ内容
Route53 リゾルバーのクエリログでは以下が記録されます。
| 項目名 | 内容 | サンプル | 
|---|---|---|
| version | クエリログ形式のバージョン番号 | 1.000000 | 
| account_id | VPC を作成した AWS アカウントの ID | 111122223333 | 
| region | VPC を作成した AWS リージョン | us-west-2 | 
| vpc_id | クエリが発生した VPC の ID | vpc-7example | 
| query_timestamp | クエリが送信された日時、ISO 8601形式、UTC 表記 | 2020-07-27T16:32:20Z | 
| query_name | クエリで指定されたドメイン名またはサブドメイン名 | api.example.com. | 
| query_type | リクエストで指定された DNS レコードタイプ | A | 
| query_class | クエリのクラス | IN | 
| rcode | DNS クエリに応答してリゾルバーが返した DNS レスポンスコード レスポンスコードの一覧は、DNS RCODEを参照 | NOERROR | 
| answer_type | クエリへの応答として Resolver が返す値の DNS レコードタイプ(A、MX、CNAME など) | A | 
| rdata | クエリへの応答として Resolver が返した値 | 192.0.2.44 | 
| answer_class | クエリに対するリゾルバー応答のクラス | IN | 
| srcaddr | クエリが発生したインスタンスの IP アドレス | 192.0.2.15 | 
| srcport | クエリが発生したインスタンスのポート | 50637 | 
| transport | DNS クエリの送信に使用されるプロトコル | UDP | 
| srcids | DNS クエリが発信または通過したソースの ID のリスト | |
| instance | クエリが発生したインスタンスの ID | i-0d15cd0d3example | 
| resolver-endpoint | DNS クエリをオンプレミス DNS サーバーに渡すリゾルバーエンドポイントの ID | rslvr-out-2345678dfghexample | 
| EDNS client subnet | DNS リゾルバーから取得できる場合の、発信元のクライアントの部分的な IP アドレス | 
Values that appear in Resolver query logs
ログ出力先
ログ出力先としては、以下のサービスが対応しております。
- Amazon CloudWatch Logs
- Amazon S3
- Kinesis Data Firehose
パブリック DNS のログ出力先では、CloudWatch Logs のみでしたが、Route53 Resolver では S3 がサポートされてコスト面で嬉しいです。
また、Firehose もサポートされているので、他の分析基盤に連携をしやすくなってます。
AWS resources that you can send Resolver query logs to
やってみた
ログ出力設定
Route 53 Resolver のクエリログの記録で、[クエリログの記録を設定]をクリックします。

クエリログ設定の名前を入れます。

クエリログの送信先を設定します。ここでは CloudWatch Logs を送信先にしています。

クエリログを記録する VPC を設定します。[VPC を追加]から VPC を選択して、追加します。



設定が完了しました。

ログ確認
設定した VPC から DNS クエリを投げながらログを確認してみました。
ロググループではクエリ送信元ごとにログストリームがわかれております。

EC2 のプライベートDNSの名前解決
設定した VPC 上の EC2 から、自身のプライベート DNS の名前解決をしてみます。
$ dig +short ip-10-0-1-120.ap-northeast-1.compute.internal
10.0.1.120
{
    "version": "1.000000",
    "account_id": "123412341234",
    "region": "ap-northeast-1",
    "vpc_id": "vpc-0f9264846a994a537",
    "query_timestamp": "2020-08-27T22:49:53Z",
    "query_name": "ip-10-0-1-120.ap-northeast-1.compute.internal.",
    "query_type": "A",
    "query_class": "IN",
    "rcode": "NOERROR",
    "answers":[
        {
            "Rdata": "10.0.1.120",
            "Type": "A",
            "Class": "IN"
        }
  ],
    "srcaddr": "10.0.1.120",
    "srcport": "57163",
    "transport": "UDP",
    "srcids": {
        "instance": "i-036b008ddf436585a"
    }
}
ソース(i-036b008ddf436585a, 10.0.1.120)から、EC2 のプライベート DNS(ip-10-0-1-120.ap-northeast-1.compute.internal)の名前解決を行い、10.0.1.120 が返ってきたことがわかります。
パブリック DNS の名前解決
EC2 上からパブリック DNS を名前解決時のログを確認してみます。
$ dig +short www.amazon.co.jp
tp.4d5ad1d2b-frontier.amazon.co.jp.
dtioykqj1u8de.cloudfront.net.
13.249.160.20
{
    "version": "1.000000",
    "account_id": "123412341234",
    "region": "ap-northeast-1",
    "vpc_id": "vpc-0f9264846a994a537",
    "query_timestamp": "2020-08-27T23:01:06Z",
    "query_name": "www.amazon.co.jp.",
    "query_type": "A",
    "query_class": "IN",
    "rcode": "NOERROR",
    "answers":[
        {
            "Rdata": "tp.4d5ad1d2b-frontier.amazon.co.jp.",
            "Type": "CNAME",
            "Class": "IN"
        },
        {
            "Rdata": "dtioykqj1u8de.cloudfront.net.",
            "Type": "CNAME",
            "Class": "IN"
        },
        {
            "Rdata": "13.249.160.20",
            "Type": "A",
            "Class": "IN"
        }
 ],
    "srcaddr": "10.0.1.120",
    "srcport": "44465",
    "transport": "UDP",
    "srcids": {
        "instance": "i-036b008ddf436585a"
    }
}
フォーワーディングしている DNS クエリもログ出力されることがわかりました。
さいごに
Route 53 Resolver で DNS クエリのログを出力できるようになりました。
VPC フローログのトラフィックは IP で表示なので、どこに対する通信なのかわかりにくかったところがあります。DNS クエリのログではドメインがわかるので、ログを可視化することによってトラフィックの分析やセキュリティインシデントの調査で役立ちそうです。
お恥ずかしながら、Amazon Provided DNS は現在使われておらず、Route 53 Resolver に名称が変わっていることをアップデートで知りました。従来 Route 53 Resolver と言うとオンプレからの AWS の名前解決するためのエンドポイントで使われてましたが、今は Route 53 Resolver for Hybrid Clouds という名称になっています。認識齟齬が生まれるかもしれないので、会話する際は気をつけましょう!










