Cloudflare CDN のオリジンとして CloudFront を設定してみた

Amazon CloudFront の前段に Cloudflareを配置、エンドツーエンドで暗号化された CDN設定を試してみました
2023.03.24

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Amazon CloudFront で公開中のウェブ配信環境の前段に Cloudflareを配置、エンドツーエンドで暗号化された CDN環境を設定する機会がありましたので、紹介させていただきます。

構成

手順

ACM

CloudFrontで利用する証明書、バージニアリージョンの AWS Certificate Manager (ACM) で発行しました。

  • Cloudflare で 公開するFQDNに 一致する パブリック証明書を発行しました。

  • 検証方法はDNS検証
  • ACMで指定された CNAME レコード を Cloudflare 管理のDNSに反映しました

CloudFront

  • ACMで作成した 証明書を カスタム SSL 証明書として選択
  • 代替ドメイン名 (CNAME) として、Cloudflare で公開するFQDNを設定しました

Cloudflare

DNS設定

コンテンツ公開用のDNSレコードを追加しました。

  • Type: CNAME
  • Name : 公開ホスト名
  • Target : CloudFrontのディストリビューションドメイン名
  • Proxy status: Proxied

SSL/TLS

CloudFront は ACMで発行された証明書が利用できるのでフル (厳密) を指定、 エンドツーエンドの暗号化となる設定しました。

動作確認

Chrome を利用して Cloudflare の公開URLの動作確認を試みました。

レスポンスヘッダ

レスポンスヘッダ「server cloudflare」が追加されました。

通信先のリモートアドレス、Cloudflare のIPアドレスでした。

$ whois 2606:4700:4400::6812:229d
(略)
NetRange:       2606:4700:: - 2606:4700:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
CIDR:           2606:4700::/32
NetName:        CLOUDFLARENET
NetHandle:      NET6-2606-4700-1
Parent:         NET6-2600 (NET6-2600-1)
NetType:        Direct Allocation
OriginAS:       AS13335
Organization:   Cloudflare, Inc. (CLOUD14)
RegDate:        2011-11-01
Updated:        2017-02-17
Comment:        All Cloudflare abuse reporting can be done via https://www.cloudflare.com/abuse
Ref:            https://rdap.arin.net/registry/ip/2606:4700::

Cloudflare プロキシ無効化

CloudflareのDNSレコード設定でプロキシを無効化「DNSのみ」と設定する事で、通常のCNAMEレコードを戻す利用も可能です。

  • レスポンスヘッダーの「server」は Amazon S3が戻ります。

名前解決

「DNSのみ」で設定したCNAMEレコードは、CloudFrontのIPアドレスが戻ります。

  • DNSのみ
$ host host.example.com
host.example.com is an alias for xxxx.cloudfront.net.
xxxx.cloudfront.net has address 13.33.174.122
xxxx.cloudfront.net has address 13.33.174.8
xxxx.cloudfront.net has address 13.33.174.120
xxxx.cloudfront.net has address 13.33.174.124
xxxx.cloudfront.net has IPv6 address 2600:9000:20c4:fc00:f:e358:a300:93a1
xxxx.cloudfront.net has IPv6 address 2600:9000:20c4:9c00:f:e358:a300:93a1
xxxx.cloudfront.net has IPv6 address 2600:9000:20c4:1200:f:e358:a300:93a1
xxxx.cloudfront.net has IPv6 address 2600:9000:20c4:1c00:f:e358:a300:93a1
xxxx.cloudfront.net has IPv6 address 2600:9000:20c4:400:f:e358:a300:93a1
xxxx.cloudfront.net has IPv6 address 2600:9000:20c4:c600:f:e358:a300:93a1
xxxx.cloudfront.net has IPv6 address 2600:9000:20c4:fa00:f:e358:a300:93a1
xxxx.cloudfront.net has IPv6 address 2600:9000:20c4:1e00:f:e358:a300:93a1

CNAMEレコードを「プロキシ済み」で設定すると、名前解決で Cloudflare の IPアドレスが戻りCDN機能も利用可能となります。

$ host host.example.com
host.example.com has address 172.67.222.189
host.example.com has address 104.21.94.112
host.example.com has IPv6 address 2606:4700:3037::ac43:debd
host.example.com has IPv6 address 2606:4700:3036::6815:5e70

ホストヘッダのオーバーライド

Cloudflareの ページルール (Cloudflare Pages Rule) で「ホストヘッダーオーバーライド」を設定、 CloudFrontのディストリビューションドメイン名をホストヘッダーに書き換える事で、CloudFront側の代替ドメイン名 (CNAME) 設定を省略する事も可能です。

ただし「ホストヘッダーオーバーライド」の利用には、Cloudflareのエンタープライズライセンスを必要とする点にご注意ください。

まとめ

ホストヘッダーの扱いなどに注意が必要でしたが、CloudflareのオリジンとしてCloudFrontを利用する事が出来ました。

Cloudflareで配信するオリジンとしてS3を利用する際、エンドツーエンドの暗号化を特に必須としない場合には、 よりシンプルに使えるS3 静的ウェブサイトの利用もご検討ください。