Verbinding maken vanuit uw toepassing met resources zonder referenties te verwerken

Azure-resources met beheerde identiteiten ondersteunen altijd een optie om een beheerde identiteit op te geven om verbinding te maken met Azure-resources die ondersteuning bieden voor Microsoft Entra-verificatie. Door de ondersteuning voor beheerde identiteiten hoeven ontwikkelaars geen referenties in code te beheren. Beheerde identiteiten zijn de aanbevolen verificatieoptie bij het werken met Azure-resources die deze ondersteunen. Bekijk een overzicht van beheerde identiteiten.

Op deze pagina ziet u hoe u een App Service zo configureert dat deze verbinding kan maken met Azure Key Vault, Azure Storage en Microsoft SQL Server. Dezelfde principes kunnen worden gebruikt voor elke Azure-resource die beheerde identiteiten ondersteunt en die verbinding maken met resources die ondersteuning bieden voor Microsoft Entra-verificatie.

De codevoorbeelden maken gebruik van de Azure Identity-clientbibliotheek. Dit is de aanbevolen methode, omdat deze automatisch veel van de stappen voor u verwerkt, waaronder het verkrijgen van een toegangstoken dat in de verbinding wordt gebruikt.

Met welke resources kunnen beheerde identiteiten verbinding maken?

Een beheerde identiteit kan verbinding maken met elke resource die ondersteuning biedt voor Microsoft Entra-verificatie. Over het algemeen is er geen speciale ondersteuning vereist voor de resource om beheerde identiteiten verbinding te laten maken.

Sommige resources bieden geen ondersteuning voor Microsoft Entra-verificatie of de clientbibliotheek biedt geen ondersteuning voor verificatie met een token. Lees verder om onze richtlijnen te bekijken over het gebruik van een beheerde identiteit om veilig toegang te krijgen tot de referenties zonder ze op te slaan in uw code of toepassingsconfiguratie.

Een beheerde identiteit maken

Er zijn twee typen beheerde identiteiten: door het systeem toegewezen en door de gebruiker toegewezen. Door het systeem toegewezen identiteiten worden rechtstreeks gekoppeld aan één Azure-resource. Als de Azure-resource wordt verwijderd, wordt ook de identiteit verwijderd. Een door de gebruiker toegewezen beheerde identiteit kan worden gekoppeld aan meerdere Azure-resources en de levenscyclus ervan is onafhankelijk van deze resources.

In dit artikel wordt uitgelegd hoe u een door de gebruiker toegewezen beheerde identiteit maakt en configureert. Dit wordt aanbevolen voor de meeste scenario's. Als de bronresource die u gebruikt geen ondersteuning biedt voor door de gebruiker toegewezen beheerde identiteiten, raadpleegt u de documentatie van die resourceprovider om te leren hoe u deze configureert voor een door het systeem toegewezen beheerde identiteit.

Een door de gebruiker toegewezen beheerde identiteit maken

Notitie

U hebt een rol nodig, zoals Inzender beheerde identiteit om een nieuwe door de gebruiker toegewezen beheerde identiteit te maken.

  1. Zoek in de zoekbalk boven in de portal Beheerde identiteiten en selecteer het overeenkomende resultaat.

Screenshot of searching for managed identities in the portal.

  1. Selecteer de knop Maken.

Screenshot showing a managed identity create button in the portal.

  1. Selecteer het abonnement en de resourcegroep, en voer een naam in voor de beheerde identiteit.

Screenshot showing a managed identity create screen in the portal.

  1. Selecteer Controleren en maken om de validatietest uit te voeren en selecteer vervolgens de knop Maken.

  2. Wanneer de identiteit is gemaakt, wordt er een bevestigingsscherm weergegeven.

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

U hebt nu een identiteit die kan worden gekoppeld aan een Azure-bronresource. Lees meer over het beheren van door de gebruiker toegewezen beheerde identiteiten..

Uw bronresource configureren voor het gebruik van een door de gebruiker toegewezen beheerde identiteit

Volg deze stappen om uw Azure-resource te configureren voor een beheerde identiteit via de portal. Raadpleeg de documentatie voor het specifieke resourcetype voor meer informatie over het configureren van de identiteit van de resource met behulp van de opdrachtregelinterface, PowerShell of ARM-sjabloon.

