ネットワーク · ゼロトラスト

Cloudflare Access 設定編 — IdP連携とWARPで退職者管理・VPN置換を実現する

前編「Cloudflare Tunnel 入門」では、トンネルを張って Public Hostname でサービスを公開し、Access の「社内メールドメインだけ許可」で認証画面を出すまでを1時間以内に完成させた。しかし本番で回そうとするとすぐに壁に当たる——「退職者のアカウントをどう止めるか」「VPNみたいに社内ファイルサーバーまで届くか」「ゲストに一時的に通したいがメールドメイン単位では無理だ」。前編の Step 4 はここを扱っていない。続編の設定編では IdP(SSO)連携でドメイン認証を卒業し、プライベートネットワークアクセス(WARP)でVPN代替インフラを整える。

この記事の検証環境
cloudflared
2026.6.0
Cloudflareプラン
Zero Trust Free(50ユーザー)
IdP
Google Workspace / Microsoft Entra ID
WARPクライアント
Windows / macOS
難易度
★★★ IdP管理者権限・WARP配布まで触る
IdP 連携・Private Network Access・WARP はすべて Zero Trust Free で利用可能(2026年7月時点)。

前編のおさらいと今回の範囲

まず前編がカバーした範囲と、続編(設定編・運用編)がカバーする範囲を整理しておく。

フェーズ内容どこで扱うか
トンネル作成cloudflared インストール・トンネル生成・systemd 登録前編 Step 1–3
Public Hostname 公開URL でサービスを外部公開前編 Step 1–3
Access 有効化(メールドメイン)「Email ends in @yourcompany.com」の Allow 1本前編 Step 4
IdP SSO 連携Google Workspace / Entra ID と接続してグループ管理設定編 Step 1(本記事)
Private Network AccessWARP 経由で社内 CIDR にアクセス、VPN 代替設定編 Step 2(本記事)
ポリシー設計部署別・ゲスト・Service Token の型化運用編 Step 3
監査ログ・アラートアクセス記録の確認と異常検知運用編 Step 4

🐝 前提条件 この記事は前編の設定が完了していることを前提とする。まだの場合は先にCloudflare Tunnel 入門を読んでほしい。


なぜ「Access の本番運用」が必要か

前編の「メールドメイン許可」で立ち止まる3つの壁

前編の Step 4 で設定した「Email ends in @yourcompany.com」は手軽だが、本番運用では3つの限界にぶつかる。

① 退職者管理 — アカウントが残り続ける

メールドメインは組織名 @yourcompany.com 単位でのチェックなので、退職者のアカウントが存続していれば引き続き認証を通過できる。退職処理のたびに Cloudflare のポリシーを手動で書き換えるのは現実的でない。

② ゲスト一時利用 — ドメイン外は通せない

外部の業者・パートナーに一時的に社内システムを見せたいとき、メールドメイン許可では @yourcompany.com 以外のアドレスを通せない。個別のゲストアドレスを許可する柔軟なポリシーが必要だ(運用編の Step 3 で扱う)。

③ HTTP 以外のプロトコルが届かない

前編の Public Hostname はブラウザで URL を叩くアクセスに向いている。しかし RDP・SSH・ファイルサーバー(SMB)・社内 DNS に依存した非公開ホスト名へのアクセスは URL 経由では届かない。WARP クライアントによるプライベートネットワークアクセスが必要だ。

VPN vs Zero Trust Access — 運用観点の比較

観点従来 VPN(WireGuard 等)Zero Trust Access(Cloudflare)
クライアントVPN アプリのインストール必要WARP クライアント(軽量・無料)
退職者無効化VPN アカウント削除・証明書失効を手動IdP 側でアカウント無効化 → 即時全アプリ締め出し
端末管理証明書配布・鍵管理が必要デバイスポスチャー(運用編で詳説)
監査ログVPN ログのみ(どのサービスに触ったかは別途)アプリ単位でアクセスログが自動収集
外部ゲスト利用難しい(ゲスト証明書の発行が必要)メールアドレス単位・有効期限付きで許可可能
退職者対応の確実性❌ 証明書失効を忘れると穴が残る✅ IdP 無効化で即座に全アプリ締め出し
コスト(50人規模)¥0〜(自前構築)¥0(Zero Trust Free)

最大の違いは退職者対応の確実性だ。VPN では「証明書の失効忘れ」という人的ミスが起きやすい。Cloudflare Access + IdP 連携では、IdP 側でアカウントを無効化した瞬間にアクセス不能になる——この1点だけで本番移行する価値がある。


