Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

External Evaluation ルール

最終更新 Markdown で表示Agent セットアップ

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 を推奨します。

Cloudflare Workers で外部 API と鍵を用意する

前提条件

1. 新しい Worker を作成する

  1. ターミナルを開き、サンプルプロジェクトをクローンします。

    npm create cloudflare@latest my-worker -- --template https://github.com/cloudflare/workers-access-external-auth-example
  2. プロジェクトディレクトリに移動します。

    cd my-worker
  3. 鍵を保存する Workers KV namespace を作成します。サンプルをそのまま動かす場合、バインディング名は KV にしてください。

    npx wrangler kv namespace create "KV"

    コマンドはバインディング名と KV namespace ID を出力します。例:

      [[kv_namespaces]]
       binding = "KV"
       id = "YOUR_KV_NAMESPACE_ID"
  4. エディターで 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 = false

2. ビジネスロジックを実装する

  1. index.js を開き、Access が送る ID ベースのデータを処理するように externalEvaluation 関数を変更します。
  1. Worker を Cloudflare のグローバルネットワークにデプロイします。

    npx wrangler deploy

Worker は *.workers.dev サブドメインの my-worker.<YOUR_SUBDOMAIN>.workers.dev にデプロイされます。

3. 鍵を生成する

RSA の秘密鍵 / 公開鍵ペアを生成する手順は次のとおりです。

  1. ブラウザーで https://my-worker.<YOUR_SUBDOMAIN>.workers.dev/keys を開きます。

  2. (任意)鍵が KV namespace に保存されていることを確認します。

    1. Cloudflare ダッシュボードで Workers KV ページを開きます。 Workers KV を開く ↗
    2. my-worker-KV の横にある View を選びます。

DSA など、ほかの鍵形式は現時点ではサポートされていません。

4. External Evaluation ルールを作成する

  1. Cloudflare ダッシュボード で、Zero Trust > Access controls > Policies を開きます。

  2. 既存のポリシーを編集するか、Add a policy を選びます。

  3. ポリシーに次のルールを追加します。

ルールの種類 Selector Evaluate URL Keys URL
Include External Evaluation https://my-worker.<YOUR_SUBDOMAIN>.workers.dev/ https://my-worker.<YOUR_SUBDOMAIN>.workers.dev/keys/
  1. ポリシーを保存します。

  2. Access controls > Applications を開き、External Evaluation ルールを適用するアプリケーションを編集します。

  3. Policies タブで、External Evaluation ルールを含むポリシーを追加します。

  4. Save を選びます。

ユーザーがアプリケーションにログインすると、Access はメール、デバイス、所在地などの ID ベースのデータを、ビジネスロジックと照合します。

Worker のトラブルシューティング

External Evaluation ルールをデバッグする手順は次のとおりです。

  1. Worker のディレクトリに移動します。

    cd my-worker
  2. エディターで Wrangler 設定ファイル を開き、debug 変数を TRUE に設定します。

  3. 変更をデプロイします。

    npx wrangler deploy
  4. 続いて、Worker のリアルタイムログを出力するセッションを開始します。

    wrangler tail -f pretty
  5. Access アプリケーションにログインします。

    セッションログには、受信 JWT と送信 JWT が表示されます。受信 JWT は Access から Worker API へ送られたもので、送信 JWT は Worker から Access へ返したものです。

  6. 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 と評価されます。

役に立ちましたか?