[アップデート] Route53 Resolver で DNS クエリをログ出力できるようになりました!

[アップデート] Route53 Resolver で DNS クエリをログ出力できるようになりました!

Route 53 Resolver で DNS クエリのログ出力がサポートされました。なお、Route 53 Resolver は、 従来の Amazon Provided DNS のことで、今は Route 53 Resolver に名称が変わってます!
Clock Icon2020.08.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Route53 Resolver で DNS クエリのログ出力がサポートされ、VPC 内の AWS リソースが、どのドメインに接続しているかわかるようになりました。

https://aws.amazon.com/jp/about-aws/whats-new/2020/08/amazon-route-53-resolver-supports-vpc-dns-query-logging/

なにが嬉しいのか

Route 53 Resolver は、VPC 作成時にデフォルトで備わっている DNS サーバー(フォワーダー+フルサービスリゾルバー)で、VPC 内からパブリック DNS への名前解決をしたり、VPC 内部に閉じた DNS の名前解決を行います。昔から AWS を使われている方には Amazon Provided DNS と表現するほうが馴染み深いかもしれません。

20191016-AWS-Black-Belt-Online-Seminar-Amazon-Route-53-Resolver-24-2048

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 という名称になっています。認識齟齬が生まれるかもしれないので、会話する際は気をつけましょう!

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.