Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel wordt uitgelegd hoe u MCP-servers kunt verifiëren en beveiligen die worden uitgevoerd op Azure Container Apps. De benadering verschilt, afhankelijk van of u een zelfstandige container-app host of de door het platform beheerde MCP-server gebruikt in dynamische sessies.
Vereiste voorwaarden
- Een Azure-account met een actief abonnement. Maak gratis een account.
- Azure CLI versie 2.62.0 of hoger.
- Een bestaande container-app of sessiegroep. Als u er nog geen heeft, raadpleegt u de MCP-serverhandleidingen.
Overzicht van verificatiemodellen
Azure Container Apps ondersteunt twee verificatiemodellen voor MCP-servers. De volgende tabel bevat een overzicht van de belangrijkste verschillen.
| Kenmerk | Zelfstandige container-app | Dynamische sessies MCP |
|---|---|---|
| Authenticatiemechanisme | Ingebouwde verificatie voor container-apps met Microsoft Entra ID | API-sleutel via x-ms-apikey koptekst |
| Tokentype | OAuth 2.0 Bearer-token | Ondoorzichtige API-sleuteltekenreeks |
| Identiteitsdienstverlener | Microsoft Entra ID | Azure Resource Manager |
| Sleutel-/tokenrotatie | Beheerd door Microsoft Entra ID | Opnieuw genereren via Azure Resource Manager-API |
| Autorisatiebereik | Configureerbaar per toepassing | Niveau van sessiegroep |
| Transportversleuteling | TLS (Container Apps inkomend verkeer) | TLS (Eindpunt voor Container Apps-sessies) |
Zelfstandige container-app met Microsoft Entra ID-verificatie
Wanneer u uw eigen MCP-server als container-app implementeert, bent u eigenaar van de verificatielaag. Gebruik de functie Container Apps ingebouwde verificatie ondersteund door Microsoft Entra ID.
Ingebouwde verificatie configureren
Met de volgende stappen registreert u een Microsoft Entra ID toepassing en schakelt u ingebouwde verificatie in voor uw container-app.
Een toepassing registreren in Microsoft Entra ID:
APP_ID=$(az ad app create \ --display-name "mcp-server-auth" \ --sign-in-audience AzureADMyOrg \ --query appId -o tsv)Een service-principal maken:
az ad sp create --id $APP_IDStel de URI van de toepassings-id in en stel een API-bereik beschikbaar. Deze instellingen zijn vereist zodat clients toegangstokens voor uw MCP-server kunnen aanvragen.
az ad app update --id $APP_ID --identifier-uris "api://$APP_ID" OBJECT_ID=$(az ad app show --id $APP_ID --query id -o tsv) SCOPE_ID=$(uuidgen) az rest --method PATCH \ --uri "https://graph.microsoft.com/v1.0/applications/$OBJECT_ID" \ --headers "Content-Type=application/json" \ --body "{ \"api\": { \"oauth2PermissionScopes\": [{ \"id\": \"$SCOPE_ID\", \"adminConsentDescription\": \"Access the MCP server\", \"adminConsentDisplayName\": \"Access MCP Server\", \"isEnabled\": true, \"type\": \"User\", \"userConsentDescription\": \"Access the MCP server\", \"userConsentDisplayName\": \"Access MCP Server\", \"value\": \"access_as_user\" }] } }"Een clientgeheim toevoegen:
CLIENT_SECRET=$(az ad app credential reset --id $APP_ID --query password -o tsv) TENANT_ID=$(az account show --query tenantId -o tsv)Ingebouwde verificatie inschakelen voor de container-app:
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" \ --yesStel de niet-geverifieerde actie in om aanmelding te vereisen:
az containerapp auth update \ --name <CONTAINER_APP_NAME> \ --resource-group <RESOURCE_GROUP> \ --unauthenticated-client-action Return401
Verbinding maken vanaf een MCP-client met een bearer-token
Wanneer voor uw MCP-server een Bearer-token is vereist, configureert u het ophalen van tokens in uw MCP-client. In het volgende voorbeeld ziet u een .vscode/mcp.json-configuratie voor GitHub Copilot:
{
"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
}
]
}
Aanbeveling
Voor ontwikkeling haalt u een token op met behulp az account get-access-token --resource api://$APP_ID --query accessToken -o tsv en plakt u het wanneer hierom wordt gevraagd. Voor geautomatiseerde werkstromen integreert u met het tokenbeheersysteem van uw organisatie.
CORS configureren
MCP-clients die verbinding maken vanuit webomgevingen hebben CORS-headers nodig. Gebruik de volgende opdracht om CORS in uw container-app te configureren:
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
De volgende headers zijn belangrijk om toe te staan:
-
Content-Type: vereist voor JSON-RPC aanvragen -
Authorization: vereist voor bearer-tokenverificatie -
Mcp-Session-Id: gebruikt door MCP-clienten voor stateful sessies
Opmerking
GitHub Copilot maakt verbinding met externe MCP-servers vanuit de VS Code-desktop-app, niet vanuit een browser. CORS is alleen nodig als u op browsers gebaseerde MCP-clients of VS Code voor het web wilt ondersteunen. De zelfstandige zelfstudies maken gebruik van wildcard CORS-oorsprongen voor het gemak; voor productie beperkt u tot specifieke vertrouwde oorsprongen, zoals hier getoond.
Aanbevelingen voor beveiliging voor zelfstandige MCP-servers
Pas de volgende aanbevolen procedures toe om uw zelfstandige MCP-server te beveiligen.
- Netwerkbeperkingen: IP-beperkingen of integratie van virtuele netwerken gebruiken om de toegang tot bekende IP-adressen van clients te beperken.
- Rate limiting: Implementeer snelheidsbeperking in uw toepassingscode of front-up van de app met Azure API Management.
- Invoervalidatie: Valideer alle hulpprogrammaargumenten in de MCP-servercode. De invoer voor het MCP-hulpprogramma is willekeurige JSON-bestanden. Beschouw ze als onbetrouwbaar.
-
Staatloos ontwerp: Geef de voorkeur aan stateless MCP-servers om sessie-hijacking risico's te voorkomen. In de meeste MCP-SDK's betekent dit dat sessie-id-generatie aan de serverzijde wordt uitgeschakeld (bijvoorbeeld
sessionIdGenerator: undefinedin TypeScript ofstateless_http=Truein Python). -
Statustests: Configureer statustests op een afzonderlijk eindpunt (zoals
/healthz), niet op het MCP-eindpunt. MCP-eindpunten verwachten JSON-RPC POST-verzoeken en retourneren fouten voor gewone GET-verzoeken.
Dynamische sessies met API-sleutelverificatie
Belangrijk
De door het platform beheerde MCP-server voor dynamische sessies is in preview. De API-versie 2025-02-02-preview en mcpServerSettings -eigenschappen kunnen worden gewijzigd.
De door het platform beheerde MCP-server in dynamische sessies maakt gebruik van API-sleutelverificatie. De sleutel is gericht op de sessiegroep en verleent toegang tot alle hulpprogramma's en sessies in de pool.
Verificatiestroom voor API-sleutel
In de volgende stappen wordt beschreven hoe API-sleutelverificatie werkt voor dynamische sessies.
- De client verzendt een JSON-RPC aanvraag met de
x-ms-apikeyheader. - De proxy van de sessiegroep valideert de sleutel op basis van het Azure besturingsvlak.
- Als de sleutel geldig is, wordt de aanvraag doorgestuurd naar de sessie. Als dat niet het geval is, wordt er een authenticatiefout teruggegeven.
De API-sleutel ophalen
Gebruik de volgende opdracht om de API-sleutel voor uw sessiegroep op te halen.
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)
De API-sleutel draaien en in de cache opslaan
U kunt de API-sleutel op elk gewenst moment opnieuw genereren. Het platform slaat validatieresultaten maximaal vijf minuten in de cache op, dus eerder geldige sleutels blijven werken na regeneratie totdat de cache verloopt.
Als u de API-sleutel wilt roteren, roept u de regenerateCredentials actie in de sessie pool aan.
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
Haal na regeneratie de nieuwe sleutel op met behulp van fetchMCPServerCredentials, zoals eerder getoond.
Aanbevelingen voor beveiliging voor dynamische sessies
Pas de volgende aanbevolen procedures toe om uw dynamische sessies MCP-implementatie te beveiligen.
- API-sleutelbereik: de API-sleutel verleent toegang tot de hele sessiegroep. Elke client met de sleutel kan omgevingen maken en code uitvoeren. Deel de sleutel niet met niet-vertrouwde partijen.
- Omgevingisolatie: Elke sessie wordt uitgevoerd in een Hyper-V geïsoleerde container. Code-uitvoering in één sessie heeft geen toegang tot de gegevens van een andere sessie.
-
Netwerkuitgang: Beheer of sessies toegang hebben tot internet door gebruik te maken van
sessionNetworkConfiguration.status. Ingesteld opEgressDisabledals de sessies geen externe netwerktoegang nodig hebben. -
Levensduur van sessie: configureren
coolDownPeriodInSecondsom niet-actieve sessies automatisch te vernietigen. Met deze instelling wordt het blootstellingsvenster beperkt als een sessie wordt gecompromitteerd. - Secret-opslag: Sla de API-sleutel op in Azure Key Vault of Container Apps geheimen in plaats van in code- of configuratiebestanden.
Veelvoorkomende authenticatiemismatches
Een veelvoorkomende fout is het gebruik van de API-sleutelheader (x-ms-apikey) met een zelfstandige container-app of het gebruik van een bearer-token met het MCP-eindpunt van de sessies. In de volgende tabel ziet u wat er gebeurt wanneer u ze vermixt.
| Wanverhouding | Resultaat |
|---|---|
x-ms-apikey header verzonden naar zelfstandige app |
Kopregel wordt genegeerd; verzoek bereikt ingebouwde authenticatie en retourneert 401 als authenticatie is ingeschakeld |
Authorization: Bearer verzonden naar MCP-sessies |
De sleutelvalidatie faalt en geeft 401 terug |
| Bearer-token aangevraagd zonder een beschikbaar gemaakt API-bereik | Het ophalen van tokens mislukt of het token heeft geen geldige doelgroep, wat resulteert in 401 |
Zorg ervoor dat uw MCP-clientconfiguratie overeenkomt met het hostingmodel dat u hebt geïmplementeerd.