AWS WAFの可視化とモニタリング(CloudWatch統合)を初心者向けに解説
生徒
「先生、AWS WAFで攻撃を防御できるのはわかりますが、それを画面で確認したり、攻撃の傾向をモニタリングすることはできますか?」
先生
「はい、AWS WAFはCloudWatch(クラウドウォッチ)と統合することで、可視化やモニタリングができます。ダッシュボードで攻撃数やブロック数をグラフ表示したり、アラームを設定して異常を検知することも可能です。」
生徒
「なるほど!ただ防御するだけじゃなくて、見える化して監視できるんですね。」
先生
「その通りです。では、AWS WAFとCloudWatchを組み合わせた可視化とモニタリングの基本を学んでいきましょう。」
1. AWS WAFとCloudWatchの関係
AWS WAF(ウェブ アプリケーション ファイアウォール)は、WebアプリケーションをSQLインジェクションやクロスサイトスクリプティングなどの攻撃から守る「ガードマン」のような仕組みです。一方でCloudWatch(クラウドウォッチ)は、AWS上で動いているサービスの健康状態をチェックし、記録する「監視カメラ兼レコーダー」の役割を果たします。
この2つが連携することで、WAFが「いつ、どのような攻撃を、何件ブロックしたか」という詳細な活動記録(メトリクス)がCloudWatchに自動で転送されます。これにより、本来は見えないインターネット上の脅威をグラフとして可視化したり、異常時に通知を飛ばしたりすることが可能になります。
プログラミング未経験者向け:ログの仕組みをイメージしよう
例えば、WAFが攻撃をブロックした際、内部では以下のような「いつ、誰が(IPアドレス)、何をしたか」というデータが生成されています。これをCloudWatchが受け取って集計します。
{
"timestamp": "2026-02-02T09:00:00Z",
"action": "BLOCK",
"terminatingRuleId": "SQLi_Rule",
"httpRequest": {
"clientIp": "192.0.2.1",
"uri": "/login"
}
}
このような専門的なデータを、私たちが一目でわかる「グラフ」に変換してくれるのが、CloudWatchとの統合による最大のメリットです。運用者が難しいコードを読まなくても、攻撃の状況をひと目で把握できるようになります。
2. 可視化できる主なメトリクス
CloudWatchと統合すると、AWS WAFから以下のようなメトリクスが収集されます。
- AllowedRequests:許可されたリクエスト数
- BlockedRequests:ブロックされたリクエスト数
- CountedRequests:カウントモードで記録されたリクエスト数
- CaptchaRequests:CAPTCHA(キャプチャ)に応答したリクエスト数
- RuleEvaluations:どのルールが判定に使われたか
これらを折れ線グラフや棒グラフにすることで、どの時間帯に攻撃が集中しているのか、どのルールが頻繁に使われているのかがひと目でわかります。
3. 可視化の手順
AWS WAFのメトリクスをCloudWatchに統合する手順は次の通りです。
- AWSマネジメントコンソールでWAFのWeb ACL(ウェブ アクセス コントロール リスト)を開く
- 「メトリクス」タブを確認し、CloudWatchに送信されているか確認
- CloudWatchコンソールに移動してダッシュボードを作成
- グラフウィジェットを追加し、WAFのメトリクス(BlockedRequestsなど)を選択
- 保存してダッシュボード化する
これで、リアルタイムに攻撃数を可視化するダッシュボードが作成されます。
4. アラームによるモニタリング
CloudWatchの強力な機能のひとつがアラーム設定です。例えば、「1分間に100件以上ブロックされたら通知する」といったルールを作成できます。
通知はSNS(エスエヌエス、Simple Notification Service)を使ってメールやチャットに送ることができ、異常をすぐに検知できます。これにより、攻撃が急増したときに即座に対応できる体制を整えることができます。
5. ダッシュボード活用のメリット
CloudWatchダッシュボードを活用するメリットは次の通りです。
- 攻撃状況をひと目で把握できる
- 時間ごとの傾向を見てルール改善に活かせる
- 異常検知を自動化できる
- 他のAWSリソース(EC2やS3など)の監視とあわせて統合管理できる
単なる防御から一歩進んで、「見える化」「予防」「早期対応」ができるようになります。
6. 初心者がまず行うべきこと
最初は、BlockedRequestsを可視化するグラフを1つ作り、毎日の推移を確認することから始めましょう。その上で、異常な増加があればアラームを設定し、通知を受け取れるようにすれば、運用の第一歩として十分です。
慣れてきたら、特定のルール単位のメトリクスを確認したり、ダッシュボードを複数作成して、攻撃パターンごとに分けて可視化するのがおすすめです。
まとめ
ここまで、AWS WAF(ウェブアプリケーションファイアウォール)とAmazon CloudWatchを連携させた、セキュリティの可視化とモニタリング手法について詳しく見てきました。Webサイトを運営する上で、単に「守る」だけでなく「何が起きているかを知る」ことは、システムの健全性を保つために極めて重要です。AWS WAFが提供する強力なフィルタリング機能と、CloudWatchが持つ柔軟な監視・通知機能を組み合わせることで、防御の精度を一段階引き上げることが可能になります。
クラウドセキュリティにおける可視化の意義
インターネット上の脅威は日々進化しており、静的な設定だけで全ての攻撃を防ぎ続けるのは困難です。しかし、CloudWatchメトリクスを通じて「BlockedRequests(ブロックされたリクエスト)」の推移を観察することで、特定の地域からの攻撃が急増していることや、特定の時間帯にスキャニングが行われていることなど、攻撃者の意図や傾向を読み解くことができます。これにより、後手に回るのではなく、先手を打ってルールを調整する「能動的なセキュリティ運用」が実現します。
実践的なログ活用と自動化の仕組み
さらに高度な運用を目指す場合、メトリクスだけでなく「WAFログ」の活用も視野に入れましょう。AWS WAFのログをAmazon Kinesis Data Firehose経由でS3やCloudWatch Logsに転送することで、より詳細な分析が可能になります。例えば、以下のコードは、AWS CLIを使用して既存のWeb ACLにロギング設定を追加する際のイメージです。
# Web ACLにロギング設定を適用するコマンド例
aws wafv2 put-logging-configuration \
--logging-configuration '{
"ResourceArn": "arn:aws:wafv2:us-east-1:123456789012:regional/webacl/MyWebACL/a1b2c3d4",
"LogDestinationConfigs": ["arn:aws:s3:::my-waf-logs-bucket"]
}'
また、CloudWatchアラームを設定する際には、閾値の設計が鍵となります。あまりに低い数値でアラートを飛ばすと「通知疲れ」を引き起こし、本当に重要な警告を見逃す原因になります。最初は緩めの設定から始め、システムの平常時のトラフィックに合わせて段階的に最適化していくのが、失敗しない運用のコツです。
Python boto3を使用したメトリクス取得の自動化
運用の自動化やレポート作成のために、プログラムからCloudWatchのメトリクスを取得したい場面も多いでしょう。PythonのSDKであるboto3ライブラリを使用すれば、簡単にWAFのブロック統計を取得できます。
import boto3
from datetime import datetime, timedelta
# CloudWatchクライアントの初期化
cloudwatch = boto3.client('cloudwatch', region_name='ap-northeast-1')
def get_waf_blocked_stats(web_acl_name):
# 直近1時間のブロックリクエスト数を取得
response = cloudwatch.get_metric_statistics(
Namespace='AWS/WAFV2',
MetricName='BlockedRequests',
Dimensions=[
{'Name': 'WebACL', 'Value': web_acl_name},
{'Name': 'Region', 'Value': 'ap-northeast-1'},
{'Name': 'Rule', 'Value': 'ALL'}
],
StartTime=datetime.utcnow() - timedelta(hours=1),
EndTime=datetime.utcnow(),
Period=3600,
Statistics=['Sum']
)
for datapoint in response['Datapoints']:
print(f"Time: {datapoint['Timestamp']}, Blocked Count: {datapoint['Sum']}")
# 実行例
if __name__ == "__main__":
get_waf_blocked_stats('MyProductionWebACL')
今後のステップ:さらなるセキュリティ強化へ
可視化ができるようになったら、次は「自動防御」を検討してみてください。例えば、CloudWatchアラームが発火した際に、AWS Lambdaを起動して攻撃者のIPアドレスを自動的に拒否リストへ追加するような仕組みです。こうしたオートメーションを構築することで、深夜や休日であってもシステムが自律的に身を守るようになります。
AWS WAFとCloudWatchの統合は、クラウドネイティブなセキュリティの第一歩です。この記事で紹介した内容をベースに、まずは「ダッシュボードを作る」ことから始め、安全で安心なWebサービス運用を継続していきましょう。
生徒
「先生、まとめまで読んでみて、可視化の重要性が本当によくわかりました。ただ防御しているだけだと、実際に攻撃されているのか、それとも平和なのかすら分からないですもんね。」
先生
「その通りです。暗闇の中で戦うのは怖いですからね。CloudWatchでグラフを作ることは、いわば戦場に照明を当てるようなものです。何が起きているか見えれば、次に打つべき手も見えてきます。」
生徒
「さっきのPythonのコードを使えば、毎日メールで『昨日のブロック件数レポート』を送るようなツールも作れそうですね!プログラムと組み合わせると、運用の幅がグッと広がります。」
先生
「素晴らしい着眼点ですね!自動化を進めれば、人間がずっと画面を監視しなくてもよくなります。最初は手動で確認して、慣れてきたらどんどんコードを書いて自動化していきましょう。」
生徒
「はい!まずは自分のWeb ACLのメトリクスを確認して、簡単なダッシュボードを自作してみます。攻撃の傾向が見えてくるのが楽しみです!」
先生
「その意気です。セキュリティ運用は、継続が一番の力になります。もし異常な数値を見つけたら、どのルールが反応しているのか深掘りしてみてくださいね。それがスキルアップの近道ですよ。」