このガイドでは、AWS WAF(Web Application Firewall)の構築方法を詳細に説明します。AWSマネジメントコンソールとAWS CLIの両方の方法を提供します。
1. 前提条件
- AWSアカウントを持っていること。
- 保護したいリソース(CloudFrontディストリビューションやApplication Load Balancerなど)が既に設定されていること。
2. AWS WAFのウェブACLの作成
2.1 AWSマネジメントコンソールを使用する方法
AWSマネジメントコンソールにログインし、WAFサービスに移動し、「ウェブACLの作成」をクリックします。
以下の基本設定を行います。
- 名前とデスクリプションを入力します。
- リソースタイプを選択します(CloudFront、リージョナルなど)。
- 関連付けるAWSリソースを選択します。
次にルールを追加します。以下は主な種類です。
- マネージドルール:AWSが提供する事前設定ルール。
- カスタムルール:独自の条件とアクションを設定。
- レートベースルール:リクエスト数に基づくルール。
最後にデフォルトアクションを設定します(通常は「許可」)。
設定を確認し、「作成」をクリックします。
2.2 AWS CLIを使用する方法
2.2.1 ウェブACL設定のJSONファイル(web-acl-config.json
)を作成します。
json1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | { "Name": "MyWebACL", "Scope": "REGIONAL", "DefaultAction": { "Allow": {} }, "Rules": [ { "Name": "BlockXSS", "Priority": 1, "Statement": { "XssMatchStatement": { "FieldToMatch": { "Body": {} }, "TextTransformations": [ { "Priority": 0, "Type": "NONE" } ] } }, "Action": { "Block": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "BlockXSS" } } ], "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "MyWebACLMetric" } } |
2.2.2 以下のAWS CLIコマンドを実行してウェブACLを作成します。
bash | aws wafv2 create-web-acl --cli-input-json file://web-acl-config.json |
3. ルールの追加と設定
3.1 SQLインジェクション対策ルールの追加
AWSマネジメントコンソールで次の通り行います。
- 作成したウェブACLを選択します。
- 「ルールの追加」をクリックします。
- マネージドルールから「AWSマネージドルール SQLiルールセット」を選択します。
- 必要に応じてルールの動作をカスタマイズします。
AWS CLIにて次を実行します。
bash | aws wafv2 update-web-acl --name MyWebACL --scope REGIONAL --id your-web-acl-id \ --rules '[{"Name":"AWSManagedRulesSQLiRuleSet","Priority":2,"Statement":{"ManagedRuleGroupStatement":{"VendorName":"AWS","Name":"AWSManagedRulesSQLiRuleSet"}},"OverrideAction":{"None":{}},"VisibilityConfig":{"SampledRequestsEnabled":true,"CloudWatchMetricsEnabled":true,"MetricName":"AWSManagedRulesSQLiRuleSet"}}]' |
3.2 カスタムIPブロックリストの作成
AWSマネジメントコンソールで次の通り行います。
- 「IPセット」を作成し、ブロックしたいIPアドレスを追加します。
- ウェブACLに新しいルールを追加し、作成したIPセットを参照します。
AWS CLIにて次を実行します。
3.2.1 IPセットを作成
HTML | aws wafv2 create-ip-set --name BlockedIPs --scope REGIONAL --ip-address-version IPV4 --addresses 192.0.2.0/24 203.0.113.0/24 |
3.2.2 ウェブACLにルールを追加
bash | aws wafv2 update-web-acl --name MyWebACL --scope REGIONAL --id your-web-acl-id \ --rules '[{"Name":"BlockBadIPs","Priority":3,"Statement":{"IPSetReferenceStatement":{"ARN":"arn:aws:wafv2:region:account-id:regional/ipset/BlockedIPs/ip-set-id"}},"Action":{"Block":{}},"VisibilityConfig":{"SampledRequestsEnabled":true,"CloudWatchMetricsEnabled":true,"MetricName":"BlockBadIPs"}}]' |
4. ロギングの設定
4.1 ログを保存
Amazon S3バケットを作成してログを保存します。
4.2 ロギングを有効化
AWSマネジメントコンソールで、ウェブACLの「ロギング」タブからロギングを有効にします。
4.3 AWS CLIで次のコマンドを実行
bash | aws wafv2 put-logging-configuration --resource-arn arn:aws:wafv2:region:account-id:regional/webacl/MyWebACL/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. モニタリングとアラートの設定
- CloudWatchダッシュボードを作成し、WAFメトリクスを追加します。
- 重要なメトリクス(ブロックされたリクエスト数など)にCloudWatchアラームを設定します。
bash | aws cloudwatch put-metric-alarm --alarm-name HighBlockedRequests \ --alarm-description "Alarm when blocked requests exceed threshold" \ --metric-name BlockedRequests --namespace AWS/WAFV2 \ --statistic Sum --period 300 --threshold 100 \ --comparison-operator GreaterThanThreshold --evaluation-periods 1 \ --dimensions Name=WebACL,Value=MyWebACL Name=Rule,Value=BlockBadIPs \ --alarm-actions arn:aws:sns:region:account-id:your-sns-topic |
6. テストと検証
- 安全な環境で、ブロックされるべきリクエスト(SQLインジェクション攻撃など)をシミュレートします。
- ログとCloudWatchメトリクスを確認し、ルールが期待通りに機能していることを確認します。
- 正常なトラフィックが影響を受けていないことを確認します。
まとめ
AWS WAFの構築は、基本的な設定から始まり、具体的なセキュリティニーズに応じたカスタマイズまで多岐にわたります。このガイドで説明した手順とベストプラクティスを参考に、ご自身のアプリケーションに適したWAF設定を構築してください。
セキュリティは継続的なプロセスです。定期的なルールの見直し、ログ分析、新しい脅威への対応を行うことで、常に最適な保護を維持することが重要です。また、AWSの新機能や更新情報をチェックし、最新のセキュリティプラクティスを取り入れていくことをおすすめします。