1. 概要
既存でA社のCDN/WAFサービスを利用している100個のFQDN(「example.co.jp」がルートドメインで、example.co.jp上に複数のホストがある状態)を、安全にCloudflareへ移行するための手順をまとめたものです。
本ブログは、Cloudflareのドキュメントを参考に、移行を想定したものになり、案件ごとに細かな手順は変わってきます。
移行フェーズ毎のDNSトラフィックフローを最後の章に参考として記載しています。
1.1 移行方式
安全性を第一優先として、以下の段階的アプローチを採用します:
- Partial Setup(CNAME方式)で段階的に検証
- ルートドメイン単位で、検証完了後にFull Setup(NS委任方式)へ変換
1.2 この方式の利点
- 段階的な移行によりリスクを最小化
- 問題発生時は即座にロールバック可能(CNAMEを戻すだけ)
- WAFルール等の設定を事前に十分検証可能
- Partial Setup時に作成した設定はFull Setup後も全て引き継がれる
1.3 前提条件
| 項目 | 要件 |
|---|---|
| Cloudflareプラン | Enterprise(Partial Setupに必要) |
| 移行対象FQDN数 | 100件 |
| DNS権威サーバー | 最終的にCloudflareへ委任 |
| 現行環境 | A社 CDN/WAF + A社 DNS |
2. サンプルドメイン構成
本手順書では、以下のサンプルドメインを例として使用します。
| # | FQDN | 用途 | 移行バッチ |
|---|---|---|---|
| 1 | www.example.co.jp | メインサイト | パイロット |
| 2 | api.example.co.jp | API | パイロット |
| 3 | shop.example.co.jp | ECサイト | Batch 1 |
| 4 | admin.example.co.jp | 管理画面 | Batch 1 |
| 5 | mobile.example.co.jp | モバイルサイト | Batch 1 |
| 6 | img.example.co.jp | 画像配信 | Batch 2 |
| 7 | static.example.co.jp | 静的コンテンツ | Batch 2 |
| 8 | cdn.example.co.jp | CDN配信 | Batch 2 |
| 9 | video.example.co.jp | 動画配信 | Batch 2 |
| 10 | download.example.co.jp | ダウンロード | Batch 2 |
| 11-100 | その他90件 | 各種サービス | Batch 3 |
3. Phase 1: 準備(1〜2週間)
3.1 作業一覧
| 手順 | 作業内容 | 詳細 |
|---|---|---|
| 1-1 | Cloudflareアカウント作成 | Enterpriseプラン契約 |
| 1-2 | Zone追加 | example.co.jp を追加 |
| 1-3 | SSL/TLS証明書準備 | Advanced Certificate Managerで事前発行 |
| 1-4 | WAFルール移行設計 | A社ルール → Cloudflare形式にマッピング |
| 1-5 | DNSレコードエクスポート | A社DNSからゾーンファイルを取得 |
3.2 SSL/TLS証明書について
ダウンタイムを回避するため、Universal SSLではなくAdvanced Certificateの事前発行する。
出典: https://developers.cloudflare.com/dns/zone-setups/partial-setup/setup/
3.3 WAFルールマッピング表
| A社 機能 | Cloudflare対応機能 |
|---|---|
| WAFマネージドルール | WAF Managed Rules |
| WAFユーザカスタムルール | WAF Custom Rules |
| レート制限 | Rate Limiting Rules |
| ボット対策 | Bot Management |
| IP/Geo ファイアーウォール | WAF Custom Rules / IP Access Rules |
| IP Reputation | Bot Management / Threat Score |
4. Phase 2: パイロット検証(1〜2週間)
4.1 作業一覧
| 手順 | 作業内容 | 詳細 |
|---|---|---|
| 2-1 | パイロット対象選定 | www.example.co.jp, api.example.co.jp の2件 |
| 2-2 | Cloudflare設定 | DNSレコード作成、WAFルール設定 |
| 2-3 | A社 DNS変更 | CNAMEレコードをCloudflareに向ける |
| 2-4 | 動作検証 | SSL、WAF、キャッシュ、パフォーマンス確認 |
| 2-5 | 問題対応 | 問題発生時はロールバック |
4.2 Partial Setup の仕組み
出典: https://developers.cloudflare.com/dns/zone-setups/partial-setup/setup/
4.3 A社 DNS側の設定変更
; Zone: example.co.jp
; Authoritative NS: a1-xxx.akam.net (変更なし)
; パイロット対象 → Cloudflare へ CNAME 変更
www.example.co.jp. 300 IN CNAME www.example.co.jp.cdn.cloudflare.net.
api.example.co.jp. 300 IN CNAME api.example.co.jp.cdn.cloudflare.net.
; 以下は A社 のまま(変更なし)
shop.example.co.jp. 300 IN CNAME shop.example.co.jp.edgekey.net.
admin.example.co.jp. 300 IN CNAME admin.example.co.jp.edgekey.net.
mobile.example.co.jp. 300 IN CNAME mobile.example.co.jp.edgekey.net.
img.example.co.jp. 300 IN CNAME img.example.co.jp.edgekey.net.
static.example.co.jp. 300 IN CNAME static.example.co.jp.edgekey.net.
cdn.example.co.jp. 300 IN CNAME cdn.example.co.jp.edgekey.net.
video.example.co.jp. 300 IN CNAME video.example.co.jp.edgekey.net.
download.example.co.jp. 300 IN CNAME download.example.co.jp.edgekey.net.
; ... その他も A社 のまま
4.4 検証項目チェックリスト
- SSL/TLS証明書が正しく適用されている
- WAFルールが期待通りに動作している
- キャッシュが正しく機能している
- レスポンスタイムが許容範囲内である
- エラーログに異常がない
4.5 ロールバック手順
・復旧時間: 即時(DNS TTL依存、通常5〜10分)
5. Phase 3: 段階的拡大(2〜3週間)
5.1 バッチ計画
| バッチ | 対象FQDN | 件数 | 期間 |
|---|---|---|---|
| Batch 1 | shop, admin, mobile, img, static | 5件 | 1週間 |
| Batch 2 | cdn, video, download + 7件 | 10件 | 1週間 |
| Batch 3 | 残り全て | 20件 | 1週間 |
5.2 Phase 3 完了時のDNS設定
; Zone: example.co.jp
; Authoritative NS: a1-xxx.akam.net (まだ A社 )
; 全100件が Cloudflare へ CNAME 変更済み
www.example.co.jp. 300 IN CNAME www.example.co.jp.cdn.cloudflare.net.
api.example.co.jp. 300 IN CNAME api.example.co.jp.cdn.cloudflare.net.
shop.example.co.jp. 300 IN CNAME shop.example.co.jp.cdn.cloudflare.net.
admin.example.co.jp. 300 IN CNAME admin.example.co.jp.cdn.cloudflare.net.
mobile.example.co.jp. 300 IN CNAME mobile.example.co.jp.cdn.cloudflare.net.
img.example.co.jp. 300 IN CNAME img.example.co.jp.cdn.cloudflare.net.
static.example.co.jp. 300 IN CNAME static.example.co.jp.cdn.cloudflare.net.
cdn.example.co.jp. 300 IN CNAME cdn.example.co.jp.cdn.cloudflare.net.
video.example.co.jp. 300 IN CNAME video.example.co.jp.cdn.cloudflare.net.
download.example.co.jp. 300 IN CNAME download.example.co.jp.cdn.cloudflare.net.
; ... その他も全て cdn.cloudflare.net を参照
・DNS権威サーバー: まだ A社
・CDN/WAF: 全て Cloudflare が処理
・A社 の役割: DNS のみ (Apex ドメインは A社 でホスティング)
6. Phase 4: Full Setup変換(1週間)
・Zone Apex対応の切替えはFull Setupで対応することになる。
・ApexドメインはCNAMEできないため(RFC1912: CNAMEは他のレコードと同居できないため)、Full Setupで移行することになる。
2.4 CNAME records
A CNAME record is not allowed to coexist with any other data. In other words, if suzy.podunk.xx is an alias for sue.podunk.xx, you can't also have an MX record for suzy.podunk.edu, or an A record, or even a TXT record. Especially do not try to combine CNAMEs and NS records like this!:
podunk.xx. IN NS ns1
IN NS ns2
IN CNAME mary
mary IN A 1.2.3.4
6.1 変換手順
| 手順 | 作業内容 | 備考 |
|---|---|---|
| 4-1 | SSL証明書確認 | ステータスが「Active」であることを確認 |
| 4-2 | DNSレコード検証 | Cloudflare上の全レコードを確認 |
| 4-3 | DNSSEC無効化 | A社側で無効化し、TTL満了まで待機(24〜48時間) |
| 4-4 | NSレコード変更 |
ドメインレジストラでCloudflareのNSに変更 ※切り戻しを考慮してレジストラ側でNSのTTLを変更(短く)できるか確認しておく |
| 4-5 | Zone Active確認 | Cloudflareダッシュボードで確認 |
| 4-6 | DNSSEC再有効化 | Cloudflare側で有効化 |
| 4-7 | 移行完了 | 監視期間を設けて安定稼働を確認 |
6.2 DNSSEC無効化の重要性
・DNSSEC無効化を怠ると、NS変更後にDNSSEC検証が失敗し、ドメインが名前解決できなくなる。
・24〜48時間のTTL満了待機する。
6.3 Phase 4 完了時のDNS設定
; Zone: example.co.jp
; Authoritative NS: xxx.ns.cloudflare.com (Cloudflare に移管完了)
; Cloudflare Dashboard上の設定(Proxy: ON)
; 実際のDNS応答では Cloudflare Edge IP (104.26.x.x) が返される
www.example.co.jp. 300 IN A 192.0.2.100 ; Proxy: ON
api.example.co.jp. 300 IN A 192.0.2.100 ; Proxy: ON
shop.example.co.jp. 300 IN A 192.0.2.100 ; Proxy: ON
admin.example.co.jp. 300 IN A 192.0.2.100 ; Proxy: ON
mobile.example.co.jp. 300 IN A 192.0.2.100 ; Proxy: ON
img.example.co.jp. 300 IN A 192.0.2.100 ; Proxy: ON
static.example.co.jp. 300 IN A 192.0.2.100 ; Proxy: ON
cdn.example.co.jp. 300 IN A 192.0.2.100 ; Proxy: ON
video.example.co.jp. 300 IN A 192.0.2.100 ; Proxy: ON
download.example.co.jp. 300 IN A 192.0.2.100 ; Proxy: ON
; ... その他も同様
6.4 設定の引き継ぎについて
・Partial SetupからFull Setupへの変換時、WAFルールを含む全てのZone設定は保持れる想定。
・変換されるのはDNS権威サーバーの位置のみの想定。
| 項目 | 変換後の状態 |
|---|---|
| WAF Custom Rules | 保持される |
| WAF Managed Rules | 保持される |
| Rate Limiting | 保持される |
| SSL/TLS証明書 | 保持される |
| Cache設定 | 保持される |
| Page Rules | 保持される |
7. ロールバック計画
| フェーズ | ロールバック方法 | 復旧時間目安 |
|---|---|---|
| Phase 2-3(Partial Setup中) | A社 DNS側でCNAMEを元のedgekey.netに戻す | 即時(5〜10分) |
| Phase 4(Full Setup変換後) | レジストラでNSをA社に戻す |
24〜48時間 |
・SSL/TLS証明書エラーが解消しない
・WAFが正常に動作せず、攻撃をブロックできない
・オリジンサーバーへの接続が不安定
・パフォーマンスが著しく低下
...etc
8. スケジュール例
| 期間 | フェーズ | 作業内容 |
|---|---|---|
| Week 1-2 | Phase 1: 準備 | アカウント作成、SSL証明書、WAFルール設計 |
| Week 3-4 | Phase 2: パイロット | 2件のFQDNで検証 |
| Week 5 | Phase 3: Batch 1 | 5件追加(計7件) |
| Week 6 | Phase 3: Batch 2 | 10件追加(計17件) |
| Week 7 | Phase 3: Batch 3 | 83件追加(全100件完了) |
| Week 8 | Phase 4: Full Setup | NS委任、DNSSEC設定 |
| Week 9-10 | 運用安定化 | 監視、最適化 |
9. チェックリスト
移行前
- Cloudflare Enterpriseプラン契約完了
- SSL/TLS証明書の事前発行完了
- WAFルールマッピング完了
- DNSレコードのエクスポート完了
- ロールバック手順の確認・承認
移行中
- パイロットFQDNの動作確認完了
- 全FQDNのPartial Setup移行完了
- DNSSEC無効化・TTL待機完了
- NSレコード変更完了
移行完了後
- Zone Activeステータス確認
- DNSSEC再有効化完了
- 全FQDNの動作確認完了
- 監視アラート設定完了
10. 参考情報
- Partial (CNAME) Setup: https://developers.cloudflare.com/dns/zone-setups/partial-setup/
- Convert Partial to Full: https://developers.cloudflare.com/dns/zone-setups/conversions/convert-partial-to-full/
- DNS Setup Conversions: https://developers.cloudflare.com/dns/zone-setups/conversions/
- WAF Managed Rules: https://developers.cloudflare.com/waf/managed-rules/
- Advanced Certificate Manager: https://developers.cloudflare.com/ssl/edge-certificates/advanced-certificate-manager/
# 各フェーズのDNS名前解決フロー

