Cloudflare Access では、独自の条件でユーザーを評価する Allow または Block ポリシーを作成できます。ポリシーに External Evaluation ルールを追加します。External Evaluation セレクターには、次の 2 つの値が必要です。
- Evaluate URL — ビジネスロジックを置く API エンドポイントです。
- Keys URL — 応答が自分の API から来たことを Access が検証するために使う鍵です。
ユーザーがアイデンティティプロバイダーで認証したあと、Access はユーザーの ID を Evaluate URL の外部 API へ送ります。外部 API は Access に True または False を返し、Access はそれに基づいてアクセスを許可または拒否します。中間者攻撃を防ぐため、Access はすべてのリクエストに Access アカウント鍵で署名し、応答が Keys URL の鍵で署名されていることを確認します。
External Evaluation ルールは任意の API サービスで設定できます。すぐに始める場合は Cloudflare Workers を推奨します。
- Workers アカウント
- npm ↗ のインストール
- Node.js ↗ のインストール
- Access で保護しているアプリケーション
-
ターミナルを開き、サンプルプロジェクトをクローンします。
npm create cloudflare@latest my-worker -- --template https://github.com/cloudflare/workers-access-external-auth-example -
プロジェクトディレクトリに移動します。
cd my-worker -
鍵を保存する Workers KV namespace を作成します。サンプルをそのまま動かす場合、バインディング名は
KVにしてください。npx wrangler kv namespace create "KV"コマンドはバインディング名と KV namespace ID を出力します。例:
[[kv_namespaces]] binding = "KV" id = "YOUR_KV_NAMESPACE_ID" -
エディターで Wrangler 設定ファイル を開き、次を挿入します。
[[kv_namespaces]]: 前の手順で出力された内容を追加します。<TEAM_NAME>: Cloudflare One の チーム名 です。
{
"$schema": "./node_modules/wrangler/config-schema.json",
"name": "my-worker",
"workers_dev": true,
// Set this to today's date
"compatibility_date": "2026-09-20",
"main": "index.js",
"kv_namespaces": [
{
"binding": "KV",
"id": "YOUR_KV_NAMESPACE_ID"
}
],
"vars": {
"TEAM_DOMAIN": "<TEAM_NAME>.cloudflareaccess.com",
"DEBUG": false
}
}"$schema" = "./node_modules/wrangler/config-schema.json"
name = "my-worker"
workers_dev = true
# Set this to today's date
compatibility_date = "2026-09-20"
main = "index.js"
[[kv_namespaces]]
binding = "KV"
id = "YOUR_KV_NAMESPACE_ID"
[vars]
TEAM_DOMAIN = "<TEAM_NAME>.cloudflareaccess.com"
DEBUG = falseindex.jsを開き、Access が送る ID ベースのデータを処理するようにexternalEvaluation関数を変更します。
-
Worker を Cloudflare のグローバルネットワークにデプロイします。
npx wrangler deploy
Worker は *.workers.dev サブドメインの my-worker.<YOUR_SUBDOMAIN>.workers.dev にデプロイされます。
RSA の秘密鍵 / 公開鍵ペアを生成する手順は次のとおりです。
-
ブラウザーで
https://my-worker.<YOUR_SUBDOMAIN>.workers.dev/keysを開きます。 -
(任意)鍵が
KVnamespace に保存されていることを確認します。- Cloudflare ダッシュボードで Workers KV ページを開きます。 Workers KV を開く ↗
my-worker-KVの横にある View を選びます。
DSA など、ほかの鍵形式は現時点ではサポートされていません。
-
Cloudflare ダッシュボード ↗ で、Zero Trust > Access controls > Policies を開きます。
-
既存のポリシーを編集するか、Add a policy を選びます。
-
ポリシーに次のルールを追加します。
| ルールの種類 | Selector | Evaluate URL | Keys URL |
|---|---|---|---|
| Include | External Evaluation | https://my-worker.<YOUR_SUBDOMAIN>.workers.dev/ |
https://my-worker.<YOUR_SUBDOMAIN>.workers.dev/keys/ |
-
ポリシーを保存します。
-
Access controls > Applications を開き、External Evaluation ルールを適用するアプリケーションを編集します。
-
Policies タブで、External Evaluation ルールを含むポリシーを追加します。
-
Save を選びます。
ユーザーがアプリケーションにログインすると、Access はメール、デバイス、所在地などの ID ベースのデータを、ビジネスロジックと照合します。
External Evaluation ルールをデバッグする手順は次のとおりです。
-
Worker のディレクトリに移動します。
cd my-worker -
エディターで Wrangler 設定ファイル を開き、
debug変数をTRUEに設定します。 -
変更をデプロイします。
npx wrangler deploy -
続いて、Worker のリアルタイムログを出力するセッションを開始します。
wrangler tail -f pretty -
Access アプリケーションにログインします。
セッションログには、受信 JWT と送信 JWT が表示されます。受信 JWT は Access から Worker API へ送られたもので、送信 JWT は Worker から Access へ返したものです。
-
JWT の内容をデコードするには、トークンを jwt.io ↗ に貼り付けます。
受信 JWT にはユーザーの ID データが含まれます。送信 JWT は次のような形になります。
{ "success": true, "iat": 1655409315, "exp": 1655409375, "nonce": "9J2E9Xg6wYj8tlnA5MV4Zgp6t8rzmS0Q" }Access は送信 JWT に対して、次の条件をすべて確認します。
- トークンが Keys URL で署名されていること。
- 有効期限を過ぎていないこと。
- API が
"success": trueを返すこと。 nonceが受信 JWT から変わっていないこと。nonceの値はリクエストごとに一意です。
いずれかの条件を満たさない場合、External Evaluation ルールは false と評価されます。