VPC DNS クエリログを Amazon Athena で確認してみた
こんにちは、望月です。
去年、Route53 Resolver で VPC DNS クエリログが取得できるようになりましたが、今回クエリログを取得し、特定ドメインへの名前解決 (アクセス) を行っていないことを確認するため、クエリログの取得から Amazon Athena を使って確認するまでを行ったので、ご紹介したいと思います。
やってみた
クエリログ記録の設定を行う
Route 53 のコンソールを表示し、Resolver の [クエリのログ記録] を選択し、[クエリログ記録の設定] をクリックします。
クエリログ記録の設定画面にて以下項目を入力し、[クエリログの設定] をクリックします。
- 名前
- 作成する設定の名前を入力
- クエリログの送信先
- Athena を使うため、S3 バケットを指定
- S3 バケットを事前に作成もしくはここの [新しい S3 送信先を作成] をクリックし作成します
- Athena を使うため、S3 バケットを指定
- Amazon S3 バケット
s3://<bucket name>/
という形で S3 バケットを指定- Prefix には自動で
/AWSLogs/<AWSアカウントID>/vpcdnsquerylogs/<VPCID>/<YYYY>/<MM>/<DD>/
と付くため、別途分かりやすい Prefix を付けなくてもよさそうです
- Prefix には自動で
- クエリをログ記録する VPC
- VPC を指定
設定が作成されたことを確認します。
Athena で確認を行う
Athena のコンソールを表示し、テーブルを作成するため、以下クエリを実行します。
- S3 バケットの LOCATION はログが保存されている S3 URI を指定
CREATE EXTERNAL TABLE IF NOT EXISTS default.route53_querylog ( version float, account_id string, region string, vpc_id string, query_timestamp string, query_name string, query_type string, query_class string, rcode string, answers array<string>, srcaddr string, srcport int, transport string, srcids string ) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' WITH SERDEPROPERTIES ('serialization.format' = '1') LOCATION 's3://<bucket name>/<AWSアカウントID>/vpcdnsquerylogs/<VPCID>/<YYYY>/<MM>/<DD>/'
上記クエリを実行すると以下テーブルが作成されます。
あとは必要に応じ、クエリを実行してください。以下使いそうなクエリをメモっておきます。
例) 最新 100 件のクエリを表示
SELECT * FROM default.route53_querylog LIMIT 100;
例) 指定した IP アドレスが送信元のクエリを表示
SELECT * FROM default.route53_querylog WHERE srcaddr = '<IP アドレス>';
例) 指定したドメイン名のクエリを表示
SELECT * FROM default.route53_querylog WHERE query_name = 'classmethod.jp.'
例) 指定したドメイン名のすべてのサブドメインのクエリを表示
SELECT * FROM default.route53_querylog WHERE query_name like '%.classmethod.jp.';
まとめ
出力された DNS クエリログを Amazon Athena でいろいろと確認してみました。
ドメイン名からどこに接続したかというのが簡単に確認できるため、本当にそのドメインにアクセスしてない?とか、調べるのに便利かと思います。