Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, Azure Container Apps üzerinde çalışan MCP sunucularının kimliğinin nasıl doğrulanıp güvenli bir şekilde güvenliği sağlanmış olduğu açıklanır. Yaklaşım, tek başına bir kapsayıcı uygulaması barındırmanıza veya platform tarafından yönetilen MCP sunucusunu dinamik oturumlarda kullanmanıza bağlı olarak farklılık gösterir.
Önkoşullar
- Aktif bir aboneliğe sahip bir Azure hesabı. Ücretsiz bir tane oluşturun.
- Azure CLI sürüm 2.62.0 veya üzeri.
- Var olan bir kapsayıcı uygulama veya oturum havuzu. Eğer yoksa bir tane, MCP sunucusu öğreticilerine bakın.
Kimlik doğrulama modellerine genel bakış
Azure Container Apps, MCP sunucuları için iki kimlik doğrulama modelini destekler. Aşağıdaki tabloda önemli farklar özetlemektedir.
| Görünüş | Bağımsız kapsayıcı uygulama | Dinamik oturumlar MCP |
|---|---|---|
| Kimlik doğrulama mekanizması | Microsoft Entra ID ile Container Apps için yerleşik kimlik doğrulaması |
x-ms-apikey üst bilgi aracılığıyla API anahtarı |
| Belirteç türü | OAuth 2.0 Taşıyıcı belirteci | Opak API anahtar dizesi |
| Kimlik sağlayıcısı | Microsoft Entra Kimliği | Azure Resource Manager |
| Anahtar/belirteç döndürme | Microsoft Entra Kimliği ile yönetilir | Azure Resource Manager API'si aracılığıyla yeniden oluşturma |
| Yetkilendirme kapsamı | Uygulama başına yapılandırılabilir | Oturum havuzu düzeyi |
| Aktarım şifrelemesi | TLS (Container Apps giriş noktası) | TLS (Container Apps oturum uç noktası) |
Microsoft Entra ID kimlik doğrulaması ile bağımsız kapsayıcı uygulama
Kendi MCP sunucunuzu kapsayıcı uygulaması olarak dağıttığınızda, kimlik doğrulama katmanına sahipsinizdir. Microsoft Entra Id destekli Container Apps yerleşik kimlik doğrulama özelliğini kullanın.
Yerleşik kimlik doğrulamayı yapılandırma
Aşağıdaki adımlar bir Microsoft Entra ID uygulamasını kaydeder ve kapsayıcı uygulamanızda yerleşik kimlik doğrulamasını etkinleştirir.
Bir uygulamayı Microsoft Entra Kimliği'ne kaydedin:
APP_ID=$(az ad app create \ --display-name "mcp-server-auth" \ --sign-in-audience AzureADMyOrg \ --query appId -o tsv)Hizmet sorumlusu oluşturma:
az ad sp create --id $APP_IDBir istemci gizli anahtarı ekleyin:
CLIENT_SECRET=$(az ad app credential reset --id $APP_ID --query password -o tsv) TENANT_ID=$(az account show --query tenantId -o tsv)Kapsayıcı uygulamasında yerleşik kimlik doğrulamasını etkinleştirin:
az containerapp auth microsoft update \ --name <CONTAINER_APP_NAME> \ --resource-group <RESOURCE_GROUP> \ --client-id $APP_ID \ --client-secret $CLIENT_SECRET \ --tenant-id $TENANT_ID \ --issuer "https://login.microsoftonline.com/$TENANT_ID/v2.0" \ --yesKimliği doğrulanmamış eylemi oturum açmayı gerektirecek şekilde ayarlayın:
az containerapp auth update \ --name <CONTAINER_APP_NAME> \ --resource-group <RESOURCE_GROUP> \ --unauthenticated-client-action Return401
Bir MCP istemcisine Bearer belirteci ile bağlanma
MCP sunucunuz taşıyıcı belirteç gerektirdiğinde, MCP istemcinizde belirteç almayı yapılandırın. Aşağıdaki örnekte GitHub Copilot için bir .vscode/mcp.json yapılandırma gösterilmektedir:
{
"servers": {
"my-mcp-server": {
"type": "http",
"url": "https://<CONTAINER_APP_NAME>.<REGION>.azurecontainerapps.io/mcp",
"headers": {
"Authorization": "Bearer ${input:mcpBearerToken}"
}
}
},
"inputs": [
{
"id": "mcpBearerToken",
"type": "promptString",
"description": "Enter your bearer token for the MCP server",
"password": true
}
]
}
Tavsiye
Geliştirme için, bir belirteç almak için az account get-access-token --resource $APP_ID --query accessToken -o tsv kullanın ve istendiğinde yapıştırın. Otomatik iş akışları için kuruluşunuzun belirteç yönetim sistemiyle tümleştirin.
CORS'u Yapılandır
Web tabanlı ortamlardan bağlanan MCP istemcileri CORS üst bilgilerine ihtiyaç duyar. Kapsayıcı uygulamanızda CORS'yi yapılandırmak için aşağıdaki komutu kullanın:
az containerapp ingress cors update \
--name <CONTAINER_APP_NAME> \
--resource-group <RESOURCE_GROUP> \
--allowed-origins "https://vscode.dev" "https://github.dev" \
--allowed-methods "GET" "POST" "OPTIONS" \
--allowed-headers "Content-Type" "Authorization" "Mcp-Session-Id" \
--max-age 3600
Aşağıdaki başlıklar izin vermek için önemlidir:
-
Content-Type: JSON-RPC istekleri için gereklidir -
Authorization: taşıyıcı belirteç kimlik doğrulaması için gereklidir -
Mcp-Session-Id: MCP istemcileri tarafından durum bilgisine sahip oturumlar için kullanılır
Uyarı
GitHub Copilot, uzak MCP sunucularına tarayıcıdan değil VS Code masaüstü uygulamasından bağlanır. CORS yalnızca tarayıcı tabanlı MCP istemcilerini veya Web için VS Code'ı desteklemek istiyorsanız gereklidir. Tek başına öğreticilerde basitlik için joker karakter CORS kökenleri kullanılır; üretim için, aşağıda gösterildiği gibi belirli güvenilir kökenlerle kısıtlayın.
Tek başına MCP sunucuları için güvenlik önerileri
Tek başına MCP sunucunuzu sağlamlaştırmak için aşağıdaki en iyi yöntemleri uygulayın.
- Ağ kısıtlamaları: Bilinen istemci IP'lerine erişimi sınırlamak için IP kısıtlamalarını veya sanal ağ tümleştirmesini kullanın.
- Hız sınırlama: Azure API Management ile uygulama kodunuzda veya uygulamanın önünde hız sınırlaması uygulayın.
- Giriş doğrulaması: MCP sunucu kodunuzdaki tüm araç bağımsız değişkenlerini doğrulayın. MCP araç girişleri rastgele JSON'dır. Onlara güvenilmezmiş gibi davranın.
-
Durum bilgisi olmayan tasarım: Oturum ele geçirme risklerini önlemek için durum bilgisi olmayan MCP sunucularını tercih edin. Çoğu MCP SDK'sında bu, sunucu tarafı oturum kimliği oluşturmayı (örneğin,
sessionIdGenerator: undefinedTypeScript'te veyastateless_http=TruePython'da) devre dışı bırakmak anlamına gelir. -
Sistem durumu yoklamaları: Sistem durumu yoklamalarını MCP uç noktasında değil ayrı bir uç noktada (örneğin
/healthz) yapılandırın. MCP uç noktaları JSON-RPC POST istekleri bekler ve düz GET yoklamaları için hatalar döndürür.
API anahtarı kimlik doğrulaması ile dinamik oturumlar
Önemli
Dinamik oturumlar için platform tarafından yönetilen MCP sunucusu önizleme aşamasındadır. API sürümü 2025-02-02-preview ve mcpServerSettings özellikleri değiştirilebilir.
Dinamik oturumlarda platform tarafından yönetilen MCP sunucusu API anahtarı kimlik doğrulamasını kullanır. Anahtarın kapsamı oturum havuzuna göre belirlenmiştir ve havuzdaki tüm araçlara ve oturumlara erişim verir.
API anahtarı kimlik doğrulama akışı
Aşağıdaki adımlarda API anahtarı kimlik doğrulamasının dinamik oturumlar için nasıl çalıştığı açıklanmaktadır.
- İstemci,
x-ms-apikeyüst bilgiyle bir JSON-RPC isteği gönderir. - Oturum havuzu proxy'si anahtarı Azure denetim düzleminde doğrular.
- Anahtar geçerliyse istek oturuma iletilir. Aksi takdirde bir kimlik doğrulama hatası döndürülür.
API anahtarını alma
Oturum havuzunuzun API anahtarını getirmek için aşağıdaki komutu kullanın.
API_KEY=$(az rest --method POST \
--uri "https://management.azure.com/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.App/sessionPools/<SESSION_POOL_NAME>/fetchMCPServerCredentials" \
--uri-parameters api-version=2025-02-02-preview \
--query "apiKey" -o tsv)
API anahtarını döndürme ve önbelleğe alma
API anahtarını istediğiniz zaman yeniden oluşturabilirsiniz. Platform doğrulama sonuçlarını beş dakikaya kadar önbelleğe alır, bu nedenle önbellek süresi dolana kadar daha önce geçerli anahtarlar yeniden oluşturma işleminden sonra çalışmaya devam edebilir.
API anahtarını döndürmek için oturum havuzunda eylemi çağırın regenerateCredentials :
az rest --method POST \
--uri "https://management.azure.com/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.App/sessionPools/<SESSION_POOL_NAME>/regenerateCredentials" \
--uri-parameters api-version=2025-02-02-preview
Yeniden oluşturma işleminden sonra, daha önce gösterildiği gibi fetchMCPServerCredentials kullanarak yeni anahtarı alın.
Dinamik oturumlar için güvenlik önerileri
Dinamik oturumlarınızın MCP dağıtımının güvenliğini sağlamak için aşağıdaki en iyi yöntemleri uygulayın.
- API anahtarı kapsamı: API anahtarı tüm oturum havuzuna erişim verir. Anahtarı olan herhangi bir istemci ortam oluşturabilir ve kod yürütebilir. Anahtarı güvenilmeyen taraflarla paylaşmayın.
- Ortam yalıtımı: Her oturum Hyper-V yalıtılmış bir kapsayıcıda çalışır. Bir oturumda kod yürütme başka bir oturumun verilerine erişemez.
-
Ağ çıkışı:
sessionNetworkConfiguration.statuskullanarak oturumların internet erişimini denetleyin.EgressDisabledOturumların dış ağ erişimine ihtiyacı yoksa olarak ayarlayın. -
Oturum ömrü: Boşta kalan oturumları otomatik olarak yok edecek şekilde yapılandırın
coolDownPeriodInSeconds. Bu ayar, bir oturumun gizliliği ihlal edilirse pozlama penceresini sınırlar. - Gizli dizi depolama: API anahtarını kod veya yapılandırma dosyaları yerine Azure Key Vault veya Container Apps gizli dizilerinde depolayın.
Yaygın kimlik doğrulama uyuşmazlıkları
Bağımsız bir kapsayıcı uygulamasıyla API anahtar üst bilgisinin (x-ms-apikey) kullanılması veya oturumlar MCP uç noktasıyla taşıyıcı belirtecin kullanılması yaygın bir hatadır. Aşağıdaki tabloda bunları karıştırdığınızda ne olacağı gösterilmektedir.
| Uyumsuzluk | Result |
|---|---|
x-ms-apikey bağımsız uygulamaya gönderilen üst bilgi |
Üst bilgi yoksayılır; istek yerleşik kimlik doğrulamasına isabet eder ve kimlik doğrulaması etkinse döndürür 401 |
Authorization: Bearer MCP, oturumlara gönderildi |
Anahtar doğrulaması başarısız oluyor ve döndürülüyor 401 |
MCP istemci yapılandırmanızın dağıtılan barındırma modeliyle eşleştiğinden emin olun.
İlgili içerik
- Azure Container Apps'te MCP sunucularına genel bakış
- Azure Container Apps'te kimlik doğrulaması ve yetkilendirme
- Microsoft Entra ID Kimlik Doğrulama
- Dinamik oturumlara genel bakış
- Container Apps'te gizli verileri yönetme
- Container Apps için CORS'yi yapılandırma
- Container Apps'te MCP sunucularında sorun giderme