API Management'ta MCP sunucularına güvenli erişim

ŞUNLAR IÇIN GEÇERLIDIR: Geliştirici | Temel | Temel v2 | Standart | Standart v2 | Premium | Premium v2

API Yönetimi'nde MCP sunucu desteğini kullanarak, MCP sunucularına ve araçlarına erişimi açığa çıkarabilir ve yönetebilirsiniz. Bu makalede, hem yönetilen REST API'lerinden kullanıma sunulan MCP sunucuları hem de API Management dışında barındırılan mevcut MCP sunucuları da dahil olmak üzere API Management'ta yönetilen MCP sunucularına erişimin nasıl güvenli bir şekilde sağlandığı açıklanır.

MCP sunucusuna gelen erişimi (bir MCP istemcisinden API Management'e) ve giden erişimi (API Management'tan MCP sunucusuna) veya her ikisinin güvenliğini sağlayabilirsiniz.

Gelen erişimin güvenliğini sağlama

Anahtar tabanlı kimlik doğrulaması

MCP sunucusu, başlıkta aktarılan Ocp-Apim-Subscription-Key API Yönetimi abonelik anahtarıyla korunursa, MCP istemcileri gelen isteklerde anahtarı sunabilir ve API Yönetimi anahtarı doğrular. Örneğin, Visual Studio Code'da, MCP sunucu yapılandırmasına abonelik anahtarını istek başlıklarına dahil etmek için bir headers bölüm ekleyebilirsiniz:

{
  "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>"
  }
}

Uyarı

Abonelik anahtarlarını Visual Studio Code çalışma alanı ayarları veya güvenli girdiler kullanarak güvenli şekilde yönetin.

Belirteç tabanlı kimlik doğrulaması (Microsoft Entra Kimliği ile OAuth 2.1)

MCP istemcileri, Microsoft Entra ID tarafından verilen OAuth token'ları veya JWT'leri bir başlık kullanarak Authorization sunabilir ve API Yönetimi tarafından doğrulanabilir.

Örneğin, Microsoft Entra Id belirteçlerini doğrulamak için validate-azure-ad-token ilkesini kullanın:

<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>

Belirteçleri backend'e iletme

İstek başlıkları otomatik olarak (bazı istisnalarla) MCP araç çağrılarına yönlendirilir. Bu özellik, yönlendirme, bağlam veya kimlik doğrulama için başlıklara dayanan aşağı akış API'leriyle entegrasyonu kolaylaştırır.

Gelen isteklerin doğrulanması için başlığı Authorization açıkça iletmeniz gerekiyorsa, aşağıdaki yaklaşımlardan birini kullanın:

  • API ayarlarında Authorization öğesini gerekli bir üst bilgi olarak açıkça tanımlayın ve Outbound politikasında üst bilgiyi iletin.

    Örnek ilke parçacığı:

    <!-- Forward Authorization header to backend --> 
    <set-header name="Authorization" exists-action="override"> 
        <value>@(context.Request.Headers.GetValueOrDefault("Authorization"))</value> 
    </set-header> 
    
  • Belirteci güvenli bir şekilde iletmek için API Management kimlik bilgileri yöneticisini ve ilkelerini (get-authorization-context, set-header) kullanın. Daha fazla bilgi için Güvenli çıkış erişimi bölümüne bakınız.

Daha fazla gelen yetkilendirme seçeneği ve örneği için bkz:

Giden erişimin güvence altına alınması

API Yönetimi'nin kimlik yöneticisini , MCP sunucu araçlarının yaptığı arka uç API talepleri için OAuth 2.0 tokenlarını güvenli bir şekilde enjekte etmek için kullanın.

OAuth 2.0 tabanlı çıkış erişimini yapılandırmak için adımlar

1. Adım: Kimlik sağlayıcısına bir uygulama kaydedin.

2. Adım: API Management'ta kimlik sağlayıcısına bağlı bir kimlik bilgisi sağlayıcısı oluşturun.

Adım 3: Kimlik bilgileri yöneticisi içindeki bağlantıları yapılandırın.

4. Adım: Kimlik bilgilerini dinamik olarak getirmek ve eklemek için API Management ilkeleri uygulayın.

Örneğin, aşağıdaki ilke kimlik bilgisi yöneticisinden bir erişim belirteci alır ve bunu giden isteğin Authorization üst bilgisinde ayarlar:

<!-- 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>

Kimlik bilgisi yöneticisinde oluşturulan kimlik bilgilerini kullanarak örnek bir arka ucu çağırmaya yönelik adım adım kılavuz için bkz. Kimlik bilgisi yöneticisini yapılandırma - GitHub.