HOME > 技術ドキュメント > AWS WAF 設定入門
AWS WAF 設定入門(Web Application Firewall)
AWS WAF は、Web アプリケーションへの悪意あるリクエストをフィルタリングするマネージド型 WAF サービスです。
SQL インジェクション・XSS・不審な Bot・DDoS(レイヤー 7)などの攻撃を、
ALB・CloudFront・API Gateway の手前で遮断できます。
この記事では AWS WAF v2(WAFv2)の基本設定から実践的なルール構成までを解説します。
1. AWS WAF の構成要素
| 要素 | 説明 |
|---|---|
| WebACL | WAF のメインリソース。ルールをまとめて ALB や CloudFront に紐付ける。 |
| ルール | マッチ条件(IP・ヘッダー・URI・ボディなど)とアクション(Allow/Block/Count)の組み合わせ。 |
| ルールグループ | 複数ルールをまとめたもの。AWS マネージドルールグループが用意されている。 |
| スコープ | REGIONAL(ALB・API Gateway 向け)または CLOUDFRONT(CloudFront 向け、us-east-1 のみ)。 |
2. AWS WAF と HTTPS・SSL証明書の関係
AWS WAF は HTTP/HTTPS レイヤー(L7)でリクエストを検査します。 そのため、WAF を適用するには通信が HTTPS で行われていることが前提です。
ALB に AWS WAF を適用する構成では、ALB のリスナーに SSL 証明書を設定して HTTPS を終端させます。 ALB が HTTPS を復号した後のリクエストを WAF が検査し、通過したリクエストだけをバックエンドに転送します。
| SSL証明書の選択肢 | 特徴 |
|---|---|
| ACM(AWS Certificate Manager) | 無料。ALB・CloudFront で使える。DV のみ。自動更新。企業認証(OV/EV)不可。 |
| 独自 SSL証明書(ACM にインポート) | DV・OV・EV・ワイルドカードを選択可能。ACM にインポートして ALB で使える。企業認証が必要な場合はこちら。 |
EC サイトや金融・医療など信頼性が重要なサービスでは、 WAF でアプリケーションを守りつつ、OV または EV 証明書でサーバーの実在性を証明することが推奨されます。 OV/EV 証明書は ACM では発行できないため、エスロジカルなどの認証局代理店から取得して ACM にインポートする形になります。
SSL証明書(DV・OV・EV)の購入・詳細はこちら / DV・OV・EV の違い
3. WebACL の作成
AWS マネジメントコンソールの WAF & Shield から WebACL を作成します。
- 「Web ACLs」→「Create web ACL」
- スコープ:Regional(ALB の場合)または CloudFront
- リージョン:ALB と同じリージョンを選択
- 関連付けるリソース:対象の ALB を選択
- ルールを追加(後述)
- デフォルトアクションを設定(Allow 推奨:ルールにマッチしないリクエストを通す)
AWS CLI での作成例:
aws wafv2 create-web-acl \
--name "MyAppWebACL" \
--scope REGIONAL \
--region ap-northeast-1 \
--default-action Allow={} \
--visibility-config SampledRequestsEnabled=true,CloudWatchMetricsEnabled=true,MetricName=MyAppWebACL \
--rules file://rules.json
4. マネージドルールグループの追加
AWS が提供するマネージドルールグループを追加するだけで、主要な攻撃パターンを手軽に防御できます。 最初に追加しておくべき代表的なルールグループです。
| ルールグループ名 | 防御内容 |
|---|---|
AWSManagedRulesCommonRuleSet |
OWASP Top 10 に基づく汎用ルール(SQLi、XSS、パストラバーサルなど) |
AWSManagedRulesKnownBadInputsRuleSet |
Log4Shell・Spring4Shell など既知の脆弱性を突く不正入力 |
AWSManagedRulesSQLiRuleSet |
SQL インジェクション特化ルール |
AWSManagedRulesAmazonIpReputationList |
AWS が悪意あると判断した IP アドレスからのアクセスを遮断 |
AWSManagedRulesBotControlRuleSet |
Bot の検知・制御(追加料金あり) |
最初は Count モードで追加して誤検知がないか確認し、問題なければ Block に切り替えるのがベストプラクティスです。
5. カスタムルールの作成
特定 IP アドレスを遮断する
# IP セットを作成 aws wafv2 create-ip-set \ --name "BlockedIPs" \ --scope REGIONAL \ --region ap-northeast-1 \ --ip-address-version IPV4 \ --addresses "203.0.113.0/24" # WebACL のルールに追加(IP セットの ARN を指定) # Statement: # IPSetReferenceStatement: # ARN: arn:aws:wafv2:ap-northeast-1:123456789012:regional/ipset/BlockedIPs/... # Action: Block
レートリミット(DDoS・ブルートフォース対策)
# 同一 IP から 5 分間に 2000 リクエスト超を遮断するルール(JSON 例)
{
"Name": "RateLimitRule",
"Priority": 1,
"Statement": {
"RateBasedStatement": {
"Limit": 2000,
"AggregateKeyType": "IP"
}
},
"Action": { "Block": {} },
"VisibilityConfig": {
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "RateLimitRule"
}
}
特定の URI パスへのアクセスを制限する(管理画面など)
# /admin/* へのアクセスを特定 IP のみ許可し、それ以外を遮断する構成 # 1. 許可 IP セット(AllowedAdminIPs)を作成して Allow ルールを優先度高く設定 # 2. /admin/* に一致するリクエストを Block するルールを次の優先度で設定 # ルールは優先度の小さい番号から評価される
6. ログの設定(S3 / CloudWatch Logs / Kinesis)
WAF のログを記録することで、遮断されたリクエストの分析・チューニングができます。
# CloudWatch Logs へのログ送信を設定
aws wafv2 put-logging-configuration \
--logging-configuration '{
"ResourceArn": "arn:aws:wafv2:ap-northeast-1:123456789012:regional/webacl/MyAppWebACL/...",
"LogDestinationConfigs": [
"arn:aws:logs:ap-northeast-1:123456789012:log-group:aws-waf-logs-myapp"
]
}'
ロググループ名は必ず aws-waf-logs- で始める必要があります。
S3 に送る場合は Kinesis Data Firehose を経由します。
よく使う CloudWatch Insights クエリ例:
# 遮断されたリクエストの送信元 IP を集計 fields httpRequest.clientIp, terminatingRuleId | filter action = "BLOCK" | stats count() as blockCount by httpRequest.clientIp | sort blockCount desc | limit 20
7. ALB への WebACL の関連付け
aws wafv2 associate-web-acl \ --web-acl-arn "arn:aws:wafv2:ap-northeast-1:123456789012:regional/webacl/MyAppWebACL/..." \ --resource-arn "arn:aws:elasticloadbalancing:ap-northeast-1:123456789012:loadbalancer/app/my-alb/..."
関連付けの確認:
aws wafv2 get-web-acl-for-resource \ --resource-arn "arn:aws:elasticloadbalancing:..." \ --region ap-northeast-1
8. コストの目安
| 課金項目 | 料金(2026年時点・東京リージョン) |
|---|---|
| WebACL | $5.00 / 月 |
| ルール | $1.00 / ルール / 月 |
| リクエスト数 | $0.60 / 100万リクエスト |
| Bot Control(追加) | $10.00 / 月 + $1.00 / 100万リクエスト |
マネージドルールグループは1グループで1ルールとしてカウントされます。 最初に Common Rule Set + Amazon IP Reputation List + Rate Limit を追加すると、 月額 $5(WebACL)+ $3(ルール 3 つ)= $8 程度から始められます。
9. WAF だけでは防げないこと
AWS WAF は HTTP/HTTPS レイヤーの攻撃に特化しています。 以下の対策は WAF とは別に行う必要があります。
| 脅威 | 対策 |
|---|---|
| L3/L4 DDoS(大容量帯域攻撃) | AWS Shield Standard(自動適用)/ Shield Advanced |
| サーバー OS の脆弱性 | 定期的な OS パッチ適用、UFW・Fail2ban 設定 |
| SSH ブルートフォース | SSH 公開鍵認証、セキュリティグループで IP 制限 |
| 通信の盗聴・改ざん | SSL証明書による HTTPS 化(WAF の前提条件でもある) |
関連ドキュメント
AWS EC2 + Ubuntu 24.04 Web サーバー構築入門 — EC2、セキュリティグループ、SSL証明書
UFW・Fail2ban 設定(Ubuntu 24.04) — Linux サーバーのファイアウォール・SSH 保護
FortiGate 基本設定入門 — オンプレミス UTM・次世代ファイアウォール