仕組みを理解する — Public Hostname と Private Network の違い

前編の Public Hostname と今回の Private Network Access は通信フローがまったく異なる。この違いを押さえてから Step に進もう。

前編(Public Hostname)の通信フロー

🌐Public Hostname モード(前編)
👤 ユーザー
ブラウザ
Cloudflare エッジ
Access 認証
cloudflared
アウトバウンド
社内サービス
Dify / n8n 等

ユーザーは URL を叩くだけでよい。端末への追加インストール不要。ただし HTTP/HTTPS アプリ限定。

Private Network Access(WARP)の通信フロー

🔒Private Network モード(今回)
💻 WARP 端末
社員の PC
Cloudflare エッジ
IdP 認証済みセッション
cloudflared
Private Network ルート
社内 CIDR
RDP / SSH / SMB 等

端末に WARP クライアントが必要。IdP 認証を通過した端末だけが社内 CIDR への通信を透過できる。HTTP 以外のプロトコルもすべて対象。

どちらを使うべきか

アクセス方法向いているケース向いていないケース
Public Hostname
前編の方式
ブラウザで使う社内向け Web アプリ(Dify・n8n・社内 Wiki)RDP・SSH・ファイルサーバー・内部ホスト名が必要なアプリ
Private Network + WARP
今回の方式
RDP・SSH・SMB ファイルサーバー・社内 DNS 依存アプリ・端末は会社管理スマートフォンやゲスト端末(WARP インストールが前提のため)

🐝 基本の使い分け Web アプリは Public Hostname + Access、それ以外(RDP・SSH・ファイルサーバー)は Private Network + WARP。この2パターンで多くの中小情シスは VPN 不要になる。


準備するもの

  • 前編が完了していること — cloudflared が稼働し、Public Hostname で最低1つのサービスが公開済み。まだの場合はCloudflare Tunnel 入門を先に済ませてほしい。
  • IdP の管理者権限Google Workspace(Google Cloud Console で OAuth クライアントを作成できる権限)または Microsoft Entra ID(Azure Portal でアプリ登録できるグローバル管理者・アプリケーション管理者権限)。どちらか一方で構わない。
  • WARP クライアントを配布する端末(Step 2 から必要):Windows 10/11 または macOS。iOS・Android も対応するが本記事では Windows・macOS の手順を示す。
  • 社内ネットワークの CIDR:例 192.168.1.0/24。Private Network ルートの設定で使う。

✅ 無料プランで全項目対応できる IdP 連携・Private Network Access・WARP クライアントはすべて Zero Trust Free(50ユーザー)で使える。追加コストは発生しない。


Step 1 — IdP(SSO)を連携して退職者管理を自動化する

前編の「Email ends in @yourcompany.com」を捨て、IdP のグループとアカウント状態に認証を紐付ける。退職者の IdP アカウントを無効化すれば、Cloudflare 上の全アプリが即座に締め出される。

① Google Workspace を連携する

Google Cloud Console で OAuth クライアントを作成してから Cloudflare に登録する。

