Använda hanterade identiteter för App Service och Azure Functions
Den här artikeln visar hur du skapar en hanterad identitet för Azure App Service- och Azure Functions-program och hur du använder den för att komma åt andra resurser.
Kommentar
Från och med den 1 juni 2024 kan nyligen skapade appar av typen App Service generera ett unikt standardhostnamn som använder namngivningskonventionen <app-name>-<random-hash>.<region>.azurewebsites.net
. Till exempel: myapp-ds27dh7271aah175.westus-01.azurewebsites.net
. Befintliga appnamn förblir oförändrade.
Mer information finns i blogginlägget om att skapa en webbapp med ett unikt standardvärdnamn.
Med en hanterad identitet från Microsoft Entra-ID kan din app enkelt komma åt andra Microsoft Entra-skyddade resurser, till exempel Azure Key Vault. Azure-plattformen hanterar identiteten, så du behöver inte etablera eller rotera några hemligheter. Mer information om hanterade identiteter i Microsoft Entra-ID finns i Hanterade identiteter för Azure-resurser.
Du kan bevilja två typer av identiteter till ditt program:
- En systemtilldelad identitet är kopplad till appen och tas bort om appen 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 app. En app kan ha flera användartilldelade identiteter. En användartilldelad identitet kan tilldelas flera Azure-resurser, till exempel två App Service-appar.
Konfigurationen av den hanterade identiteten är specifik för platsen. Om du vill konfigurera en hanterad identitet för en distributionsplats i portalen, går du först till distributionsplatsen. Om du vill hitta den hanterade identiteten för webbappen eller distributionsfacket i din Microsoft Entra-klientorganisation från Azure Portal söker du efter den direkt från sidan Översikt för din klientorganisation. Platsnamnet liknar vanligtvis <app-name>/slots/<slot-name>
.
Anteckning
Hanterade identiteter är inte tillgängliga för appar som distribueras i Azure Arc.
Eftersom hanterade identiteter inte stöder scenarier mellan katalogerfungerar de inte som förväntat om din app migreras mellan prenumerationer eller klientorganisationer. Information om hur du återskapar hanterade identiteter efter en sådan flytt finns i Kommer hanterade identiteter att återskapas automatiskt om jag flyttar en prenumeration till en annan katalog?. Underordnade resurser måste också ha åtkomstprinciper uppdaterade för att använda den nya identiteten.
Förutsättningar
Om du vill utföra stegen i den här artikeln måste du ha en minsta uppsättning behörigheter för dina Azure-resurser. De specifika behörigheter som du behöver varierar beroende på ditt scenario. I följande tabell sammanfattas de vanligaste scenarierna:
Scenario | Nödvändig behörighet | Exempel på inbyggda roller |
---|---|---|
Skapa en systemtilldelad identitet |
Microsoft.Web/sites/write över appen eller Microsoft.Web/sites/slots/write över facket |
Webbplatsdeltagare |
Skapa en användartilldelad identitet |
Microsoft.ManagedIdentity/userAssignedIdentities/write över resursgruppen där identiteten ska skapas |
Hanterad identitetsbidragsgivare |
Tilldela en användartilldelad identitet till din app |
Microsoft.Web/sites/write över appen, Microsoft.Web/sites/slots/write över facket eller Microsoft.ManagedIdentity/userAssignedIdentities/*/assign/action över identiteten |
Webbplatsdeltagare och Identitetshanteringsoperator |
Skapa Azure-rolltilldelningar |
Microsoft.Authorization/roleAssignments/write över målresursomfånget |
Administratör för rollbaserad åtkomstkontroll eller administratör för användaråtkomst |
Lägga till en systemtilldelad identitet
Om du vill aktivera en systemtilldelad hanterad identitet använder du följande instruktioner.
I Azure-portalengår du till appens sida.
På den vänstra menyn väljer du Inställningar>Identitet.
På fliken Systemtilldelat växlar du Status till På. Välj sedan Spara.
Lägga till en användartilldelad identitet
Skapa en app med en användartilldelad identitet genom att skapa identiteten och sedan lägga till dess resursidentifierare i din appkonfiguration.
Skapa en användartilldelad hanterad identitetsresurs enligt dessa instruktioner.
På den vänstra menyn för appens sida väljer du Inställningar>Identitet.
Välj Användartilldeladeoch välj sedan Lägg till.
Sök efter den identitet som du skapade tidigare, välj den och välj sedan Lägg till.
När du har slutfört de här stegen startas appen om.
Konfigurera målresursen
Du måste konfigurera målresursen för att tillåta åtkomst från din app. För de flesta Azure-tjänster konfigurerar du målresursen genom att skapa en rolltilldelning.
Vissa tjänster använder andra mekanismer än rollbaserad åtkomstkontroll i Azure. Information om hur du konfigurerar åtkomst med hjälp av en identitet finns i dokumentationen för varje målresurs. Mer information om vilka resurser som stöder Microsoft Entra-token finns i Azure-tjänster som stöder Microsoft Entra-autentisering.
Om du till exempel begära en token för att få åtkomst till en hemlighet i Azure Key Vault måste du också skapa en rolltilldelning som gör att den hanterade identiteten kan arbeta med hemligheter i målvalvet. Annars avvisar Key Vault dina anrop även om du använder en giltig token. Detsamma gäller för Azure SQL Database och andra tjänster.
Viktigt!
Serverdelstjänsterna för hanterade identiteter underhåller en cache per resurs-URI i cirka 24 timmar. Det kan ta flera timmar innan ändringar i en hanterad identitets grupp eller rollmedlemskap börjar gälla. Det går för närvarande inte att tvinga en hanterad identitets token att uppdateras innan den upphör att gälla. Om du ändrar en hanterad identitets grupp eller rollmedlemskap för att lägga till eller ta bort behörigheter kan du behöva vänta flera timmar på att Den Azure-resurs som använder identiteten ska ha rätt åtkomst.
Alternativ till grupper eller rollmedlemskap finns i Begränsning av att använda hanterade identiteter för auktorisering.
Ansluta till Azure-tjänster i appkod
Med sin hanterade identitet kan en app hämta token för Azure-resurser som Microsoft Entra ID hjälper till att skydda, till exempel Azure SQL Database, Azure Key Vault och Azure Storage. Dessa token representerar det program som kommer åt resursen och inte någon specifik användare av programmet.
App Service och Azure Functions tillhandahåller en internt tillgänglig REST-slutpunkt för tokenhämtning. Du kan komma åt REST-slutpunkten inifrån appen med hjälp av en http-standardbegäran GET
. Du kan implementera begäran med en allmän HTTP-klient på alla språk.
För .NET, JavaScript, Java och Python ger Azure Identity-klientbiblioteket en abstraktion över den här REST-slutpunkten och förenklar utvecklingsupplevelsen. Att ansluta till andra Azure-tjänster är lika enkelt som att lägga till ett autentiseringsobjekt till den tjänstspecifika klienten.
En rå HTTP-GET
-begäran använder två angivna miljövariabler och ser ut som följande exempel:
GET /MSI/token?resource=https://vault.azure.net&api-version=2019-08-01 HTTP/1.1
Host: <ip-address-:-port-in-IDENTITY_ENDPOINT>
X-IDENTITY-HEADER: <value-of-IDENTITY_HEADER>
Ett exempelsvar kan se ut som i följande exempel:
HTTP/1.1 200 OK
Content-Type: application/json
{
"access_token": "eyJ0eXAi…",
"expires_on": "1586984735",
"resource": "https://vault.azure.net",
"token_type": "Bearer",
"client_id": "00001111-aaaa-2222-bbbb-3333cccc4444"
}
Det här svaret är detsamma som svaret för begäran om åtkomsttokenen för service-till-service i Microsoft Entra. Om du vill komma åt Key Vault lägger du till värdet för access_token
till en klientanslutning till valvet.
Mer information om REST-slutpunkten finns i REST-slutpunktsreferens senare i den här artikeln.
Ta bort en 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 appresursen.
På den vänstra menyn för appens sida väljer du Inställningar>Identitet.
Följ stegen baserat på identitetstypen:
- För en systemtilldelad identitet: På fliken Systemtilldelad växlar du Status till Av. Välj sedan Spara.
- För en användartilldelad identitet: Välj fliken Användare tilldelad, markera kryssrutan för identiteten och välj sedan Ta bort. Välj Ja för att bekräfta.
Kommentar
Du kan också ange en programinställning som endast inaktiverar den lokala tokentjänsten: WEBSITE_DISABLE_MSI
. Den lämnar dock identiteten på plats. Verktyg visar fortfarande den hanterade identiteten som på eller aktiverad. Därför rekommenderar vi inte att du använder den här inställningen.
REST-slutpunktsreferens
En app med en hanterad identitet gör den här slutpunkten tillgänglig genom att definiera två miljövariabler:
-
IDENTITY_ENDPOINT
: URL:en till den lokala tokentjänsten. -
IDENTITY_HEADER
: En rubrik som kan hjälpa till att motverka SSRF-attacker (förfalskning av serversidans begäranden). Plattformen roterar värdet.
Variabeln IDENTITY_ENDPOINT
är en lokal URL som appen kan begära token från. Om du vill hämta en token för en resurs gör du en HTTP-GET
begäran till den här slutpunkten. Ta med följande parametrar:
Parameternamn I beskrivning resource
Fråga Microsoft Entra-resurs-URI:n för resursen som en token ska hämtas för. Den här resursen kan vara en av de Azure-tjänster som stöder Microsoft Entra-autentisering eller någon annan resurs-URI. api-version
Förfrågan Den version av token-API:et som ska användas. Använd 2019-08-01
.X-IDENTITY-HEADER
Header Värdet för miljövariabeln IDENTITY_HEADER
. Den här rubriken används för att minimera SSRF-attacker.client_id
Fråga (Valfritt) Klient-ID för den användartilldelade identitet som ska användas. Det kan inte användas på en begäran som innehåller principal_id
,mi_res_id
ellerobject_id
. Om alla ID-parametrar (client_id
,principal_id
,object_id
ochmi_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. Parametern object_id
är ett alias som kan användas i stället. Det kan inte användas på en begäran som innehållerclient_id
,mi_res_id
ellerobject_id
. Om alla ID-parametrar (client_id
,principal_id
,object_id
ochmi_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 kan inte användas på en begäran som innehåller principal_id
,client_id
ellerobject_id
. Om alla ID-parametrar (client_id
,principal_id
,object_id
ochmi_res_id
) utelämnas används den systemtilldelade identiteten.
Viktigt!
Om du försöker hämta token för användartilldelade identiteter ska 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.
Relaterat innehåll
Överväg följande handledningar: