Skip to content

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

MCP サーバーからセルフホストアプリケーションへのアクセスを許可する

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

MCP サーバーは、認証済みユーザーの代わりに社内アプリケーションを呼び出すことがよくあります。たとえば、従業員が社内ツールを使うのを助ける MCP サーバーは、ユーザーの ID をダウンストリームサービス(MCP サーバーが接続する社内アプリケーション)に転送し、各リクエストが正しい権限で認可されるようにします。

Linked App Token ポリシーセレクターを使うと、あるアプリケーションの Access ポリシーで、別のアプリケーション向けに発行されたトークンを受け入れられます。MCP サーバーのデプロイ方法に応じて、次の 2 通りの設定があります。

セルフホスト MCP サーバー(推奨)

MCP サーバーが セルフホスト Access アプリケーション の場合、Cloudflare Access が認証を自動で処理します。MCP サーバーは Access からユーザーの JWT を Cf-Access-Jwt-Assertion ヘッダーで受け取り、ダウンストリームアプリケーションへは Cf-Access-Token ヘッダーで転送します。MCP サーバーのコードで OAuth を実装する必要はありません。

flowchart LR
accTitle: セルフホスト MCP サーバーから社内アプリケーションへのアクセス
    User[ユーザー] --> client["MCP クライアント"]
    client --> mcp["MCP サーバー <br> (セルフホストアプリ)"]
    mcp -- "Cf-Access-Token: &lt;JWT&gt;" --> app1["Internal API <br> (セルフホストアプリ)"]
    mcp -- "Cf-Access-Token: &lt;JWT&gt;" --> app2["Company wiki <br> (セルフホストアプリ)"]
    idp[ID プロバイダー] <--> mcp

前提条件

1. ダウンストリームアプリケーションを設定する

MCP サーバーがアクセスする各セルフホストアプリケーション(例: Internal APICompany wiki)で、Linked App Token ポリシーを作成します。

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

  2. ダウンストリームアプリケーション を選び、Edit を選びます。

  3. Policies タブを開き、Create new policy を選びます。

  4. ポリシーの ActionService Auth に設定します。

  5. SelectorLinked App Token を選びます。

  6. Value で MCP サーバーアプリケーション を選びます。例:

    アクション ルールタイプ セレクター
    Service Auth Include Linked App Token mcp-server-app
  7. ポリシーを保存します。

  8. ダウンストリームアプリケーション で、ポリシーを Access policies リストに追加します。

  9. アプリケーションを保存します。

  1. MCP サーバーアプリケーション の uid を取得します。

    Required API token permissions

    At least one of the following token permissions is required:
    • Access: Apps and Policies Revoke
    • Access: Apps and Policies Write
    • Access: Apps and Policies Read
    List Access applicationsbash
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/apps" \
    	--request GET \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
    {
    	"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    	"uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    	"type": "self_hosted",
    	"name": "mcp-server-app",
    	...
    }
  2. ダウンストリームアプリケーションに Access ポリシーを作成し、app_uid の値を MCP サーバーアプリケーション の uid に置き換えます。

    Required API token permissions

    At least one of the following token permissions is required:
    • Access: Apps and Policies Write
    Create an Access reusable policybash
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/policies" \
    	--request POST \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
    	--json '{
    		"name": "MCP サーバーからのリクエストを許可",
    		"decision": "non_identity",
    		"include": [
    				{
    						"linked_app_token": {
    								"app_uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
    						}
    				}
    		]
    	}'

2. MCP サーバーを設定する

MCP サーバーのコードで、受信リクエストの Cf-Access-Jwt-Assertion ヘッダーを、ダウンストリームアプリケーションへの送信リクエストの Cf-Access-Token ヘッダーとして転送します。

Cf-Access-Token: <JWT from Cf-Access-Jwt-Assertion>

Access は JWT を Linked App Token ルールに照合して検証し、ユーザーの ID をダウンストリームアプリケーションに伝播します。

SaaS MCP サーバー(Access for SaaS + OAuth)

