Så här använder du hanterade identiteter för App Service och Azure Functions

Den här artikeln visar hur du skapar en hanterad identitet för App Service- och Azure Functions-program och hur du använder den för att komma åt andra resurser.

Viktigt!

Eftersom hanterade identiteter inte stöder scenarier mellan kataloger fungerar 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.

Kommentar

Hanterade identiteter är inte tillgängliga för appar som distribueras i Azure Arc.

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. Identiteten hanteras av Azure-plattformen och kräver inte att du etablerar eller roterar några hemligheter. Mer information om hanterade identiteter i Microsoft Entra-ID finns i Hanterade identiteter för Azure-resurser.

Ditt program kan beviljas två typer av identiteter:

  • En systemtilldelad identitet är kopplad till ditt program 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.

Konfigurationen av den hanterade identiteten är specifik för facket. Om du vill konfigurera en hanterad identitet för ett distributionsfack i portalen går du först till platsen. Om du vill hitta den hanterade identiteten för webbappen eller distributionsfacket i din Microsoft Entra-klientorganisation från Azure-portalen söker du efter den direkt från översiktssidan för din klientorganisation. Vanligtvis liknar <app-name>/slots/<slot-name>platsnamnet .

Den här videon visar hur du använder hanterade identiteter för App Service.

Stegen i videon beskrivs också i följande avsnitt.

Lägga till en systemtilldelad identitet

  1. I det vänstra navigeringsfönstret på appens sida rullar du ned till gruppen Inställningar.

  2. Välj Identitet.

  3. På fliken Systemtilldelat växlar du Status till . Klicka på Spara.

    Skärmbild som visar var status ska växlas till På och sedan välja Spara.

Lägga till en användartilldelad identitet

Om du skapar en app med en användartilldelad identitet måste du skapa identiteten och sedan lägga till dess resursidentifierare i appkonfigurationen.

Först måste du skapa en användartilldelad identitetsresurs.

  1. Skapa en användartilldelad hanterad identitetsresurs enligt dessa instruktioner.

  2. I det vänstra navigeringsfältet för appens sida rullar du ned till gruppen Inställningar.

  3. Välj Identitet.

  4. Välj Användartilldelade>Lägg till.

  5. Sök efter den identitet som du skapade tidigare, välj den och välj Lägg till.

    Hanterad identitet i App Service

    När du har valt Lägg till startas appen om.

Konfigurera målresurs

Du kan behöva konfigurera målresursen för att tillåta åtkomst från din app eller funktion. Om du till exempel begär en token för att få åtkomst till Key Vault måste du också lägga till en åtkomstprincip som innehåller appens eller funktionens hanterade identitet. Annars avvisas dina anrop till Key Vault, även om du använder en giltig token. Detsamma gäller för Azure SQL Database. 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 sin hanterade identitet kan en app hämta token för Azure-resurser som skyddas av 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.

App Service och Azure Functions tillhandahåller en internt tillgänglig REST-slutpunkt för tokenhämtning. 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 ger Azure Identity-klientbiblioteket en abstraktion över den här REST-slutpunkten och förenklar utvecklingsupplevelsen. Anslut 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 ser ut som i följande exempel:

GET /MSI/token?resource=https://vault.azure.net&api-version=2019-08-01 HTTP/1.1
Host: localhost:4141
X-IDENTITY-HEADER: 853b9a84-5bfa-4b22-a3f3-0b9a43d9ad8a

Och ett exempelsvar kan se ut så här:

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": "5E29463D-71DA-4FE0-8E69-999B57DB23B0"
}

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.

Mer information om REST-slutpunkten finns i REST-slutpunktsreferens.

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.

  1. I det vänstra navigeringsfönstret på appens sida rullar du ned till gruppen Inställningar.

  2. Välj Identitet. Följ sedan stegen baserat på identitetstypen:

    • Systemtilldelad identitet: På fliken Systemtilldelad växlar du Status till Av. Klicka på 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.

Kommentar

Det finns också en programinställning som kan ställas in, WEBSITE_DISABLE_MSI, som bara inaktiverar den lokala tokentjänsten. Den lämnar dock identiteten på plats, och verktygen visar fortfarande den hanterade identiteten som "på" eller "aktiverad". Därför rekommenderas inte användning av 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 – ett huvud som används för att minimera SSRF-attacker (serversidans begärandeförfalskning). Värdet roteras av plattformen.

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, inklusive 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. Detta kan vara en av De Azure-tjänster som stöder Microsoft Entra-autentisering eller någon annan resurs-URI.
api-version Fråga 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. Det här huvudet används för att minimera SSRF-attacker (serversidans begärandeförfalskning).
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.

Nästa steg