ちょっと話題の記事

Route53 でクエリログが取得できるようになりました

2017.09.08

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

本日(現地時間で 9/7 )、AWS Route 53 でクエリログの取得が可能になりました。

この機能を有効にすると、Route 53 への問い合わせ(クエリ)が CloudWatch Logs に保存されることになります。

DNS の移行やゾーンの棚卸しなど、運用しているとクエリログが必要になる場面も少なくないと思いますので、このアップデートはうれしいですね。

ただし、実際にサービスで使っているゾーンで有効にすると、ログの量が大変なことになって課金的にも大変なことになりそうなのでご注意ください。

設定

毎度のように example1.jp を作って、試しにクエリログを取得してみようと思います。

Route 53 の Hosted Zone Details の下の方に、「Query Logging」という項目が増えていると思いますので、ここで「Configure query logging」をクリックしてください。

1

「Set up a CloudWatch Logs log group」の画面になります。

2

今回は「New log group in US East (N. Virginia)」 を選択しました。 ドキュメントにもあるのですが 、送信先の CloudWatch Logs は N. Virginia リージョンのみになりますので、ログを確認するときなどはご注意ください。

また送信するロググループは既存のものも選択できます。 今回は新規に作成すると言うことで、AWS の推奨に従って「/aws/route53/example1.jp」としました。

「Create log group」をクリックすると、 続いて「Grant permissions and configure query logging」の画面になります。

3b

今回は初めてクエリログの設定をするので、 「Create a new resource policy in US East (N. Virginia)」を選択しました。二つ目のゾーンからは、既存のリソースポリシーを選択することも可能になります。

作成するポリシーの設定は、下記のようにしました。

  • Resource policy name : route53-query-logging-policy
  • Log groups that the resource policy applies to * : /aws/route53/*

ここも、AWS の推奨(サンプル?)に従って入力しています。

今回は log group に「/aws/route53/(ゾーン名)」というルールで作成することにしましたので、 既存ポリシーの使い回しを考えると「/aws/route53/で始まるlog group全てに権限あり」としたほうが使い勝手が良くなる、ということでしょう。

下の方に「Create policy and test permissions」というボタンがありますのでクリックします。

これでリソースポリシが作成され、同時に CloudWatch Logs にテストのログが飛んでいるはずです。 ブラウザの別タブで CloudWatch Logs のマネジメントコンソールを開いて確認してみましょう。

6

リージョンを「US East (N. Virginia)」に切り替えるのを忘れないようにしてください。

  • 指定した「/aws/route53/example1.jp」というロググループが作成されており、
  • その中に「route53-test-log-stream」というログストリームが出来ていて、
  • Route 53 created a test log event」という行が出力されていれば問題ありません。

問題がなければ、 Route 53 のマネジメントコンソールに戻って「Create query logging config」をクリックしてください。

これでクエリログの設定は完了です。 改めて Hosted Zone Details を確認すると、作成した log group が表示されていることでしょう。

実験

試しにいくつかクエリを投げてみて、クエリログが取得できるか試してみます。 例によって example1.jp は試験用のドメインでルートDNSには登録されていないので、ネームサーバを直指定してクエリします。

$ host -t ns example1.jp ns-518.awsdns-00.net.

ログストリームはゾーンおよび Route 53 のエッジロケーションごとに作成されます。 エッジロケーションは世界中に複数ヶ所ありますので、ゾーンごとに複数の(そのゾーンのクエリを受けたロケーションの数だけ)ログストリームが作成されることになります。1

4

ログストリームの名前は「ゾーンID/エッジロケーションID(ネームサーバID)」という名称で固定されています。 ちょっと分かりにくい感じもありますが、常用するものではないということで割り切りも必要かもしれません。

クエリを投げた結果はこんな感じで、下記のような情報が取得できます。

  • リクエストされたドメイン・サブドメイン
  • リクエスト時刻
  • レコードタイプ (A, AAAA など)
  • ゾーンIDとエッジロケーションID
  • DNSのレスポンスコード( NOERROR や SERVFAIL など)

5

まとめ

「Route 53 でクエリログとれないの?」

という質問は時々聞きます。そのゾーンがまだ使われているのかどうか、あるいは設定が変わった後ちゃんと問い合わせが来ているのか、確認するためには必要な機能なので、これでまたひとつ Route 53 にゾーンを預けるための障壁が減ったのではないでしょうか。

なお、繰り返しになりますが、 ログの取り過ぎによる課金にはくれぐれもご注意ください。


  1. (2018/01/25修正)初出時に、ログストリームはネームサーバごとに作成されると記載しておりましたが誤りでした。お詫びと共に修正いたします