API Management で MCP サーバーへのアクセスをセキュリティで保護する

適用対象: Developer | Basic | Basic v2 | Standard | Standard v2 | Premium | Premium v2

API ManagementでMCPサーバーサポートを利用することで、MCPサーバーやそのツールへのアクセスを公開し、管理できます。 この記事では、管理された REST API から公開されている MCP サーバーと API Management の外部でホストされている既存の MCP サーバーの両方を含め、API Management で管理されている MCP サーバーへのアクセスをセキュリティで保護する方法について説明します。

MCP サーバーへの受信アクセス (MCP クライアントから API Management) と送信アクセス (API Management から MCP サーバーへの) のいずれかまたは両方をセキュリティで保護できます。

受信アクセスをセキュリティで保護する

キーベースの認証

MCPサーバーが Ocp-Apim-Subscription-Key ヘッダーで渡されたAPI管理サブスクリプションキーで保護されている場合、MCPクライアントは受信リクエストでキーを提示でき、API管理がキーを検証します。 例えば、Visual Studio Codeでは、MCPサーバー設定にheadersセクションを追加し、リクエストヘッダーにサブスクリプションキーを含めることができます。

{
  "name": "My MCP Server",
  "type": "remote",
  "url": "https://my-api-management-instance.azure-api.net/my-mcp-server",    
  "transport": "streamable-http",
  "headers": {
    "Ocp-Apim-Subscription-Key": "<subscription-key>"
  }
}

注

Visual Studio Codeのワークスペース設定や安全な入力を使って、サブスクリプションキーを安全に管理できます。

トークン ベースの認証 (Microsoft Entra ID を使用した OAuth 2.1)

MCPクライアントは、Authorizationヘッダーを使用しAPI管理によって検証されたOAuthトークンやJWTをMicrosoft Entra IDで提示できます。

たとえば、 validate-azure-ad-token ポリシーを使用して Microsoft Entra ID トークンを検証します。

<validate-azure-ad-token tenant-id="your-entra-tenant-id" header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid.">     
    <client-application-ids>
        <application-id>your-client-application-id</application-id>
    </client-application-ids> 
</validate-azure-ad-token>

トークンをバックエンドに転送する

リクエストヘッダーは(特定の除外事項を除き)自動的にMCPツールの呼び出しに転送されます。 この機能は、ルーティング、コンテキスト、認証にヘッダーを利用する下流APIとの統合を簡素化します。

Authorizationのヘッダーを明示的に転送してリクエストを検証する必要がある場合は、以下のいずれかの方法を用いてください。

  • API 設定で必要なヘッダーとして Authorization を明示的に定義し、 Outbound ポリシーでヘッダーを転送します。

    ポリシー スニペットの例:

    <!-- Forward Authorization header to backend --> 
    <set-header name="Authorization" exists-action="override"> 
        <value>@(context.Request.Headers.GetValueOrDefault("Authorization"))</value> 
    </set-header> 
    
  • API Management 資格情報マネージャーとポリシー (get-authorization-context、 set-header) を使用して、トークンを安全に転送します。 詳細は 「Secure Outbound access」をご覧ください。

その他の受信承認オプションとサンプルについては、以下を参照してください。

送信アクセスをセキュリティで保護する

API Managementの 認証管理ツール を使って、MCPサーバーツールが行うバックエンドAPIリクエストに対してOAuth 2.0トークンを安全に注入します。

OAuth 2.0ベースのアウトバウンドアクセスを設定する手順

手順 1: ID プロバイダーにアプリケーションを登録します。

手順 2: ID プロバイダーにリンクされた API Management で資格情報プロバイダーを作成します。

手順 3: 資格情報マネージャー内で接続を構成します。

手順 4: API Management ポリシーを適用して、資格情報を動的にフェッチしてアタッチします。

たとえば、次のポリシーは、資格情報マネージャーからアクセス トークンを取得し、送信要求の Authorization ヘッダーに設定します。

<!-- Add to inbound policy. -->
<get-authorization-context
    provider-id="your-credential-provider-id" 
    authorization-id="auth-01" 
    context-variable-name="auth-context" 
    identity-type="managed" 
    ignore-error="false" />
<!-- Attach the token to the backend call -->
<set-header name="Authorization" exists-action="override">
    <value>@("Bearer " + ((Authorization)context.Variables.GetValueOrDefault("auth-context"))?.AccessToken)</value>
</set-header>

資格情報マネージャーで生成された資格情報を使用してバックエンドの例を呼び出す詳細なガイドについては、「 資格情報マネージャーの構成 - GitHub」を参照してください。