こんにちは。弁護士ドットコム SRE 室のテイです。
前回は、Amazon Route 53 Resolver DNS Firewall の検証を紹介しましたが、今回はブロック対象のドメインへアクセスすることが検知され、Slack へ通知する監視設定を紹介させていただきます。
Route53 クエリログの設定
まず、クエリログを有効するよう設定します。
Route53 のコンソール画面で、「クエリのログ記録」→「クエリログ記録の設定」の順でクリックして、設定名を記入します。
次はクエリログの転送先を設定します。今回は Lambda 関数を利用して、Cloudwatch Logs のログを datadog へ転送するため、クエリログの転送先を Cloudwatch Logs を選択します。「Create log group」を選択して、グループの名前を記入します。
次は「VPC を追加」ボタンをクリックして、記録したい VPC を追加します。
最後、「クエリログの設定」ボタンをクリックして、設定を反映します。反映した後、JSON 形式のクエリログが記録されました。
Lambda でログ転送
クエリログの記録設定が完了した後、Lambda 関数で Datadog への転送設定を実施します。
本記事は Lambda 関数が作成済の前提として紹介しますので、作成方法や IAM ロールの作成などを割愛させていただきます。
作成済の Lambda 関数に下記のように、クエリログの Cloudwatch Log group を選択して、トリガーを設定します。
すべてのクエリログを Datadog へ転送するのは無駄なので、DNS FireWall のアラートモードやブロックモードで検知されたログのみ、Datadog へ転送するようフォルターをかけます。
前回 DNS FireWall を動作確認した時のログは以下の JSON 形式となるため、フォルターパターンは { $.firewall_rule_action = "ALERT" || $.firewall_rule_action = "BLOCK" }
となります。
{
"version": "1.100000",
"account_id": "54**********",
"region": "ap-northeast-1",
"vpc_id": "vpc-0172***********",
"query_timestamp": "2021-06-11T06:17:16Z",
"query_name": "www.google.co.jp.",
"query_type": "A",
"query_class": "IN",
"rcode": "NOERROR",
"answers": [],
"srcaddr": "10.50.**.**",
"srcport": "51923",
"transport": "UDP",
"srcids": {
"instance": "i-012b2************"
},
"firewall_rule_action": "BLOCK",
"firewall_rule_group_id": "rslvr-frg-d78************",
"firewall_domain_list_id": "rslvr-fdl-de2e************"
}
監視設定
Datadog で route53 のクエリログを収集するため、AWS インテグレーションで、route53
をチェックする必要があります。収集されたログを Log Explorer で確認できます。
また、監視や閲覧がわかりやすくするため、「QUESTION NAME」と「FIREWALL_RULE_ACTION」を facet
として、登録しました。
ログを監視するため、Logs
タイプの Monitor を選択します。
検索クエリでは service:route53
と @firewall_rule_action:ALERT
を入れます。当社はアラートモードで運用しているため、ALERT
のアクションのみ条件として設定されています。
また、通知メッセージには検知されたドメイン名も表示させるため、Question Name
でグループ化します。
最後、メッセージの文言と通知する Slack のチャンネルを設定します。
ログもメッセージと一緒に Slack へ送らせるため、Include a table of the top 10 breaching values
をチェックします。
実際にアラートモードで対象ドメインへアクセスして、検知された時の通知結果はこちらです。
以上、DNS Firewall のクエリログの監視設定を紹介させていただきました。