##はじめに
この文書では Cloudflare の SSL for SaaS について、Cloudflare Developers 設定ガイドの補足を記します。
https://developers.cloudflare.com/ssl/ssl-for-saas
##Cloudflare SSL for SaaS とは
SaaS プロバイダが顧客のホスト名で HTTPS を提供することを可能にします。
その際に、顧客のホスト(サイト)に対して下記のようなことを代行し、価値を向上します。
- ドメインの数を問わず、カスタムホストの TLS・HTTP Proxy の管理を動的に実施し、管理工数を削減
- 単にカスタムホストを提供するだけでなく、より高いセキュリティ(DDoS防御やWAF、Bot管理)やパフォーマンス(CDN や通信最適化、HTTP/2 などの新しいプロトコルへの対応)を提供する
- 顧客のドメインへの信頼性を高め、SEO ランキングの向上に貢献する
###本文書で使う用語の定義
本文書で使う言葉を定義しておきます。
- カスタムホスト (Custom Hostname):顧客のホスト名
- SaaS ドメイン:SaaS プロバイダの所有する Cloudflare 上のドメイン名
- Full セットアップ:SaaS ドメインの権威 DNS サーバを Cloudflare で稼働
- CNAME セットアップ:SaaS ドメインの権威サーバは外部にあり、Cloudflare DNS を CNAME 先として利用
###設計時点で決めておくこと
実際の設定に入る前に、下記を決めます。
項目 | 内容(例) | 説明 |
---|---|---|
SaaS ドメイン | saas.test | SaaS プロバイダの基盤ドメイン |
Cloudflare DNS セットアップ | Full か CNAME | Full は Cloudflare が権威サーバ、CNAME (Partial) は外部の権威サーバから CNAME で Cloudflare に向ける |
カスタムホスト | www.shop.test |
顧客のホスト名 (shop.test のような APEX にも対応可能。後述) |
カスタムホスト 証明書 | DigiCert または Let's Encrypt または 持ち込み |
|
カスタムホスト ホスト名検証方式 | DNS (TXT)、HTTP、あるいは DNS を実際に正当な値で切り替え | 当該ホスト名を管理できているか確認 |
カスタムホスト 証明書検証方式 | DigiCert か Let's Encrypt で異なる | 当該ホスト名を管理できているか確認 |
フォールバックオリジン (Fallback Origin) | origin.saas.test | カスタムホストで受けたリクエストを転送する先 (SaaS ドメイン内で指定) |
フォールバックオリジンの転送先 | lb.origin.test (または10.0.0.1) | オリジンサーバの名前 (または IPv4,v6 アドレス) |
##Cloudflare DNS のセットアップ
https://developers.cloudflare.com/ssl/ssl-for-saas/getting-started
Cloudflareに配置する SaaS ドメインを Full セットアップにするか CNAME セットアップにするかで DNS クエリの流れが変わります。
最終的にカスタムホスト名www.shop.test
に対して Cloudflare の IP アドレス
を返すという目的はどちらも同じです。
APEXにも対応可能です。Cloudflare の 固定(Static)IP オプションを利用することもできます。
3. APEX対応
##カスタムホストを管理できる正当な人が設定しようとしているか、の確認
外部のホストを Cloudflare 上でサービスすることを許可するため、正当な人がカスタムホストを登録しようとしているか、を確認します。
当該ドメインのリソース(HTTP, DNS)に書き込み権限があるかを証跡とします。
- カスタムホスト名の有効化 (Hostname Verification)
DNS で TXT レコードを設定し、事前に有効化するのが楽なので、そちらの例を記します。
https://developers.cloudflare.com/ssl/ssl-for-saas/common-tasks/hostname-verification
カスタムホスト名を追加すると、当該ホストに対して
_cf-custom-hostname.<カスタムホスト名>. TXT "確認用文字列"
が発行されるので、それを顧客権威 DNS サーバに設定します
- カスタムホスト名に対する証明書の有効化 (Certificate Validation)
証明書の認証局によって検証の方式が変わります
https://developers.cloudflare.com/ssl/ssl-for-saas/common-tasks/certificate-validation-methods
認証局 | 方式 | 備考 |
---|---|---|
DigiCert | DNS (TXT), DNS (CNAME), HTTP, Email | DNS (CNAME) は GUI では指定できず API で指定。ワイルドカード指定時は HTTP 検証は選択不可 |
Let's Encrypt | DNS (TXT), HTTP | ワイルドカード指定時は HTTP 検証は選択不可 |
方式の違いによるメリット・デメリットしては、DNS を切り替え前に証明書をActiveにできるか、手間の多い少ない、あたりになります。
方式 | 内容 | メリット | デメリット |
---|---|---|---|
HTTP | 稼働中のWebサーバで認証トークン配置用のパスを公開 | ダウンタイムが許容されるときには楽 (Cloudflare側はHTTP自動対応のため、DNSの切り替えのあとに自動で検証が終わる) | ダウンタイムが許容されない場合、ユーザにより事前に既存 Web サーバでの公開作業が必要 |
DNS | 権威 DNS サーバに指定のリソースレコードを追加 | DNS 切り替え前に証明書の有効化が行える。カスタムホスト名の有効化と同様 DNS で行える。 | 権威 DNS サーバの作業が必要 |
###DNS リソースレコードのタイプの選択について
DigiCert の証明書を選択する場合、カスタムホストが CNAME 設定してある場合には注意が必要です。
認証局 | タイプ | ドメイン名 | 値 | 備考 |
---|---|---|---|---|
DigiCert | TXT | <カスタムホスト名> | <文字列> | カスタムホストが権威サーバ上で CNAME で設定されていると、重複のため追加することができない(あるいはその CNAME を消すか) |
DigiCert | CNAME | <文字列.カスタムホスト名> | dcv.digicert.com | カスタムホストが権威サーバ上で CNAME 指定で、重複を避けるときはこちらを使う |
Let's Encrypt | TXT | _acme_challenge.<カスタムホスト名> | <文字列> | 既存が CNAME でも関係なく利用可能 |
####CNAME での検証に切り替える API の例
curl --request PATCH "https://api.cloudflare.com/client/v4/zones/$ZONEID/custom_hostnames/$HOSTID" \
--header "X-Auth-Email: $EMAIL" \
--header "X-Auth-Key: $APIKEY" \
--header 'Content-Type: application/json' \
--data-raw '{
"ssl": {
"type": "dv",
"method": "cname"
}
}'
##Cloudflare Developers の補足
###フォールバックオリジンの設定例
https://developers.cloudflare.com/ssl/ssl-for-saas/getting-started#step-1--create-fallback-origin-and-cname-target
フォールバックオリジンの他にワイルドカードの CNAME を一つ追加してあります。
各カスタムホストの権威 DNS サーバで共通の Fallback origin を利用する代わりに、カスタムホストごとに個別の指定して、少しでもわかりやすくするようにという意図だと思います。
↓
###カスタムオリジン
フォールバックオリジン以外に、カスタムホストごとに転送先を変更する機能になります。
注意点としては、カスタムオリジンを設定した際は SNI がカスタムオリジンの値になることです。カスタムホスト名で維持したい場合は、Cloudflare のアカウントチームに依頼する必要があります (SNI rewrite)。
https://developers.cloudflare.com/ssl/ssl-for-saas/hostname-specific-behavior/custom-origin
###Analytics
トラフィック分析の画面では、カスタムホスト名ごとのトラフィック利用状況を可視化・分析します。
各顧客ごとの把握が簡単にでき、課金などの情報源として利用することが可能です。
また、GUI だけでなく、GraphQL によって同様の情報取得も可能で、活用の範囲が広がります。
https://blog.cloudflare.com/introducing-custom-hostname-analytics/
###よりスケールさせるために (Custom Metadata)
SSL for SaaS では数千〜数万のカスタムホストを受け入れることもあります。
その際に Page Rules での制御が上限に達することがあります。その場合、Cloudflare Workers との連携機能を利用することで、効率よく制御することが可能になります。
https://developers.cloudflare.com/ssl/ssl-for-saas/hostname-specific-behavior/custom-metadata
###プランの概要
今回の説明はほぼ Enterprise プランでの内容になります。
Free/Pro/Business の場合は機能が制限されています。
https://developers.cloudflare.com/ssl/ssl-for-saas/plans
##まとめ
Cloudflare SSL for SaaS では上記の DNS や TLS、HTTP Proxy の他にセキュリティ機能(DDoS防御、Firewall Rules、WAF、Bot Managementなど)やパフォーマンス機能(Cache、Image Resizing、Argo Smart Routingなど)のメリットも合わせて提供が可能です。
SaaS 基盤としての充実のため、検討されてはいかがでしょうか。
##リンク
https://developers.cloudflare.com/ssl/ssl-for-saas
https://blog.cloudflare.com/introducing-ssl-for-saas/
https://blog.cloudflare.com/cloudflare-for-saas-for-all-now-generally-available/
https://blog.cloudflare.com/cloudflare-for-saas/
https://blog.cloudflare.com/whats-new-with-cloudflare-for-saas/
https://blog.cloudflare.com/introducing-custom-hostname-analytics/
https://www.cloudflare.com/en-gb/saas/