Med en hanterad identitet från Microsoft Entra-ID kan din containerapp komma åt andra Microsoft Entra-skyddade resurser. Mer information om hanterade identiteter i Microsoft Entra-ID finns i Hanterade identiteter för Azure-resurser.
Containerappen kan beviljas två typer av identiteter:
En systemtilldelad identitet är kopplad till containerappen och tas bort när containerappen tas bort. En app kan bara ha en systemtilldelad identitet.
En användartilldelad identitet är en fristående Azure-resurs som kan tilldelas till din containerapp och andra resurser. En containerapp kan ha flera användartilldelade identiteter. Identiteten finns tills du tar bort dem.
Systemtilldelade identiteter passar bäst för arbetsbelastningar som:
finns i en enskild resurs
behöver oberoende identiteter
Användartilldelade identiteter är idealiska för arbetsbelastningar som:
körs på flera resurser och kan dela en enda identitet
behöver förhandsauktorisering till en säker resurs
Begränsningar
Det går inte att använda hanterade identiteter i skalningsregler. Du måste fortfarande inkludera anslutningssträng eller nyckeln i secretRef skalningsregeln.
I det vänstra navigeringsfältet på containerappens sida rullar du ned till gruppen Inställningar.
Välj Identitet.
På fliken Systemtilldelat växlar du Status till På. Välj Spara.
az containerapp identity assign Kör kommandot för att skapa en systemtilldelad identitet:
az containerapp identity assign --name myApp --resource-group myResourceGroup --system-assigned
En ARM-mall kan användas för att automatisera distributionen av din containerapp och dina resurser. Lägg till en systemtilldelad identitet genom att lägga till ett identity avsnitt i ARM-mallen.
"identity": {
"type": "SystemAssigned"
}
Om du lägger till den systemtilldelade typen uppmanas Azure att skapa och hantera identiteten för ditt program. Ett fullständigt ARM-mallexempel finns i ARM API-specifikation.
Vissa Azure CLI-kommandon, inklusive az containerapp create och az containerapp job create, stöder YAML-filer för indata. Om du vill lägga till en systemtilldelad identitet lägger du till ett identity avsnitt i YAML-filen.
identity:
type: SystemAssigned
Om du lägger till den systemtilldelade typen uppmanas Azure att skapa och hantera identiteten för ditt program. Ett fullständigt YAML-mallexempel finns i ARM API-specifikation.
Lägga till en användartilldelad identitet
Om du konfigurerar en containerapp med en användartilldelad identitet måste du först skapa identiteten och sedan lägga till dess resursidentifierare i containerappens konfiguration. Du kan skapa användartilldelade identiteter via Azure-portalen eller Azure CLI. Information om hur du skapar och hanterar användartilldelade identiteter finns i Hantera användartilldelade hanterade identiteter.
Ersätt <IDENTITY_RESOURCE_ID> med id identitetens egenskap. Om du vill tilldela mer än en användartilldelad identitet anger du en blankstegsavgränsad lista över identitets-ID:t till parametern --user-assigned .
Om du vill lägga till en eller flera användartilldelade identiteter lägger du till ett identity avsnitt i ARM-mallen. Ersätt <IDENTITY1_RESOURCE_ID> och <IDENTITY2_RESOURCE_ID> med resursidentifierarna för de identiteter som du vill lägga till.
Ange varje användartilldelad identitet genom att lägga till ett objekt i userAssignedIdentities objektet med identitetens resursidentifierare som nyckel. Använd ett tomt objekt som värde.
Ett program kan ha både systemtilldelade och användartilldelade identiteter samtidigt. I det här fallet skulle typegenskapen vara SystemAssigned,UserAssigned.
Om du vill lägga till en eller flera användartilldelade identiteter lägger du till ett identity avsnitt i YAML-konfigurationsfilen. Ersätt <IDENTITY1_RESOURCE_ID> och <IDENTITY2_RESOURCE_ID> med resursidentifierarna för de identiteter som du vill lägga till.
Ange varje användartilldelad identitet genom att lägga till ett objekt i userAssignedIdentities objektet med identitetens resursidentifierare som nyckel. Använd ett tomt objekt som värde.
Ett program kan ha både systemtilldelade och användartilldelade identiteter samtidigt. I det här fallet skulle typegenskapen vara SystemAssigned,UserAssigned.
Konfigurera en målresurs
För vissa resurser måste du konfigurera rolltilldelningar för appens hanterade identitet för att bevilja åtkomst. Annars avvisas anrop från din app till tjänster, till exempel Azure Key Vault och Azure SQL Database, även om du använder en giltig token för den identiteten. Mer information om rollbaserad åtkomstkontroll i Azure (Azure RBAC) finns i Vad är RBAC?. Mer information om vilka resurser som stöder Microsoft Entra-token finns i Azure-tjänster som stöder Microsoft Entra-autentisering.
Viktigt!
Serverdelstjänsterna för hanterade identiteter underhåller en cache per resurs-URI i cirka 24 timmar. Om du uppdaterar åtkomstprincipen för en viss målresurs och omedelbart hämtar en token för den resursen kan du fortsätta att hämta en cachelagrad token med inaktuella behörigheter tills token upphör att gälla. Det finns för närvarande inget sätt att tvinga fram en tokenuppdatering.
Anslut till Azure-tjänster i appkod
Med hanterade identiteter kan en app hämta token för åtkomst till Azure-resurser som använder Microsoft Entra-ID, till exempel Azure SQL Database, Azure Key Vault och Azure Storage. Dessa token representerar programmet som kommer åt resursen och inte någon specifik användare av programmet.
Container Apps tillhandahåller en internt tillgänglig REST-slutpunkt för att hämta token. REST-slutpunkten kan nås inifrån appen med en standard-HTTP GET, som kan implementeras med en allmän HTTP-klient på alla språk. För .NET, JavaScript, Java och Python tillhandahåller Azure Identity-klientbiblioteket en abstraktion över den här REST-slutpunkten. Anslut till andra Azure-tjänster är lika enkelt som att lägga till ett autentiseringsobjekt till den tjänstspecifika klienten.
Kommentar
När du använder Azure Identity-klientbiblioteket måste det användartilldelade klient-ID:t för hanterad identitet anges.
För .NET-appar är det enklaste sättet att arbeta med en hanterad identitet via Azure Identity-klientbiblioteket för .NET. Mer information finns i respektive dokumentationsrubriker i klientbiblioteket:
De länkade exemplen använder DefaultAzureCredential. Det är användbart för de flesta scenarier eftersom samma mönster fungerar i Azure (med hanterade identiteter) och på din lokala dator (utan hanterade identiteter).
För Node.js-appar är det enklaste sättet att arbeta med en hanterad identitet via Azure Identity-klientbiblioteket för JavaScript. Mer information finns i respektive dokumentationsrubriker i klientbiblioteket:
De länkade exemplen använder DefaultAzureCredential. Det är användbart för de flesta scenarier eftersom samma mönster fungerar i Azure (med hanterade identiteter) och på din lokala dator (utan hanterade identiteter).
Fler kodexempel på Azure Identity-klientbiblioteket för JavaScript finns i Azure Identity-exempel.
För Python-appar är det enklaste sättet att arbeta med en hanterad identitet via Azure Identity-klientbiblioteket för Python. Mer information finns i respektive dokumentationsrubriker i klientbiblioteket:
De länkade exemplen använder DefaultAzureCredential. Det är användbart för de flesta scenarier eftersom samma mönster fungerar i Azure (med hanterade identiteter) och på din lokala dator (utan hanterade identiteter).
För Java-appar och -funktioner är det enklaste sättet att arbeta med en hanterad identitet via Azure Identity-klientbiblioteket för Java. Mer information finns i respektive dokumentationsrubriker i klientbiblioteket:
De länkade exemplen använder DefaultAzureCredential. Det är användbart för de flesta scenarier eftersom samma mönster fungerar i Azure (med hanterade identiteter) och på din lokala dator (utan hanterade identiteter).
Använd följande skript för att hämta en token från den lokala slutpunkten genom att ange en resurs-URI för en Azure-tjänst. Ersätt platshållaren med resurs-URI:n för att hämta token.
En rå HTTP GET-begäran ser ut som i följande exempel.
Hämta tokenslutpunkts-URL:en från IDENTITY_ENDPOINT miljövariabeln. x-identity-header innehåller det GUID som lagras i IDENTITY_HEADER miljövariabeln.
GET http://localhost:42356/msi/token?resource=https://vault.azure.net&api-version=2019-08-01 HTTP/1.1
x-identity-header: 853b9a84-5bfa-4b22-a3f3-0b9a43d9ad8a
Det här svaret är detsamma som svaret för begäran om åtkomsttoken för Microsoft Entra service-to-service. För att få åtkomst till Key Vault lägger du sedan till värdet access_token för till en klientanslutning till valvet.
REST-slutpunktsreferens
En containerapp med en hanterad identitet exponerar identitetsslutpunkten genom att definiera två miljövariabler:
IDENTITY_ENDPOINT – lokal URL som containerappen kan begära token från.
IDENTITY_HEADER – ett huvud som används för att minimera SSRF-attacker (Server Side Request Forgery). Värdet roteras av plattformen.
Om du vill hämta en token för en resurs gör du en HTTP GET-begäran till slutpunkten, inklusive följande parametrar:
Den version av token-API:et som ska användas. Använd "2019-08-01" eller senare.
X-IDENTITY-HEADER
Header
Värdet för IDENTITY_HEADER miljövariabeln. Det här huvudet minimerar SSRF-attacker (request forgery) på serversidan.
client_id
Fråga
(Valfritt) Klient-ID för den användartilldelade identitet som ska användas. Det går inte att använda på en begäran som innehåller principal_id, mi_res_ideller object_id. Om alla ID-parametrar (client_id, principal_id, object_idoch mi_res_id) utelämnas används den systemtilldelade identiteten.
principal_id
Fråga
(Valfritt) Huvud-ID för den användartilldelade identitet som ska användas. object_id är ett alias som kan användas i stället. Det går inte att använda på en begäran som innehåller client_id, mi_res_id eller object_id. Om alla ID-parametrar (client_id, principal_id, object_idoch mi_res_id) utelämnas används den systemtilldelade identiteten.
mi_res_id
Fråga
(Valfritt) Azure-resurs-ID för den användartilldelade identitet som ska användas. Det går inte att använda på en begäran som innehåller principal_id, client_ideller object_id. Om alla ID-parametrar (client_id, principal_id, object_idoch mi_res_id) utelämnas används den systemtilldelade identiteten.
Viktigt!
Om du försöker hämta token för användartilldelade identiteter måste du inkludera en av de valfria egenskaperna. Annars försöker tokentjänsten hämta en token för en systemtilldelad identitet, som kanske eller kanske inte finns.
Visa hanterade identiteter
Du kan visa de systemtilldelade och användartilldelade hanterade identiteterna med hjälp av följande Azure CLI-kommando. Utdata visar den hanterade identitetstypen, klient-ID:n och huvudnamns-ID:n för alla hanterade identiteter som tilldelats din containerapp.
az containerapp identity show --name <APP_NAME> --resource-group <GROUP_NAME>
Ta bort en hanterad identitet
När du tar bort en systemtilldelad identitet tas den bort från Microsoft Entra-ID. Systemtilldelade identiteter tas också bort automatiskt från Microsoft Entra-ID när du tar bort själva containerappresursen. Om du tar bort användartilldelade hanterade identiteter från containerappen tas de inte bort från Microsoft Entra-ID.