Cloudflare Zero Trust Access と Vercel でお手軽ステージング環境
はじめに
Vercel 上にデプロイしている Next.js アプリケーションのステージング環境を Cloudflare Zero Trust でお手軽に作る方法をご紹介します。
前提
- チーム開発
- Vercel は Hobby プラン
- Cloudflare の DNS を用いてドメインを管理している
ドメインの割り当て
まずは、Vercel のプレビュー環境に対してドメインを割り当てます。
通常、プレビュー環境には Vercel Authentication がかかっているため、メンバー以外のアクセスはできませんが、ドメインを割り当てることで誰でもアクセス可能になります。
ドメインの追加
Vercel のプロジェクト設定 > Domains からプレビューのアクセスに使用するドメインの追加をします。

Git Branch の変更
追加したドメインのEdit から Git Branch を適切に設定し、宛先がプレビュー環境の URL になるように設定します。

Cloudflare の DNS 設定
Vercel にドメインを追加した際に表示される DNS 設定を Cloudflare に追加します。
この際、Proxy を有効にしてください。


SSL/TLS 設定
Cloudflare の SSL/TLS 設定で SSL をフルに設定します。

Vercel の Domains から確認
Vercel のプロジェクト設定 > Domains から追加したドメインが表示されていることを確認します。
下記のマークが表示されたら正常です。

Cloudflare Zero Trust の設定
このままだと、プレビュー環境に誰でもアクセスできてしまいます。
Cloudflare Zero Trust の Access を使用することで、特定のユーザーのみアクセスできるように設定します。
認証方法の設定
Settings > Authentication から Login methods を設定します。
認証方法はなんでも良いですが、GitHub Organization 等がある場合は GitHub を使用すると便利です。

アプリケーションの追加
Access > Applications からアプリケーションの追加をします。
Application Type は Self-hosted を選択してください。
Policy は Allow を選択し、適切な Include ルールを設定します。
Email や GitHub Organization などを設定するのが良いと思います。
アプリケーションの追加(その2)
このままだと、Vercel 側で証明書発行に使用する URL までブロックされてしまうため、Vercel の証明書発行に使用する URL を許可するために、アプリケーションをもう一つ追加します。
サブドメイン・ドメインは先ほどと同様に設定した上で、 Path に /.well-known/acme-challenge/ を設定します。

Policy は Bypass を選択し、Include は Everyone を選択します。
確認
設定が済むと下記のようになっているはずです。

アクセス制限の確認
これで、Vercel のプレビュー環境にアクセスできるユーザーは Cloudflare Zero Trust の設定したユーザーのみになります。
実際にアクセスしてみて、設定したユーザー以外はアクセスできないことを確認してください。
おわりに
Vercel のプレビュー環境に Cloudflare Zero Trust を使用することで、Hobby プランでも簡単にステージング環境を作ることができました。
Discussion