Anslut från ditt program till resurser utan att hantera autentiseringsuppgifter

Azure-resurser med stöd för hanterade identiteter ger alltid ett alternativ för att ange en hanterad identitet för att ansluta till Azure-resurser som stöder Microsoft Entra-autentisering. Stöd för hanterade identiteter gör det onödigt för utvecklare att hantera autentiseringsuppgifter i kod. Hanterade identiteter är det rekommenderade autentiseringsalternativet när du arbetar med Azure-resurser som stöder dem. Läs en översikt över hanterade identiteter.

Den här sidan visar hur du konfigurerar en App Service så att den kan ansluta till Azure Key Vault, Azure Storage och Microsoft SQL Server. Samma principer kan användas för alla Azure-resurser som stöder hanterade identiteter och som ansluter till resurser som stöder Microsoft Entra-autentisering.

Kodexemplen använder Azure Identity-klientbiblioteket, vilket är den rekommenderade metoden eftersom det automatiskt hanterar många av stegen åt dig, inklusive att hämta en åtkomsttoken som används i anslutningen.

Vilka resurser kan hanterade identiteter ansluta till?

En hanterad identitet kan ansluta till alla resurser som stöder Microsoft Entra-autentisering. I allmänhet krävs inget särskilt stöd för resursen för att tillåta att hanterade identiteter ansluter till den.

Vissa resurser stöder inte Microsoft Entra-autentisering, eller så har deras klientbibliotek inte stöd för autentisering med en token. Fortsätt läsa för att se vår vägledning om hur du använder en hanterad identitet för att på ett säkert sätt komma åt autentiseringsuppgifterna utan att behöva lagra dem i din kod- eller programkonfiguration.

Skapa en hanterad identitet

Det finns två typer av hanterad identitet: systemtilldelad och användartilldelad. Systemtilldelade identiteter är direkt länkade till en enda Azure-resurs. När Azure-resursen tas bort, så är även identiteten. En användartilldelad hanterad identitet kan associeras med flera Azure-resurser och dess livscykel är oberoende av dessa resurser.

Den här artikeln beskriver hur du skapar och konfigurerar en användartilldelad hanterad identitet, vilket rekommenderas för de flesta scenarier. Om källresursen som du använder inte stöder användartilldelade hanterade identiteter bör du läsa den resursproviderns dokumentation för att lära dig hur du konfigurerar den så att den har en systemtilldelad hanterad identitet.

Skapa en användartilldelad hanterad identitet

Kommentar

Du behöver en roll som "Hanterad identitetsdeltagare" för att skapa en ny användartilldelad hanterad identitet.

  1. Sök efter "Hanterade identiteter" i sökfältet överst i portalen och välj matchande resultat.

Screenshot of searching for managed identities in the portal.

  1. Välj knappen "Skapa".

Screenshot showing a managed identity create button in the portal.

  1. Välj gruppen Prenumeration och resurs och ange ett namn för den hanterade identiteten.

Screenshot showing a managed identity create screen in the portal.

  1. Välj Granska + skapa för att köra valideringstestet och välj sedan knappen "Skapa".

  2. När identiteten har skapats visas en bekräftelseskärm.

Screenshot showing a managed identity confirmation screen after creation in the portal.

Nu har du en identitet som kan associeras med en Azure-källresurs. Läs mer om att hantera användartilldelade hanterade identiteter..

Konfigurera källresursen så att den använder en användartilldelad hanterad identitet

Följ de här stegen för att konfigurera din Azure-resurs så att den har en hanterad identitet via portalen. I dokumentationen för den specifika resurstypen får du lära dig hur du konfigurerar resursens identitet med hjälp av kommandoradsgränssnittet, PowerShell eller ARM-mallen.

Kommentar

Du behöver "Skriv"-behörigheter för att konfigurera en Azure-resurs för att ha en systemtilldelad identitet. Du behöver en roll som "Hanterad identitetsoperatör" för att associera en användartilldelad identitet med en Azure-resurs.

  1. Leta upp resursen med hjälp av sökfältet överst i portalen

Screenshot showing a resource being searched for in the portal.

  1. Välj identitetslänken i navigeringen

Screenshot showing the link to the identity screen for a resource in the portal.

  1. Välj fliken "Användartilldelad"

  2. Välj knappen Lägg till

Screenshot showing a user-assigned identity screen in the portal.

  1. Välj den användartilldelade identitet som du skapade tidigare och välj "Lägg till"

