株式会社ネットワールドのエンジニアがお届けする技術情報ブログです。
各製品のエキスパートたちが旬なトピックをご紹介します。

クラウドサービス(A社)からCloudflareのCDN/WAFサービスへ移行する方法を考えてみた。

1. 概要

 既存でA社のCDN/WAFサービスを利用している100個のFQDN(「example.co.jp」がルートドメインで、example.co.jp上に複数のホストがある状態)を、安全にCloudflareへ移行するための手順をまとめたものです。

本ブログは、Cloudflareのドキュメントを参考に、移行を想定したものになり、案件ごとに細かな手順は変わってきます。

移行フェーズ毎のDNSトラフィックフローを最後の章に参考として記載しています。

1.1 移行方式

安全性を第一優先として、以下の段階的アプローチを採用します:

  1. Partial Setup(CNAME方式)で段階的に検証
  2. ルートドメイン単位で、検証完了後に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の事前発行する。
引用: "If your domain is sensitive to downtime, instead of using Universal SSL, consider using an advanced certificate with delegated DCV."
出典: 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 の仕組み

引用: "A partial (CNAME) setup allows you to use Cloudflare's reverse proxy while maintaining your primary and authoritative DNS provider."
出典: 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 ロールバック手順

・ロールバック方法: A社 DNS側でCNAMEを元のedgekey.netに戻すだけ
・復旧時間: 即時(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で移行することになる。

RFC1912

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時間
切り戻しを考慮してレジストラ側でNSのTTLを変更(短く)できるか確認しておく

ロールバック判断基準:
・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. 参考情報


# 各フェーズのDNS名前解決フロー

移行前: A社 環境での名前解決

 
1 User DNS Resolver
「www.example.co.jp の IP アドレスを教えて」
2 DNS Resolver A社 DNS(権威サーバー)
「www.example.co.jp のレコードは?」
3 A社 DNS ← 応答
www.example.co.jp. IN CNAME www.example.co.jp.edgekey.net.
4 DNS Resolver A社 Edge DNS
「www.example.co.jp.edgekey.net の IP は?」
5 A社 Edge DNS ← 応答
www.example.co.jp.edgekey.net. IN A 203.0.113.10 (A社 Edge IP)
6 DNS Resolver User
「IPアドレスは 203.0.113.10 です」
7 User A社 Edge (203.0.113.10)
HTTPS リクエスト送信
8 A社 Edge
WAF検査 → CDNキャッシュ確認 → キャッシュミス時はOriginへ
9 A社 Edge Origin Server (192.0.2.100)
オリジンへリクエスト転送
10 Origin Server A社 Edge
レスポンス返却
11 A社 Edge User
レスポンス返却
Phase 2-3: Partial Setup での名前解決

1 User DNS Resolver
「www.example.co.jp の IP アドレスを教えて」
2 DNS Resolver A社 DNS(権威サーバー)
「www.example.co.jp のレコードは?」
※ 権威DNSはまだ A社 
3 A社 DNS ← 応答
www.example.co.jp. IN CNAME www.example.co.jp.cdn.cloudflare.net.
※ CNAME先が Cloudflare に変更されている
4 DNS Resolver Cloudflare DNS
「www.example.co.jp.cdn.cloudflare.net の IP は?」
5 Cloudflare DNS ← 応答
www.example.co.jp.cdn.cloudflare.net. IN A 104.26.10.100 (Cloudflare Edge IP)
6 DNS Resolver User
「IPアドレスは 104.26.10.100 です」
7 User Cloudflare Edge (104.26.10.100)
HTTPS リクエスト送信
8 Cloudflare Edge
WAF検査 → CDNキャッシュ確認 → キャッシュミス時はOriginへ
9 Cloudflare Edge Origin Server (192.0.2.100)
オリジンへリクエスト転送
10 Origin Server Cloudflare Edge
レスポンス返却
11 Cloudflare Edge User
レスポンス返却
Phase 4: Full Setup での名前解決



1 User DNS Resolver
「www.example.co.jp の IP アドレスを教えて」
2 DNS Resolver Cloudflare DNS(権威サーバー)
「www.example.co.jp のレコードは?」
※ 権威DNSが Cloudflare に移管済み
3 Cloudflare DNS ← 応答
www.example.co.jp. IN A 104.26.10.100 (Cloudflare Edge IP)

※ Dashboard上は「A 192.0.2.100 (Proxy: ON)」と設定
※ 実際の応答は Cloudflare Edge IP が返される
4 DNS Resolver User
「IPアドレスは 104.26.10.100 です」
※ CNAME解決が不要になり、1ステップ短縮
5 User Cloudflare Edge (104.26.10.100)
HTTPS リクエスト送信
6 Cloudflare Edge
WAF検査 → CDNキャッシュ確認 → キャッシュミス時はOriginへ
※ WAF/Cache設定は Phase 2-3 から引き継がれる
7 Cloudflare Edge Origin Server (192.0.2.100)
オリジンへリクエスト転送
8 Origin Server Cloudflare Edge
レスポンス返却
9 Cloudflare Edge User
レスポンス返却