この記事はで読むことができます。
このガイドでは、AWS WAF (Web Application Firewall) の実践的な使用方法を、基本的な設定から高度な構成まで段階的に解説します。
AWS構築にお困りの企業様は
お気軽にご相談ください。
1. AWS WAFの基本設定
1.1 ウェブACLの作成
AWSマネジメントコンソールにログインし、WAFサービスから操作をします。
コンソールから「ウェブACLの作成」から次にすすみます。
以下の基本情報を入力します。
- 名前:MyFirstWebACL
- リソースタイプ:CloudFrontディストリビューション または リージョナルリソース
- 関連付けるAWSリソース:保護したいリソースを選択
「次へ」をクリックします。
AWS CLIを使用する場合
bash
1 2 3 4 5 | aws wafv2 create-web-acl \ --name MyFirstWebACL \ --scope REGIONAL \ --default-action Allow={} \ --description "My first Web ACL" |
1.2 基本的なルールの追加
- 「ルールの追加」をクリックします。
- AWSマネージドルールを選択します(例:AWSマネージドルールコアルールセット)。
- ルールの動作を設定します(例:カウント、ブロックなど)。
AWS CLIを使用する場合:
bash
1 2 3 4 5 6 | aws wafv2 update-web-acl \ --name MyFirstWebACL \ --scope REGIONAL \ --id your-web-acl-id \ --rules '[{"Name":"AWSManagedRulesCommonRuleSet","Priority":1,"Statement":{"ManagedRuleGroupStatement":{"VendorName":"AWS","Name":"AWSManagedRulesCommonRuleSet"}},"OverrideAction":{"None":{}},"VisibilityConfig":{"SampledRequestsEnabled":true,"CloudWatchMetricsEnabled":true,"MetricName":"AWSManagedRulesCommonRuleSet"}}]' \ --default-action Allow={} |
2. カスタムルールの作成
2.1 IPセットベースのルール
特定のIPアドレスからのアクセスをブロックするルールを作成します。
- 「IPセット」を作成し、ブロックしたいIPアドレスを追加します。
- ウェブACLに新しいルールを追加し、作成したIPセットを参照します。
AWS CLIを使用する場合:
bash
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # IPセットの作成 aws wafv2 create-ip-set \ --name BlockedIPs \ --scope REGIONAL \ --ip-address-version IPV4 \ --addresses 192.0.2.0/24 203.0.113.0/24 # ルールの追加 aws wafv2 update-web-acl \ --name MyFirstWebACL \ --scope REGIONAL \ --id your-web-acl-id \ --rules '[{"Name":"BlockBadIPs","Priority":1,"Statement":{"IPSetReferenceStatement":{"ARN":"arn:aws:wafv2:region:account-id:regional/ipset/BlockedIPs/ip-set-id"}},"Action":{"Block":{}},"VisibilityConfig":{"SampledRequestsEnabled":true,"CloudWatchMetricsEnabled":true,"MetricName":"BlockBadIPs"}}]' \ --default-action Allow={} |
2.2 レートベースルール
短時間に多数のリクエストを送信するIPアドレスをブロックするルールを作成します。
- ウェブACLに新しいルールを追加します。
- 「レートベースのルール」を選択し、しきい値(例:1000リクエスト/5分)を設定します。
AWS CLIを使用する場合:
bash
1 2 3 4 5 6 | aws wafv2 update-web-acl \ --name MyFirstWebACL \ --scope REGIONAL \ --id your-web-acl-id \ --rules '[{"Name":"RateLimitRule","Priority":2,"Statement":{"RateBasedStatement":{"Limit":1000,"AggregateKeyType":"IP"}},"Action":{"Block":{}},"VisibilityConfig":{"SampledRequestsEnabled":true,"CloudWatchMetricsEnabled":true,"MetricName":"RateLimitRule"}}]' \ --default-action Allow={} |
3. 高度な設定
3.1 地理的制限の設定
特定の国からのアクセスを制限するルールを作成します。
- ウェブACLに新しいルールを追加します。
- 「地理的一致」を選択し、ブロックまたは許可する国を指定します。
AWS CLIを使用する場合:
bash
1 2 3 4 5 6 | aws wafv2 update-web-acl \ --name MyFirstWebACL \ --scope REGIONAL \ --id your-web-acl-id \ --rules '[{"Name":"GeoBlockRule","Priority":3,"Statement":{"GeoMatchStatement":{"CountryCodes":["US","CA"]}},"Action":{"Block":{}},"VisibilityConfig":{"SampledRequestsEnabled":true,"CloudWatchMetricsEnabled":true,"MetricName":"GeoBlockRule"}}]' \ --default-action Allow={} |
3.2 カスタムリクエストヘッダールール
特定のHTTPヘッダーを持つリクエストをフィルタリングするルールを作成します。
- ウェブACLに新しいルールを追加します。
- 「HTTPリクエストヘッダー」を選択し、ヘッダー名と条件を指定します。
AWS CLIを使用する場合:
bash
1 2 3 4 5 6 | aws wafv2 update-web-acl \ --name MyFirstWebACL \ --scope REGIONAL \ --id your-web-acl-id \ --rules '[{"Name":"CustomHeaderRule","Priority":4,"Statement":{"ByteMatchStatement":{"SearchString":"badheader","FieldToMatch":{"SingleHeader":{"Name":"x-custom-header"}},"TextTransformations":[{"Priority":0,"Type":"NONE"}],"PositionalConstraint":"CONTAINS"}},"Action":{"Block":{}},"VisibilityConfig":{"SampledRequestsEnabled":true,"CloudWatchMetricsEnabled":true,"MetricName":"CustomHeaderRule"}}]' \ --default-action Allow={} |
4. モニタリングとロギング
4.1 CloudWatchメトリクスの設定
- ウェブACLの「メトリクス」タブに移動します。
- 各ルールのメトリクスを有効化します。
4.2 ロギングの設定
- Amazon S3バケットを作成してログを保存します。
- ウェブACLの「ロギング」タブからロギングを有効にします。
AWS CLIを使用する場合:
bash
1 2 3 | aws wafv2 put-logging-configuration \ --resource-arn arn:aws:wafv2:region:account-id:regional/webacl/MyFirstWebACL/web-acl-id \ --logging-configuration '{"ResourceArn":"arn:aws:s3:::your-s3-bucket","LogDestinationConfigs":["arn:aws:firehose:region:account-id:deliverystream/aws-waf-logs-your-delivery-stream"]}' |
5. テストと検証
- 安全な環境でブロックされるべきリクエストをシミュレートします(例:SQLインジェクション攻撃)。
- CloudWatchメトリクスとログを確認し、ルールが期待通りに機能していることを確認します。
- 正常なトラフィックが影響を受けていないことを確認します。
6. トラブルシューティングとベストプラクティス
- ルールの優先順位を適切に設定し、最も重要なルールが先に評価されるようにします。
- 新しいルールを追加する際は、まず「カウント」モードで動作を確認し、誤検知がないことを確認してから「ブロック」モードに変更します。
- 定期的にログを分析し、ルールの効果を評価します。必要に応じてルールを調整します。
- AWS Trusted Advisorを活用して、WAFの設定に関する推奨事項を確認します。
- 定期的にAWSマネージドルールを更新し、最新の脅威に対応します。
まとめ
AWS WAFは、ウェブアプリケーションを様々な脅威から保護する強力なツールです。基本的な設定から高度なカスタマイズまで、段階的に構成を進めることで、効果的なセキュリティ対策を実現できます。
常に最新の脅威情報を把握し、定期的にルールを見直すことが重要です。また、ログ分析やモニタリングを通じて、WAFの効果を継続的に評価し、必要に応じて調整を行うことで、最適な保護を維持できます。
AWS構築にお困りの企業様は
お気軽にご相談ください。