Screenshot showing a user-assigned identity being selected in the portal.

  1. Identiteten associeras med resursen och listan uppdateras.

Screenshot showing a user-assigned identity has been associated with the Azure resource in the portal.

Källresursen har nu en användartilldelad identitet som den kan använda för att ansluta till målresurser.

Lägga till behörigheter till identiteten

Kommentar

Du behöver en roll som "Administratör för användaråtkomst" eller "Ägare" för målresursen för att lägga till rolltilldelningar. Se till att du beviljar den lägsta behörighet som krävs för att programmet ska kunna köras.

Nu när Din App Service har en hanterad identitet måste du ge identiteten rätt behörigheter. När du använder den här identiteten för att interagera med Azure Storage använder du RBAC-systemet (Azure Role Based Access Control).

  1. Leta upp den resurs som du vill ansluta till med hjälp av sökfältet överst i portalen
  2. Välj länken "Åtkomstkontroll (IAM)" i det vänstra navigeringsfältet.

Screenshot showing a resource summary screen in the portal.

  1. Välj knappen "Lägg till" längst upp på skärmen och välj "Lägg till rolltilldelning".

Screenshot showing the add role assignment navigation in the portal.

  1. En lista över roller visas. Du kan se de specifika behörigheter som en roll har genom att välja länken "Visa". Välj den roll som du vill bevilja identiteten och välj knappen "Nästa".

Screenshot showing a role being selected in the portal.

  1. Du uppmanas att välja vem rollen ska beviljas till. Välj alternativet "Hanterad identitet" och sedan länken "Lägg till medlemmar".

Screenshot showing the identity type being selected in the portal.

  1. Ett kontextfönster visas till höger där du kan söka efter typen av hanterad identitet. Välj "Användartilldelad hanterad identitet" från alternativet "Hanterad identitet".

Screenshot showing managed identity being selected in the portal.

  1. Välj den identitet som du skapade tidigare och knappen "Välj". Kontextfönstret stängs och identiteten läggs till i listan.

Screenshot showing an identity being added to a resource in the portal.

  1. Välj knappen "Granska + tilldela" för att visa sammanfattningen av rolltilldelningen och bekräfta sedan igen.
  2. Välj alternativet Rolltilldelningar så visas en lista över rolltilldelningarna för resursen.

Screenshot showing the role assignment has been added in the portal.

Din hanterade identitet har nu rätt behörighet att komma åt Azure-målresursen. Läs mer om rollbaserad åtkomstkontroll i Azure.

Använda den hanterade identiteten i koden

Din App Service har nu en hanterad identitet med behörigheter. Du kan använda den hanterade identiteten i koden för att interagera med målresurser i stället för att lagra autentiseringsuppgifter i koden.

Den rekommenderade metoden är att använda Azure Identity-biblioteket för önskat programmeringsspråk. De språk som stöds är .NET, Java, JavaScript, Python, Go och C++. Biblioteket hämtar åtkomsttoken åt dig, vilket gör det enkelt att ansluta till målresurser.

Använda Azure Identity-biblioteket i utvecklingsmiljön

Förutom C++-biblioteket stöder Azure Identity-biblioteken en DefaultAzureCredential typ. DefaultAzureCredential försöker automatiskt autentisera via flera mekanismer, inklusive miljövariabler eller en interaktiv inloggning. Autentiseringstypen kan användas i utvecklingsmiljön med dina egna autentiseringsuppgifter. Den kan också användas i din Azure-produktionsmiljö med hjälp av en hanterad identitet. Inga kodändringar krävs när du distribuerar ditt program.

Om du använder användartilldelade hanterade identiteter bör du också uttryckligen ange den användartilldelade hanterade identitet som du vill autentisera med genom att skicka in identitetens klient-ID som en parameter. Du kan hämta klient-ID:t genom att bläddra till identiteten i portalen.

Screenshot showing the client ID for the managed identity in the portal.

Läs mer om Azure Identity-biblioteken nedan:

Åtkomst till en blob i Azure Storage

using Azure.Identity;
using Azure.Storage.Blobs;

// code omitted for brevity

// Specify the Client ID if using user-assigned managed identities
var clientID = Environment.GetEnvironmentVariable("Managed_Identity_Client_ID");
var credentialOptions = new DefaultAzureCredentialOptions
{
    ManagedIdentityClientId = clientID
};
var credential = new DefaultAzureCredential(credentialOptions);                        

var blobServiceClient1 = new BlobServiceClient(new Uri("<URI of Storage account>"), credential);
BlobContainerClient containerClient1 = blobServiceClient1.GetBlobContainerClient("<name of blob>");
BlobClient blobClient1 = containerClient1.GetBlobClient("<name of file>");

