Hanterade identiteter i Azure Container Apps
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 du kan tilldela till din containerapp och andra resurser. En containerapp kan ha flera användartilldelade identiteter. Användartilldelade identiteter finns tills du tar bort dem.
Varför ska jag använda en hanterad identitet?
Du kan använda en hanterad identitet i en containerapp som körs för att autentisera till alla tjänster som stöder Microsoft Entra-autentisering.
Med hanterade identiteter:
- Appen ansluter till resurser med den hanterade identiteten. Du behöver inte hantera autentiseringsuppgifter i containerappen.
- Du kan använda rollbaserad åtkomstkontroll för att bevilja specifika behörigheter till en hanterad identitet.
- Systemtilldelade identiteter skapas och hanteras automatiskt. De tas bort när din containerapp tas bort.
- Du kan lägga till och ta bort användartilldelade identiteter och tilldela dem till flera resurser. De är oberoende av containerappens livscykel.
- Du kan använda hanterad identitet för att autentisera med ett privat Azure Container Registry utan användarnamn och lösenord för att hämta containrar för din containerapp.
- Du kan använda en hanterad identitet för att skapa anslutningar för Dapr-aktiverade program via Dapr-komponenter
Vanliga användningsfall
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
Init-containrar kan inte komma åt hanterade identiteter i miljöer med endast förbrukning och dedikerade arbetsbelastningsprofilmiljöer
Konfigurera hanterade identiteter
Du kan konfigurera dina hanterade identiteter genom att:
- Azure-portalen
- Azure CLI
- din ARM-mall (Azure Resource Manager)
När en hanterad identitet läggs till, tas bort eller ändras i en containerapp som körs startas inte appen om automatiskt och ingen ny revision skapas.
Kommentar
När du lägger till en hanterad identitet i en containerapp som distribuerats före den 11 april 2022 måste du skapa en ny revision.
Lägga till en systemtilldelad identitet
Gå till containerappen i Azure Portal.
I gruppen Inställningar väljer du Identitet.
På fliken Systemtilldelat växlar du Status till På.
Välj Spara.
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 Portal eller Azure CLI. Information om hur du skapar och hanterar användartilldelade identiteter finns i Hantera användartilldelade hanterade identiteter.
Först måste du skapa en användartilldelad identitetsresurs.
Skapa en användartilldelad hanterad identitetsresurs enligt stegen i Hantera användartilldelade hanterade identiteter.
Gå till containerappen i Azure Portal.
I gruppen Inställningar väljer du Identitet.
På fliken Användartilldelade väljer du Lägg till.
Sök efter och välj den identitet som du skapade tidigare.
Markera Lägga till.
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 när 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 går inte att tvinga fram en tokenuppdatering.
Ansluta 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 är tillgänglig inifrån appen med en http-standardbegäran GET
som du kan skicka med en generisk HTTP-klient på önskat språk. För .NET, JavaScript, Java och Python tillhandahåller Azure Identity-klientbiblioteket en abstraktion över den här REST-slutpunkten. Du kan ansluta till andra Azure-tjänster genom att lägga till ett autentiseringsobjekt till den tjänstspecifika klienten.
Kommentar
När du använder Azure Identity-klientbiblioteket måste du uttryckligen ange det användartilldelade klient-ID:t för hanterad identitet.
Kommentar
När du ansluter till Azure SQL-datakällor med Entity Framework Core bör du överväga att använda Microsoft.Data.SqlClient, som tillhandahåller särskilda anslutningssträng för hanterad identitetsanslutning.
För .NET-appar är det enklaste sättet att arbeta med en hanterad identitet via Azure Identity-klientbiblioteket för .NET. Se följande resurser för mer information:
- Lägga till Azure Identity-klientbibliotek i projektet
- Få åtkomst till Azure-tjänsten med en systemtilldelad identitet
- Få åtkomst till Azure-tjänsten med en användartilldelad identitet
De länkade exemplen använder DefaultAzureCredential
. Det här objektet är effektivt i de flesta scenarier eftersom samma mönster fungerar i Azure (med hanterade identiteter) och på din lokala dator (utan hanterade identiteter).
Använda hanterad identitet för skalningsregler
Du kan använda hanterade identiteter i dina skalningsregler för att autentisera med Azure-tjänster som stöder hanterade identiteter. Om du vill använda en hanterad identitet i skalningsregeln använder du identity
egenskapen i stället för auth
egenskapen i skalningsregeln. Godkända värden för egenskapen är antingen Azure-resurs-ID för identity
en användartilldelad identitet eller system
för att använda en systemtilldelad identitet.
Kommentar
Hanterad identitetsautentisering i skalningsregler finns i offentlig förhandsversion. Den är tillgänglig i API-versionen 2024-02-02-preview
.
Följande ARM-mallexempel visar hur du använder en hanterad identitet med en Skalningsregel för Azure Queue Storage:
Kölagringskontot använder accountName
egenskapen för att identifiera lagringskontot, medan identity
egenskapen anger vilken hanterad identitet som ska användas. Du behöver inte använda egenskapen auth
.
"scale": {
"minReplicas": 1,
"maxReplicas": 10,
"rules": [{
"name": "myQueueRule",
"azureQueue": {
"accountName": "mystorageaccount",
"queueName": "myqueue",
"queueLength": 2,
"identity": "<IDENTITY1_RESOURCE_ID>"
}
}]
}
Mer information om hur du använder hanterad identitet med skalningsregler finns i Ange skalningsregler i Azure Container Apps.
Kontrollera tillgängligheten för hanterad identitet
Med Container Apps kan du ange init-containrar och huvudcontainrar. Som standard kan både huvudcontainrar och init-containrar i en förbrukningsprofilmiljö använda hanterad identitet för att få åtkomst till andra Azure-tjänster. I miljöer med endast förbrukning och dedikerade arbetsbelastningsprofilmiljöer kan endast huvudcontainrar använda hanterad identitet. Åtkomsttoken för hanterade identiteter är tillgängliga för varje hanterad identitet som konfigurerats i containerappen. I vissa situationer kräver dock endast init-containern eller huvudcontainern åtkomsttoken för en hanterad identitet. Andra gånger kan du använda en hanterad identitet endast för att komma åt ditt Azure Container Registry för att hämta containeravbildningen, och själva programmet behöver inte ha åtkomst till Azure Container Registry.
Från och med API-versionen 2024-02-02-preview
kan du styra vilka hanterade identiteter som är tillgängliga för containerappen under init- och huvudfaserna för att följa säkerhetsprincipen för lägsta behörighet. Följande alternativ är tillgängliga:
Init
: Endast tillgängligt för init-containrar. Använd detta när du vill utföra initieringsarbete som kräver en hanterad identitet, men du inte längre behöver den hanterade identiteten i huvudcontainern. Det här alternativet stöds för närvarande endast i arbetsbelastningsprofilens förbrukningsmiljöerMain
: Endast tillgängligt för huvudcontainrar. Använd detta om din init-container inte behöver hanterad identitet.All
: Tillgänglig för alla containrar. Det här värdet är standard.None
: Inte tillgängligt för några containrar. Använd detta när du har en hanterad identitet som endast används för ACR-avbildningshämtning, skalningsregler eller Key Vault-hemligheter och inte behöver vara tillgänglig för koden som körs i containrarna.
Följande ARM-mallexempel visar hur du konfigurerar en containerapp i en arbetsbelastningsprofilförbrukningsmiljö som:
- Begränsar containerappens systemtilldelade identitet till endast huvudcontainrar.
- Begränsar en specifik användartilldelad identitet till endast init-containrar.
- Använder en specifik användartilldelad identitet för Azure Container Registry-avbildningshämtning utan att tillåta att koden i containrarna använder den hanterade identiteten för att komma åt registret. I det här exemplet behöver inte själva containrarna komma åt registret.
Den här metoden begränsar de resurser som kan nås om en obehörig aktör skulle få obehörig åtkomst till containrarna.
{
"location": "eastus2",
"identity":{
"type": "SystemAssigned, UserAssigned",
"userAssignedIdentities": {
"<IDENTITY1_RESOURCE_ID>":{},
"<ACR_IMAGEPULL_IDENTITY_RESOURCE_ID>":{}
}
},
"properties": {
"workloadProfileName":"Consumption",
"environmentId": "<CONTAINER_APPS_ENVIRONMENT_ID>",
"configuration": {
"registries": [
{
"server": "myregistry.azurecr.io",
"identity": "ACR_IMAGEPULL_IDENTITY_RESOURCE_ID"
}],
"identitySettings":[
{
"identity": "ACR_IMAGEPULL_IDENTITY_RESOURCE_ID",
"lifecycle": "None"
},
{
"identity": "<IDENTITY1_RESOURCE_ID>",
"lifecycle": "Init"
},
{
"identity": "system",
"lifecycle": "Main"
}]
},
"template": {
"containers":[
{
"image":"myregistry.azurecr.io/main:1.0",
"name":"app-main"
}
],
"initContainers":[
{
"image":"myregistry.azurecr.io/init:1.0",
"name":"app-init",
}
]
}
}
}
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.
I det vänstra navigeringsfönstret på appens sida rullar du ned till gruppen Inställningar .
Välj Identitet. Följ sedan stegen baserat på identitetstypen:
- Systemtilldelad identitet: På fliken Systemtilldelad växlar du Status till Av. Välj Spara.
- Användartilldelad identitet: Välj fliken Användartilldelad , markera kryssrutan för identiteten och välj Ta bort. Välj Ja för att bekräfta.