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

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

Amazon CloudFront の前段に Cloudflareを配置、エンドツーエンドで暗号化された CDN設定を試してみました
Clock Icon2023.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 静的ウェブサイトの利用もご検討ください。

この記事をシェアする

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.