【目次】
1. はじめに
Amazon CloudWatchのコンソールからOpenSearchダッシュボードを作成できるようになりました。
Amazon CloudWatch and Amazon OpenSearch Service launch an integrated analytics experience
OpenSearchでダッシュボードを作成することはあまり容易ではありませんが、CloudWatchのコンソールから操作できることで比較的簡単にダッシュボードが作成できるようになっています。
本ブログ記事では、AWS WAFログ用のダッシュボードの作成方法などを見ていきたいと思います。
2. OpenSearchダッシュボードの作成方法
今回は Analyze with Amazon OpenSearch Service に記載の手順を参考に作成します。
なお、上記ページにも記載の通り、作業を行うAWSアカウントにCloudWatchOpenSearchDashboardsFullAccessといった権限が必要ですので、あらかじめ必要な権限が付与されているかを確認した上で作成を進める必要があります。
また、CloudWatch Logsに存在するWAFログを使用するため、対象のWeb ACLのWAFログがCloudWatch Logsに出力されていることをあらかじめご確認ください。
- CloudWatchの画面を開きます。
- Logs Insightsを開いて、[Analyze with OpenSearch] をクリックします。
- まだ設定を行ったことがない場合、スクリーンショットのように「Create OpenSearch integration」というパネルが出ますので、右側の [Settings] ボタンをクリックします。
なお、OpenSearch integrationの設定は左メニューの下部にある [Settings] をクリックし、 [Logs] というタブをクリックすることでも確認可能です。
[Create integration] をクリックすると、同じように設定を開始できます。
※OpenSearch integrationはリージョンごとに1つの設定のみ実施可能ですので、すでに設定が行われている場合には設定済みのintegrationの情報が記載されます。
- Integrationを作成するための画面が表示されますので、Integration nameとData retentionに値を入力します。
- IAM permissionでは、IAMロールを新しく作成します。自動で必要な権限を持ったロールが作成されます。
あわせてダッシュボードを閲覧できるユーザーやロールも指定します。
- [Create integration] をクリックします。
作成が完了するまでは少し時間がかかります。作成が完了すると、SettingsのLogsタブ以下で以下のスクリーンショットのようにOpenSearch integrationに関する情報を確認できるようになります。
次に、ダッシュボードを作成します。
- 再度Logs Insightsを開いて、[Analyze with OpenSearch] をクリックします。
- [Create dashboard] をクリックします。
- [Select dashboard type] にて [Amazon WAF logs] を選択します。
- NameやDescriptionを入力します。
- [Select log groups] にて、対象とするロググループを選択します。
- [Create dashboard] をクリックします。
ダッシュボードが作成されると、以下のスクリーンショットのようにダッシュボードが表示されます。
データが閲覧できるようになるまで少し時間がかかる場合がありますので、その場合は少し待ってから更新します。
また、CloudWatch DashboardではタイムゾーンをUTC timezoneとLocal timezoneから選択できますが、OpenSearchダッシュボードの場合、UTC timezoneでない場合にはデータが表示されない場合があります。
もしデータがなかなか表示されないといった場合には、 Local timezoneを選択してしまっていないかご確認ください。
なお、[Analyze with OpenSearch] を開いた直後はダッシュボードが選択されていない場合があります。
その場合は、 [Select a dashboard] から作成したダッシュボードの名前を選択してください。
3. ダッシュボードで閲覧可能な情報について
作成したダッシュボードには、以下のグラフがあらかじめ表示されています。
- Blocked Requests by Terminating Rule
- Country or Region by Requests
- Filters
- Requests History
- Requests to Web ACL Name
- Sources
- Top 10 Client IPs
- Top 10 Terminating Rules
- Total Requests
なお、ダッシュボードはOpenSearchの画面上でも閲覧可能です。
OpenSearchを開くとグラフの追加などもできるようになっていますが、OpenSearch上でグラフを追加したところ、CloudWatch側の「OpenSearch dashboards」上で当該のダッシュボードが閲覧できなくなってしまいました。
「Select a dashboard」のプルダウンに作成したダッシュボードの名前が表示されない状態となってしまいましたので、現時点ではグラフの追加などは控えた方が良さそうです。
OpenSearchそのものや、OpenSearch上のダッシュボードが消えてしまうわけではありませんが、CloudWatch側の「OpenSearch dashboards」上で閲覧できなくなってしまうのは不便かもしれません。
また、OpenSearchにて閲覧できる(インデックスされている)データは以下の12個です。
- aws.waf.RuleType
- aws.waf.action
- aws.waf.event_count
- aws.waf.httpRequest.clientIp
- aws.waf.httpRequest.country
- aws.waf.httpRequest.httpMethod
- aws.waf.httpRequest.uri
- aws.waf.httpSourceId
- aws.waf.ruleGroupList.ruleId
- aws.waf.terminatingRuleId
- aws.waf.webaclId
- start_time
「aws.waf.ruleGroupList.ruleId」はルールグループ内のルール名を取得するためのインデックスに見えますが、実際はルールグループに含まれるルールの名前は取得できないようです。「aws.waf.ruleGroupList.ruleId」に記載される値を確認すると、基本的には「UNKNOWN_GROUP」と表示されてしまいました。
WAFログ上は「ruleGroupList.terminatingRule.ruleId」以下にルール名が記載されるため、本来はこちらを指定するべきインデックスに見えますが、現状は「terminatingRule」が欠けているため情報がうまく取得できていない可能性がありそうです。
WafCharmではルールグループを用いているため、WafCharmルールの場合はどのルールで検知したかまではこのダッシュボードではパッとは判断しづらい形になります。
なお、aws.waf.terminatingRuleIdはWAFログの「terminatingRuleId」という項目を指しており、ルールグループ内のルールで検知した場合、この項目にはルールグループ名のみが記載されます。
4. WafCharmとの利用について
WafCharmではWAFログ連携機能をご提供しておりますが、CloudWatch Logsには対応しておりません。
そのため、WafCharmのWAFログ連携機能とOpenSearchダッシュボードを併用するといったことはできかねてしまいます。
5. おわりに
CloudWatchから気軽にOpenSearchでダッシュボードを作成できるようになり、すでにWAFログをCloudWatch Logsに出力されている場合にはより簡単にダッシュボードの作成ができるようになったのではないでしょうか。
上記の通り、ダッシュボードに変更を加えられない点や、ルールグループを使用している場合に検知したルール名が確認できないケースもあるようですので、調整や運用上の工夫が必要そうな部分もありますが、ダッシュボード自体は簡易的なものであればすぐに作成される利点もあります。
複数のWeb ACLの情報をまとめて見たい場合などにもOpenSearchダッシュボードは有用かと思いますので、検討してみてもいいかもしれません。