Notitie

U hebt schrijfmachtigingen nodig om een Azure-resource te configureren voor een door het systeem toegewezen identiteit. U hebt een rol nodig, zoals Operator voor beheerde identiteit, om een door de gebruiker toegewezen identiteit te koppelen aan een Azure-resource.

  1. Zoek de resource met behulp van de zoekbalk boven in de portal

Screenshot showing a resource being searched for in the portal.

  1. Selecteer de koppeling Identiteit in de navigatie

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

  1. Selecteer het tabblad Door de gebruiker toegewezen

  2. Selecteer de knop Toevoegen

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

  1. Selecteer de door de gebruiker toegewezen identiteit die u eerder hebt gemaakt en selecteer Toevoegen

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

  1. De identiteit wordt gekoppeld aan de resource en de lijst wordt bijgewerkt.

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

Uw bronresource heeft nu een door de gebruiker toegewezen identiteit die kan worden gebruikt om verbinding te maken met doelresources.

Machtigingen toevoegen aan de identiteit

Notitie

U hebt een rol nodig, zoals Beheerder van gebruikerstoegang of Eigenaar voor de doelresource om roltoewijzingen toe te voegen. Zorg ervoor dat u de minimale bevoegdheid verleent die nodig is om de toepassing uit te voeren.

Nu uw App Service een beheerde identiteit heeft, moet u de identiteit de juiste machtigingen geven. Wanneer u deze identiteit gebruikt om te communiceren met Azure Storage, gebruikt u het RBAC-systeem (Role Based Access Control, Op rollen gebaseerde toegangsbeheer) van Azure.

  1. Zoek de resource waarmee u verbinding wilt maken met behulp van de zoekbalk boven in de portal
  2. Selecteer de koppeling Access Control (IAM) in het navigatiegedeelte links.

Screenshot showing a resource summary screen in the portal.

  1. Selecteer de knop Toevoegen boven in het scherm en selecteer Roltoewijzing toevoegen.

Screenshot showing the add role assignment navigation in the portal.

  1. Er wordt een lijst met rollen weergegeven. U kunt de specifieke machtigingen zien die een rol heeft door de koppeling Weergeven te selecteren. Selecteer de rol die u aan de identiteit wilt toekennen en selecteer de knop Volgende.

Screenshot showing a role being selected in the portal.

  1. U wordt gevraagd te selecteren aan wie de rol moet worden toegekend. Selecteer de optie Beheerde identiteit en vervolgens de koppeling Leden toevoegen.

Screenshot showing the identity type being selected in the portal.

  1. Aan de rechterkant wordt een contextvenster weergegeven waar u kunt zoeken op het type beheerde identiteit. Selecteer Door de gebruiker toegewezen beheerde identiteit in de optie Beheerde identiteit.

Screenshot showing managed identity being selected in the portal.

  1. Selecteer de identiteit die u eerder hebt gemaakt en de knop Selecteren. Het contextvenster wordt gesloten en de identiteit wordt toegevoegd aan de lijst.

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

  1. Selecteer de knop Controleren en toewijzen om het overzicht van de roltoewijzing weer te geven en vervolgens nogmaals om te bevestigen.
  2. Selecteer de optie Roltoewijzingen. Hierop wordt een lijst met de roltoewijzingen voor de resource weergegeven.

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

Uw beheerde identiteit heeft nu de juiste machtigingen voor toegang tot de Azure-doelresource. Meer informatie over op rollen gebaseerd toegangsbeheer van Azure.

De beheerde identiteit in uw code gebruiken

Uw App Service heeft nu een beheerde identiteit met machtigingen. U kunt de beheerde identiteit in uw code gebruiken om te communiceren met doelresources. U hoeft dan geen referenties op te slaan in uw code.

De aanbevolen methode is om de Azure Identity-bibliotheek te gebruiken voor de programmeertaal van uw voorkeur. De ondersteunde talen omvatten .NET, Java, JavaScript, Python, Go en C++. De bibliotheek verkrijgt toegangstokens voor u, waardoor het eenvoudig is om verbinding te maken met doelresources.