if (blobClient1.Exists())
{
    var downloadedBlob = blobClient1.Download();
    string blobContents = downloadedBlob.Value.Content.ToString();                
}

Komma åt en hemlighet som lagras i Azure Key Vault

using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
using Azure.Core;

// code omitted for brevity

// Specify the Client ID if using user-assigned managed identities
var clientID = Environment.GetEnvironmentVariable("Managed_Identity_Client_ID");
var credentialOptions = new DefaultAzureCredentialOptions
{
    ManagedIdentityClientId = clientID
};
var credential = new DefaultAzureCredential(credentialOptions);        

var client = new SecretClient(
    new Uri("https://<your-unique-key-vault-name>.vault.azure.net/"),
    credential);
    
KeyVaultSecret secret = client.GetSecret("<my secret>");
string secretValue = secret.Value;

Åtkomst till Azure SQL Database

using Azure.Identity;
using Microsoft.Data.SqlClient;

// code omitted for brevity

// Specify the Client ID if using user-assigned managed identities
var clientID = Environment.GetEnvironmentVariable("Managed_Identity_Client_ID");
var credentialOptions = new DefaultAzureCredentialOptions
{
    ManagedIdentityClientId = clientID
};

AccessToken accessToken = await new DefaultAzureCredential(credentialOptions).GetTokenAsync(
    new TokenRequestContext(new string[] { "https://database.windows.net//.default" }));                        

using var connection = new SqlConnection("Server=<DB Server>; Database=<DB Name>;")
{
    AccessToken = accessToken.Token
};
var cmd = new SqlCommand("select top 1 ColumnName from TableName", connection);
await connection.OpenAsync();
SqlDataReader dr = cmd.ExecuteReader();
while(dr.Read())
{
    Console.WriteLine(dr.GetValue(0).ToString());
}
dr.Close();	

Anslut till resurser som inte stöder Microsoft Entra-ID eller tokenbaserad autentisering i bibliotek

Vissa Azure-resurser har antingen inte stöd för Microsoft Entra-autentisering ännu, eller så har deras klientbibliotek inte stöd för autentisering med en token. Dessa resurser är vanligtvis tekniker med öppen källkod som förväntar sig ett användarnamn och lösenord eller en åtkomstnyckel i en anslutningssträng.

Om du vill undvika att lagra autentiseringsuppgifter i koden eller programkonfigurationen kan du lagra autentiseringsuppgifterna som en hemlighet i Azure Key Vault. Med exemplet ovan kan du hämta hemligheten från Azure KeyVault med hjälp av en hanterad identitet och skicka autentiseringsuppgifterna till din anslutningssträng. Den här metoden innebär att inga autentiseringsuppgifter behöver hanteras direkt i din kod eller miljö.

Riktlinjer om du hanterar token direkt

I vissa scenarier kanske du vill hämta token för hanterade identiteter manuellt i stället för att använda en inbyggd metod för att ansluta till målresursen. Dessa scenarier omfattar inget klientbibliotek för det programmeringsspråk som du använder eller målresursen som du ansluter till eller ansluter till resurser som inte körs i Azure. När du hämtar token manuellt tillhandahåller vi följande riktlinjer:

Cachelagrar de token som du hämtar

För prestanda och tillförlitlighet rekommenderar vi att ditt program cachelagrar token i lokalt minne eller krypteras om du vill spara dem på disk. Eftersom hanterade identitetstoken är giltiga i 24 timmar finns det ingen fördel med att begära nya token regelbundet, eftersom en cachelagrad token returneras från den token som utfärdar slutpunkten. Om du överskrider begärandegränserna kommer du att vara begränsad och få ett HTTP 429-fel.

När du skaffar en token kan du ange att din tokencache upphör att gälla 5 minuter före den expires_on (eller motsvarande egenskap) som returneras när token genereras.

Tokenkontroll

Programmet bör inte förlita sig på innehållet i en token. Tokens innehåll är endast avsett för målgruppen (målresursen) som används, inte den klient som begär token. Tokeninnehållet kan ändras eller krypteras i framtiden.

Exponera eller flytta inte token

Token ska behandlas som autentiseringsuppgifter. Exponera dem inte för användare eller andra tjänster. till exempel loggnings-/övervakningslösningar. De bör inte flyttas från källresursen som använder dem, förutom för att autentisera mot målresursen.

Nästa steg