6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CloudflareAdvent Calendar 2021

Day 21

Cloudflare SSL for SaaS 設定ガイドを少し具体的に補足

Last updated at Posted at 2021-12-20

##はじめに
この文書では 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 または 持ち込み ワイルドカードの証明書を発行したい場合は、DigiCertの一択。 カスタムホスト用のTLS証明書。持込の場合は証明書更新はユーザで実施
カスタムホスト ホスト名検証方式 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 アドレス を返すという目的はどちらも同じです。

  1. SaaS ドメインが Full セットアップ の場合
    Screen Shot 2021-12-20 at 22.56.39.png

  2. SaaS ドメインが CNAME セットアップ の場合
    Screen Shot 2021-12-20 at 23.02.22.png

APEXにも対応可能です。Cloudflare の 固定(Static)IP オプションを利用することもできます。
3. APEX対応
Screen Shot 2021-12-20 at 23.14.16.png

1,2 いずれの場合でも HTTPS の流れは同じです。
Screen Shot 2021-12-20 at 23.25.18.png

##カスタムホストを管理できる正当な人が設定しようとしているか、の確認

外部のホストを Cloudflare 上でサービスすることを許可するため、正当な人がカスタムホストを登録しようとしているか、を確認します。
当該ドメインのリソース(HTTP, DNS)に書き込み権限があるかを証跡とします。

  1. カスタムホスト名の有効化 (Hostname Verification)

DNS で TXT レコードを設定し、事前に有効化するのが楽なので、そちらの例を記します。
https://developers.cloudflare.com/ssl/ssl-for-saas/common-tasks/hostname-verification

カスタムホスト名を追加すると、当該ホストに対して

_cf-custom-hostname.<カスタムホスト名>. TXT "確認用文字列" 

が発行されるので、それを顧客権威 DNS サーバに設定します

  1. カスタムホスト名に対する証明書の有効化 (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 を一つ追加してあります。
Screen Shot 2021-12-21 at 0.33.10.png

各カスタムホストの権威 DNS サーバで共通の Fallback origin を利用する代わりに、カスタムホストごとに個別の指定して、少しでもわかりやすくするようにという意図だと思います。
Screen Shot 2021-12-21 at 0.42.58.png

Screen Shot 2021-12-21 at 0.44.40.png

DNS クエリの例
Screen Shot 2021-12-21 at 0.39.41.png

###カスタムオリジン
フォールバックオリジン以外に、カスタムホストごとに転送先を変更する機能になります。
注意点としては、カスタムオリジンを設定した際は SNI がカスタムオリジンの値になることです。カスタムホスト名で維持したい場合は、Cloudflare のアカウントチームに依頼する必要があります (SNI rewrite)。
https://developers.cloudflare.com/ssl/ssl-for-saas/hostname-specific-behavior/custom-origin
Screen Shot 2021-12-21 at 0.52.35.png

###Analytics
トラフィック分析の画面では、カスタムホスト名ごとのトラフィック利用状況を可視化・分析します。
各顧客ごとの把握が簡単にでき、課金などの情報源として利用することが可能です。
また、GUI だけでなく、GraphQL によって同様の情報取得も可能で、活用の範囲が広がります。
https://blog.cloudflare.com/introducing-custom-hostname-analytics/

Screen Shot 2021-12-21 at 1.00.31.png

###よりスケールさせるために (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

Screen Shot 2021-12-21 at 0.47.41.png

##まとめ
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/

6
4
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?