Google Cloud Console 側の作業

  1. Google Cloud Console を開き、既存のプロジェクトを選択(または新規作成)する
  2. 左メニュー → API とサービス → 認証情報 → 認証情報を作成 → OAuth 2.0 クライアント ID
  3. アプリケーションの種類:ウェブアプリケーション、名前は任意(例: Cloudflare Access
  4. 承認済みのリダイレクト URI に以下を追加する
https://<your-team-name>.cloudflareaccess.com/cdn-cgi/access/callback
  1. 作成後、クライアント IDクライアントシークレット をメモする

🐝 チーム名の確認場所 one.dash.cloudflare.com → Settings → General → Team name。yourorg.cloudflareaccess.comyourorg 部分がチーム名。コールバック URL 入力時はここからコピーする。

Cloudflare Zero Trust 側の作業

  1. Zero Trust ダッシュボード → Settings → Authentication → Login methods → Add new → Google Workspace
  2. 以下の値を入力して Save
設定項目
Name任意(例: Google Workspace
Client IDGoogle Cloud Console で取得したクライアント ID
Client SecretGoogle Cloud Console で取得したクライアントシークレット
Your App Domain組織のドメイン(例: yourcompany.com
  1. Test ボタンをクリックして Google の OAuth 画面が開き、ログイン成功すれば連携完了

② Microsoft Entra ID を連携する

Google Workspace と手順の流れは同じだが、Azure Portal でアプリ登録を行う点が異なる。

Azure Portal 側の作業

  1. Azure PortalMicrosoft Entra ID → アプリの登録 → 新規登録
  2. 名前:任意(例: Cloudflare Access)、サポートされているアカウントの種類:この組織ディレクトリのみ(シングルテナント)
  3. リダイレクト URI:Web を選択し、https://<your-team-name>.cloudflareaccess.com/cdn-cgi/access/callback を入力
  4. 登録後、概要画面から アプリケーション(クライアント)IDディレクトリ(テナント)ID をメモする
  5. 証明書とシークレット → 新しいクライアントシークレット → 追加。表示された (シークレット文字列)をすぐにコピーする(画面を離れると再表示できない)
  6. API のアクセス許可 → アクセス許可の追加 → Microsoft Graph → 委任されたアクセス許可 から以下を追加し、〇〇に管理者の同意を与えます をクリックする:User.Reademailprofileopenidoffline_access

Cloudflare Zero Trust 側の作業(Google Workspace と同じ画面で Microsoft Azure AD を選択)

設定項目
Name任意(例: Entra ID
Client IDアプリケーション(クライアント)ID
Client Secret証明書とシークレットで作成した値
Directory IDディレクトリ(テナント)ID

🐝 Google と Entra ID のどちらを使うか どちらか組織で使っている方で構わない。日本の中小企業では Microsoft 365 経由で Entra ID が整備済みのケースが多いため、その場合は Entra ID を主軸にすることを推奨する。両方を登録してどちらでもログインできる構成も可能。

③ ポリシーを「グループ」ベースに切り替える

IdP を登録したら、前編で作成したアプリのポリシーを「メールドメイン」から「IdP グループ」に変更する。これが退職者自動締め出しの肝だ。

  1. Zero Trust → Access → Applications → 対象アプリ → Edit → Policies タブ
  2. 既存のポリシーを開き、Rule の Selector を Emails から Identity provider groups に変更する
  3. Value に IdP で同期されたグループを入力する(例: Google Workspace の 社員・Entra ID のセキュリティグループ名)
  4. Save policy
前編の設定(変更前)本番設定(変更後)
SelectorEmails ends inIdentity provider groups
Value@yourcompany.comEmployees(IdP のグループ名)
退職者の扱いドメインさえ合えば通過可能IdP でアカウント無効化 → 即時締め出し

✅ これで退職者管理が自動化される 以降は Google Workspace / Entra ID 側でアカウントを無効化するだけで全アプリのアクセスが遮断される。Cloudflare 側の追加操作は不要。


Step 2 — Private Network Access でVPNを置き換える

ここからが前編と最も大きく異なる章だ。WARP クライアントを端末に入れ、社内の IP アドレス帯(CIDR)への通信を Cloudflare Tunnel 経由で透過させる。RDP・SSH・ファイルサーバー(SMB)など HTTP 以外のプロトコルも全対応する。

① トンネルにプライベートネットワークルートを追加する

  1. Zero Trust → Networks → Tunnels → 対象のトンネル → Edit
  2. Private Network タブ → Add a private network
  3. CIDR を入力する(例: 192.168.1.0/24)→ Save tunnel

🐝 CIDR の範囲の決め方 まず特定のサーバーセグメントだけに絞った狭い範囲(例: 192.168.10.0/24)で動作確認し、問題なければ広げる。社内 LAN 全体(192.168.0.0/16 等)を一気に追加するのは確認後でよい。

② Gateway でローカルドメインフォールバックを設定する

社内のプライベートホスト名(例: fileserver.intraapp.corp.local)を WARP 端末から名前解決するには、内部 DNS サーバーへのフォールバックを設定する。

  1. Zero Trust → Settings → WARP Client → デバイスプロファイル → Default → Configure
  2. Split Tunnels & Local Domain Fallback → Manage → Local Domain Fallback → Add a domain
  3. ドメインサフィックス(例: intracorp.local)と社内 DNS サーバーの IP(例: 192.168.1.1)を入力 → Save

これで WARP 端末から fileserver.intra を引くと社内 DNS サーバーが応答し、CIDR ルートを経由してプライベートアドレスに届くようになる。

🐝 社内 DNS サーバーがない場合 ホスト名ではなく IP アドレス直打ちでのアクセス(例: \192.168.1.10\share)であれば DNS 設定は不要。DNS フォールバックはプライベートホスト名が必要な場合のみ設定する。

③ WARP クライアントを端末に配布する

まず Zero Trust 側でエンロールメントポリシーを設定し、どの端末が接続を許可されるかを定義する。

エンロールメントポリシーの設定

  1. Zero Trust → Settings → WARP Client → Device enrollment → Manage
  2. Add a rule → Selector: Emails ends in(または Identity provider groups)、Value: 自社ドメインまたは社員グループ → Save

クライアントのインストール(Windows)

  1. WARP クライアント(Windows)をダウンロードしてインストールする
  2. インストール後、タスクトレイの WARP アイコン → 右上の設定アイコン → Preferences → Account → Login with Cloudflare Zero Trust
  3. チーム名(例: yourorg)を入力 → IdP のログイン画面でサインイン
  4. ステータスが Connected になれば、社内 CIDR への通信が自動的にトンネル経由になる

コマンドラインでのエンロール(GPO/MDM 配布向け)

# Windows(PowerShell・管理者として実行)
warp-cli.exe teams-enroll yourorg
# macOS(ターミナル)
/Applications/Cloudflare\ WARP.app/Contents/Resources/warp-cli teams-enroll yourorg

🐝 MDM 配布のヒント Microsoft Intune や Jamf で全社展開する場合、WARP の MSI(Windows)・PKG(macOS)インストーラーをポリシーで配布し、teams-enroll コマンドをスクリプト実行するのが一般的。詳細は Cloudflare Docs: MDM deployment を参照。

④ アプリを Private hostname で保護する

WARP 経由でアクセスする内部サービス(URL は公開しないが、WARP 端末からは名前解決できる)に Access ポリシーを適用することで、「WARP 接続済み かつ IdP グループに属するユーザー」だけに絞り込める。

  1. Zero Trust → Access → Applications → Add an application → Self-hosted
  2. Application domain にプライベートホスト名を入力する(例: fileserver.intra
  3. ポリシーを設定する(例: IdP グループ Employees に Allow)→ Save

これで WARP 接続済みかつ IdP 認証済みの端末からのみアクセス可能になる。VPN 相当の透過アクセスに IdP 認証が加わった構成が完成した。

✅ Step 2 完了チェック WARP クライアントを接続した Windows / macOS 端末から、社内のプライベート IP(例: 192.168.1.10)への ping が通れば Private Network Access は正常に動作している。RDP・SSH・SMB(ファイルサーバー)もそのまま利用できるはずだ。


トラブルシュート

① IdP 連携後の「400 redirect_uri_mismatch」エラー

原因:Google Cloud Console または Azure Portal に登録したリダイレクト URI が Cloudflare のコールバック URL と完全に一致していない。末尾スラッシュの有無・大文字小文字の違いで不一致が起きやすい。

対処:Zero Trust → Settings → Authentication → 対象 IdP → Edit で表示される Callback URL をそのままコピーし、IdP 側の URI フィールドに貼り直す。手入力は禁物。

② WARP 接続済みなのにプライベートホストに届かない

原因A(IP で届かない):トンネルの Private Network に対象 CIDR が追加されていない。Networks → Tunnels → Private Network タブを確認する。

原因B(ホスト名で届かない):Local Domain Fallback が未設定、またはドメインサフィックスの入力ミス。Settings → WARP Client → Local Domain Fallback の設定を確認する。

切り分け手順:まずプライベート IP アドレス直打ち(例: ping 192.168.1.10)で疎通確認する。IP が通ればCIDR ルートは正常でありホスト名解決の問題に絞れる。


まとめ

Step 1 の IdP 連携で「退職者がドメイン認証をすり抜ける」問題が解決し、Step 2 の Private Network + WARP で「HTTP 以外の社内サービスも届く」VPN 相当の構成が完成した。

退職者管理が目的なら
Step 1 で完結

IdP 連携とグループベースポリシーだけで、退職者の即時締め出しと入社者の自動許可が実現する。WARP の配布は不要。前編からの差分は最小。

VPN 置換まで目指すなら
Step 1 + 2 で完結

WARP で RDP・SSH・ファイルサーバーまで届く。IdP 認証が乗るので、VPN 証明書管理より退職者対応が確実で運用コストが低い。

✅ 次のステップ インフラが整ったら、次は部署別アクセス制御・ゲスト一時許可・Service Token・監査ログを組み合わせて本番運用仕様に仕上げよう。続きは Cloudflare Access 運用編(近日公開)で扱う。それまではn8n × Dify 連携で Access で守った Dify を活用する構成も試してみてほしい。