「www.example.co.jp の IP アドレスを教えて」
「www.example.co.jp のレコードは?」
「www.example.co.jp.edgekey.net の IP は?」
「IPアドレスは 203.0.113.10 です」
HTTPS リクエスト送信
WAF検査 → CDNキャッシュ確認 → キャッシュミス時はOriginへ
オリジンへリクエスト転送
レスポンス返却
レスポンス返却

「www.example.co.jp の IP アドレスを教えて」
「www.example.co.jp のレコードは?」
※ 権威DNSはまだ A社
「www.example.co.jp.cdn.cloudflare.net の IP は?」
「IPアドレスは 104.26.10.100 です」
HTTPS リクエスト送信
WAF検査 → CDNキャッシュ確認 → キャッシュミス時はOriginへ
オリジンへリクエスト転送
レスポンス返却
レスポンス返却

「www.example.co.jp の IP アドレスを教えて」
「www.example.co.jp のレコードは?」
※ 権威DNSが Cloudflare に移管済み
※ Dashboard上は「A 192.0.2.100 (Proxy: ON)」と設定
※ 実際の応答は Cloudflare Edge IP が返される
「IPアドレスは 104.26.10.100 です」
※ CNAME解決が不要になり、1ステップ短縮
HTTPS リクエスト送信
WAF検査 → CDNキャッシュ確認 → キャッシュミス時はOriginへ
※ WAF/Cache設定は Phase 2-3 から引き継がれる
オリジンへリクエスト転送
レスポンス返却
レスポンス返却