De Azure Identity-bibliotheek gebruiken in uw ontwikkelomgeving

Met uitzondering van de C++-bibliotheek ondersteunen de Azure Identity-bibliotheken een DefaultAzureCredential-type. DefaultAzureCredential probeert automatisch te verifiëren via meerdere mechanismen, waaronder omgevingsvariabelen of een interactieve aanmelding. Het referentietype kan worden gebruikt in uw ontwikkelomgeving met gebruikmaking van uw eigen referenties. Het kan ook worden gebruikt in uw Azure-productieomgeving met gebruikmaking van een beheerde identiteit. Er zijn geen codewijzigingen vereist wanneer u uw toepassing implementeert.

Als u door de gebruiker toegewezen beheerde identiteiten gebruikt, moet u ook expliciet de door de gebruiker toegewezen beheerde identiteit opgeven waarmee u zich wilt verifiëren door de client-id van de identiteit door te geven als parameter. U kunt de client-id ophalen door te bladeren naar de identiteit in de portal.

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

Lees meer over de Azure Identity-bibliotheken hieronder:

Toegang tot een blob in 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();                
}

Toegang tot een geheim dat is opgeslagen in 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;

Toegang tot 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();	

Verbinding maken resources die geen ondersteuning bieden voor Verificatie op basis van Microsoft Entra ID of token in bibliotheken

Sommige Azure-resources bieden nog geen ondersteuning voor Microsoft Entra-verificatie of hun clientbibliotheken bieden geen ondersteuning voor verificatie met een token. Deze resources zijn doorgaans opensource-technologieën waarvoor een gebruikersnaam en wachtwoord of een toegangssleutel in een verbindingsreeks wordt verwacht.

Als u wilt voorkomen dat referenties moeten worden opgeslagen in uw code of de configuratie van uw toepassing, kunt u de referenties opslaan als een geheim in Azure Key Vault. Met behulp van het bovenstaande voorbeeld kunt u het geheim ophalen uit Azure Key Vault door gebruik te maken van een beheerde identiteit en de referenties doorgeven aan uw verbindingsreeks. Deze methode betekent dat er geen referenties rechtstreeks in uw code of omgeving hoeven worden verwerkt.

Richtlijnen wanneer u rechtstreeks tokens verwerkt

In sommige scenario's kunt u tokens voor beheerde identiteiten handmatig verkrijgen in plaats van een ingebouwde methode te gebruiken om verbinding te maken met de doelresource. Deze scenario's omvatten geen clientbibliotheek voor de programmeertaal die u gebruikt of de doelresource waarmee u verbinding maakt, of verbinding maken met resources die niet worden uitgevoerd in Azure. Bij het handmatig verkrijgen van tokens bieden we de volgende richtlijnen:

De verkregen tokens in cache plaatsen

Voor prestaties en betrouwbaarheid wordt aanbevolen tokens in het lokale geheugen op te slaan, of versleuteld als u ze op schijf wilt opslaan. Aangezien tokens voor beheerde identiteiten 24 uur geldig zijn, is het niet handig om regelmatig nieuwe tokens aan te vragen, omdat er een uit de cache wordt geretourneerd door het eindpunt dat tokens uitgeeft. Als u de aanvraaglimieten overschrijdt, wordt de snelheid beperkt en wordt er een HTTP 429-fout weergegeven.

Wanneer u een token verkrijgt, kunt u instellen dat de tokencache verloopt 5 minuten voor de expires_on (of equivalente eigenschap) die wordt geretourneerd wanneer het token wordt gegenereerd.

Tokeninspectie

Uw toepassing mag niet afhankelijk zijn van de inhoud van een token. De inhoud van het token is alleen bedoeld voor de doelgroep (doelresource) waartoe toegang wordt verkregen, niet de client die het token aanvraagt. De tokeninhoud kan in de toekomst worden gewijzigd of versleuteld.

Geen tokens beschikbaar maken of verplaatsen

Tokens moeten worden behandeld als referenties. Maak ze niet beschikbaar voor gebruikers of andere services, zoals oplossingen voor logboekregistratie/bewaking. Ze mogen niet worden verplaatst van de bronresource die ze gebruikt, behalve voor verificatie met de doelresource.

Volgende stappen