MCP サーバーを Access for SaaS の OIDC アプリケーション として登録し、MCP OAuth を実装している場合、Cloudflare Access から OAuth の access_token を受け取ります。MCP サーバーは、このトークンをダウンストリームのセルフホストアプリケーションへ Authorization: Bearer ヘッダーで転送します。

この方法では、MCP サーバー側で OAuth の認可コードフローを実装する必要があります。認証を Cloudflare に任せたい場合は、セルフホスト MCP サーバー を使います。

flowchart LR
accTitle: SaaS MCP サーバーから社内アプリケーションへのアクセス
    User[ユーザー] --> client["MCP クライアント"]
    client --> mcp["MCP サーバー <br> (Access for SaaS アプリ)"]
    mcp -- "Authorization: Bearer &lt;token&gt;" --> app1["Internal API <br> (セルフホストアプリ)"]
    mcp -- "Authorization: Bearer &lt;token&gt;" --> app2["Company wiki <br> (セルフホストアプリ)"]
    idp[ID プロバイダー] <--> mcp

前提条件

1. ダウンストリームアプリケーションを設定する

MCP サーバーがアクセスする各セルフホストアプリケーション(例: Internal APICompany wiki)で、Linked App Token ポリシーを作成します。

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

  2. ダウンストリームアプリケーション を選び、Edit を選びます。

  3. Policies タブを開き、Create new policy を選びます。

  4. ポリシーの ActionService Auth に設定します。

  5. SelectorLinked App Token を選びます。

  6. Value で MCP サーバーアプリケーション を選びます。例:

    アクション ルールタイプ セレクター
    Service Auth Include Linked App Token mcp-server-app
  7. ポリシーを保存します。

  8. ダウンストリームアプリケーション で、ポリシーを Access policies リストに追加します。

  9. アプリケーションを保存します。

  1. MCP サーバーアプリケーション の uid を取得します。

    Required API token permissions

    At least one of the following token permissions is required:
    • Access: Apps and Policies Revoke
    • Access: Apps and Policies Write
    • Access: Apps and Policies Read
    List Access applicationsbash
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/apps" \
    	--request GET \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
    {
    	"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    	"uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    	"type": "saas",
    	"name": "mcp-server-app",
    	...
    }
  2. ダウンストリームアプリケーションに Access ポリシーを作成し、app_uid の値を MCP サーバーアプリケーション の uid に置き換えます。

    Required API token permissions

    At least one of the following token permissions is required:
    • Access: Apps and Policies Write
    Create an Access reusable policybash
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/policies" \
    	--request POST \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
    	--json '{
    		"name": "MCP サーバーからのリクエストを許可",
    		"decision": "non_identity",
    		"include": [
    				{
    						"linked_app_token": {
    								"app_uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
    						}
    				}
    		]
    	}'

2. MCP サーバーを設定する

MCP サーバーが送信リクエストで access_token を転送するように設定します。

Authorization: Bearer ACCESS_TOKEN

既知の制限

  • Linked App Token ポリシーは セルフホストアプリケーション にのみ追加できます。SaaS アプリケーション やほかのアプリケーション種類には追加できません。
  • この機能は、認証と ID に Cloudflare Access JWT を使うアプリケーションで最もよく動作します。ダウンストリームアプリケーションが Cloudflare Access のあとに独自の認証層を実装している場合、Access の検証を通過したリクエストでも、アプリケーション側で拒否されることがあります。
  • 上流アプリケーションが Managed OAuth を使う場合、クライアントが受け取るのは JWT ではなく 不透明なアクセストークン です。クライアントはこのトークンを Cf-Access-Token ヘッダーとしてダウンストリームアプリケーションへ直接転送できません。代わりに、上流アプリケーションのオリジンが Cf-Access-Jwt-Assertion ヘッダー(解決済み JWT を含む)を読み取り、Cf-Access-Token としてダウンストリームアプリケーションへ転送する必要があります。プロキシなしでクライアントから複数のエンドポイントへアクセスしたい場合は、代わりに マルチドメイン Access アプリケーション を検討してください。

役に立ちましたか?