Route53のDNSクエリログ設定
CloudWatchでロググループを作成してから、Route53リゾルバーで設定します。VPC単位でDNSクエリをログ記録するため、パブリックホストゾーン/プライべートホストゾーン、双方のクエリログを取得できます。Route53で「独自ドメイン」がパブリックホストゾーン、独自ドメインのサブドメインがプライベートホストゾーンとなり、両方ともに同じVPCという環境における設定です。独自ドメイン単位かつVPC単位のDNSクエリログが取得されます。
CloudWatchのログ監視設計はロググループの命名規則が非常に重要です。
CloudWatchでロググループを作成
- CloudWatchにすすむ
- 左サイドバーで「ロググループ」へ
- 「ロググループを作成」をクリック
- ロググループ名を入力 「/aws/route53/vpc名/独自ドメイン/query-log」 など。
- 「作成」をクリック
CloudWatchのロググループ画面で保持設定の期間を編集する
以下、オプションです。
- 該当ロググループにチェックを入れる
- 「アクション」
- 「保持設定を編集」
- 「次の期間経過後にイベントを失効」で期間を選ぶ。EX)1ヶ月 など
- 「保存」
Route53リゾルバーでDNSクエリログ記録の設定
- Route53へ
- 「リゾルバー」の「クエリのログ記録」へ
- 「クエリログ記録の設定」をクリック
- 名前を付ける EX)Rt53-vpc名-独自ドメイン‐querylogs など
- 「クエリログ送信先」を選ぶ。ここでは「CloudWatch Logsのロググループ」を選択
- 先ほどCloudWatchロググループで作った、「/aws/route53/vpc名/query-log」を「CloudWatch Logsのロググループ」のプルダウン選択肢から選ぶ
- 「クエリを記録するVPC」で該当するVPCを追加
- Tagsについては任意で設定してください
- 右下にあるオレンジ色の「クエリログの設定」をクリック
CloudWatchでDNSクエリログの確認
少し時間をおいてから、CloudWatchで該当ロググループに進み、クエリ送信元毎に異なるログストリームでLog eventsのタイムスタンプとメッセージを確認できれば成功です。ブラウザやdigコマンドを試してみるのもいいと思います。
メッセージの中身は以下の様なjsonになっています。”query_name”はリクエストの独自ドメインやサブドメインやIPアドレスです。
{
"version": "1.000000",
"account_id": "×××××××××××",
"region": "ap-northeast-1",
"vpc_id": "vpc-××××××××××××",
"query_timestamp": "2020-09-××T××:××:××Z",
"query_name": "sub.example.com.",
"query_type": "A",
"query_class": "IN",
"rcode": "NOERROR",
"answers": [
{
"Rdata": "10.0.××.×××",
"Type": "A",
"Class": "IN"
},
{
"Rdata": "10.0.××.×××",
"Type": "A",
"Class": "IN"
},
{
"Rdata": "10.0.××.×",
"Type": "A",
"Class": "IN"
}
],
"srcaddr": "10.0.××.××",
"srcport": "××××××",
"transport": "UDP",
"srcids": {
"instance": "i-×××××××××"
}
}
S3に保存してローテーションまで設定したいです。そのうちやります。
「クエリログ記録の設定」削除について
「クエリログ記録の設定」削除の手順です。
- クエリログ記録を停止
- 「クエリログ記録の設定」の削除で半角英数小文字の英語「delete」入力し削除する
漢字で「削除」を入力すると削除出来ない。ハマった・・・。かなり悩み、3~4時間、別の事をして再度チャレンジして、inputタグのplaceholderは英語の「delete」だけど、指示文章は漢字の「削除」である矛盾を疑ったらビンゴ。「クエリログ記録の設定」の削除について、「delete」のテキスト打ち込みは半角英数小文字の英語「delete」で。