株式会社エスロジカル
株式会社エスロジカル
SSL証明書(DV、OV、EV)、セキュリティ、Web開発、Linux開発、Go言語

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)の基本設定から実践的なルール構成までを解説します。


要素 説明
WebACL WAF のメインリソース。ルールをまとめて ALB や CloudFront に紐付ける。
ルール マッチ条件(IP・ヘッダー・URI・ボディなど)とアクション(Allow/Block/Count)の組み合わせ。
ルールグループ 複数ルールをまとめたもの。AWS マネージドルールグループが用意されている。
スコープ REGIONAL(ALB・API Gateway 向け)または CLOUDFRONT(CloudFront 向け、us-east-1 のみ)。

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 の違い


AWS マネジメントコンソールの WAF & Shield から WebACL を作成します。

  1. 「Web ACLs」→「Create web ACL」
  2. スコープ:Regional(ALB の場合)または CloudFront
  3. リージョン:ALB と同じリージョンを選択
  4. 関連付けるリソース:対象の ALB を選択
  5. ルールを追加(後述)
  6. デフォルトアクションを設定(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

AWS が提供するマネージドルールグループを追加するだけで、主要な攻撃パターンを手軽に防御できます。 最初に追加しておくべき代表的なルールグループです。

ルールグループ名 防御内容
AWSManagedRulesCommonRuleSet OWASP Top 10 に基づく汎用ルール(SQLi、XSS、パストラバーサルなど)
AWSManagedRulesKnownBadInputsRuleSet Log4Shell・Spring4Shell など既知の脆弱性を突く不正入力
AWSManagedRulesSQLiRuleSet SQL インジェクション特化ルール
AWSManagedRulesAmazonIpReputationList AWS が悪意あると判断した IP アドレスからのアクセスを遮断
AWSManagedRulesBotControlRuleSet Bot の検知・制御(追加料金あり)

最初は Count モードで追加して誤検知がないか確認し、問題なければ Block に切り替えるのがベストプラクティスです。


特定 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 するルールを次の優先度で設定
# ルールは優先度の小さい番号から評価される

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

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

課金項目 料金(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 程度から始められます。


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・次世代ファイアウォール


← 技術ドキュメント一覧へ戻る