Herstellen einer Verbindung Ihrer Anwendung mit Ressourcen ohne Verarbeitung von Anmeldeinformationen

Azure-Ressourcen mit Unterstützung verwalteter Identitäten bieten stets eine Option zur Angabe einer verwalteten Identität zum Herstellen einer Verbindung mit Azure-Ressourcen, die die Microsoft Entra-Authentifizierung unterstützen. Die Unterstützung verwalteter Identitäten macht es für Entwickler unnötig, Anmeldeinformationen im Code zu verwalten. Verwaltete Identitäten sind die empfohlene Authentifizierungsoption beim Arbeiten mit Azure-Ressourcen, die sie unterstützen. Verschaffen Sie sich einen Überblick über verwaltete Identitäten.

Auf dieser Seite wird gezeigt, wie Sie eine App Service-Instanz so konfigurieren, dass sie sich mit Azure Key Vault, Azure Storage und Microsoft SQL Server verbinden kann. Die gleichen Prinzipien gelten für jede Azure-Ressource, die verwaltete Identitäten unterstützt und die sich mit Ressourcen verbindet, die die Microsoft Entra-Authentifizierung unterstützen.

In den Codebeispielen wird die Azure Identity-Clientbibliothek verwendet, die empfohlen wird, da sie viele der Schritte automatisch für Sie erledigt. So z. B. auch des Beziehens eines Tokens für den Zugriff, das für die Verbindung verwendet wird.

Mit welchen Ressourcen können sich verwaltete Identitäten verbinden?

Eine verwaltete Identität kann eine Verbindung mit jeder Ressource herstellen, die Microsoft Entra-Authentifizierung unterstützt. Im Allgemeinen ist keine besondere Unterstützung für die Ressource erforderlich, damit verwaltete Identitäten sich mit ihr verbinden können.

Einige Ressourcen unterstützen die Microsoft Entra-Authentifizierung nicht, oder ihre Clientbibliothek unterstützt die Authentifizierung mit einem Token nicht. Lesen Sie weiter, um zu erfahren, wie Sie mit einer verwalteten Identität einen sicheren Zugriff auf die Anmeldeinformationen erhalten, ohne sie in Ihrem Code oder Ihrer Anwendungskonfiguration speichern zu müssen.

Erstellen einer verwalteten Identität

Es gibt zwei Arten von verwalteten Identitäten: systemseitig und benutzerseitig zugewiesene Identitäten. Systemseitig zugewiesene Identitäten werden direkt mit einer einzelnen Azure-Ressource verknüpft. Wenn die Azure-Ressource gelöscht wird, gilt dies auch für die Identität. Eine benutzerseitig zugewiesene verwaltete Identität kann mehreren Azure-Ressourcen zugeordnet werden, wobei ihr Lebenszyklus unabhängig von diesen Ressourcen ist.

In diesem Artikel wird erläutert, wie Sie eine benutzerseitig zugewiesene verwaltete Identität erstellen und konfigurieren, die für die meisten Szenarien empfohlen wird. Wenn die von Ihnen verwendete Quellressource keine benutzerseitig zugewiesenen verwalteten Identitäten unterstützt, konsultieren Sie die Dokumentation zu diesem Ressourcenanbieter, um zu erfahren, wie Sie sie für eine systemseitig zugewiesene verwaltete Identität konfigurieren können.

Erstellen einer benutzerseitig zugewiesenen verwalteten Identität

Hinweis

Sie benötigen eine Rolle wie „Mitwirkender für verwaltete Identität“, um eine neue benutzerseitig zugewiesene verwaltete Identität zu erstellen.

  1. Suchen Sie oben im Portal nach „Verwaltete Identitäten“, und wählen Sie den passenden Treffer aus.

Screenshot of searching for managed identities in the portal.

  1. Wählen Sie die Schaltfläche „Erstellen“ aus.

Screenshot showing a managed identity create button in the portal.

  1. Wählen Sie das Abonnement und die Ressourcengruppe aus, und geben Sie einen Namen für die verwaltete Identität ein.

Screenshot showing a managed identity create screen in the portal.

  1. Wählen Sie „Überprüfen + erstellen“ aus, um den Überprüfungstest auszuführen, und wählen Sie dann die Schaltfläche „Erstellen“ aus.

  2. Nachdem die Identität erstellt wurde, wird ein Bestätigungsbildschirm angezeigt.

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

Sie verfügen jetzt über eine Identität, die einer Azure-Quellressource zugeordnet werden kann. Erfahren Sie mehr über das Verwalten benutzerseitig zugewiesener verwalteter Identitäten.

Konfigurieren der Quellressource zur Verwendung einer vom Benutzer zugewiesenen verwalteten Identität

Folgen Sie diesen Anweisungen, um Ihre Azure-Ressource im Portal für eine verwaltete Identität zu konfigurieren. In der Dokumentation des jeweiligen Ressourcentyps erfahren Sie, wie Sie die Identität der Ressource mithilfe der Befehlszeilenschnittstelle, von PowerShell oder der ARM-Vorlage konfigurieren können.

Hinweis

Sie benötigen die Berechtigung „Schreiben“, um eine Azure-Ressource so zu konfigurieren, dass sie eine systemseitig zugewiesene Identität hat. Sie benötigen eine Rolle wie „Operator für verwaltete Identität“, um eine benutzerseitig zugewiesene Identität einer Azure-Ressource zuzuordnen.

  1. Suchen Sie die Ressource über die Suchleiste oben im Portal.

Screenshot showing a resource being searched for in the portal.

  1. Wählen Sie im Navigationsbereich den Link „Identität“ aus.

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

  1. Wählen Sie die Registerkarte „Benutzerseitig zugewiesen“ aus.

  2. Wählen Sie die Schaltfläche „Hinzufügen“ aus.

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

  1. Wählen Sie die zuvor erstellte benutzerseitig zugewiesene Identität und dann „Hinzufügen“ aus.

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

  1. Die Identität wird der Ressource zugeordnet, die Liste aktualisiert.

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

Ihre Quellressource verfügt nun über eine benutzerseitig zugewiesene Identität, mit der sie sich mit Zielressourcen verbinden kann.

Hinzufügen von Berechtigungen zur Identität

Hinweis

Sie benötigen eine Rolle wie „Benutzerzugriffsadministrator“ oder „Besitzer“ für die Zielressource, um Rollenzuweisungen hinzufügen zu können. Stellen Sie sicher, dass Sie die geringsten Rechte gewähren, die für die Ausführung der Anwendung erforderlich sind.

Da Ihre App Service-Instanz nun über eine verwaltete Identität verfügt, müssen Sie der Identität die entsprechenden Berechtigungen erteilen. Bei Verwenden dieser Identität zur Interaktion mit Azure Storage verwenden Sie das Azure-System der rollenbasierten Zugriffssteuerung (RBAC).

  1. Suchen Sie die Ressource, mit der Sie sich verbinden möchten, über die Suchleiste oben im Portal.
  2. Wählen Sie im linken Navigationsbereich den Link „Zugriffssteuerung (IAM)“ aus.

Screenshot showing a resource summary screen in the portal.

  1. Wählen Sie oben auf dem Bildschirm die Schaltfläche „Hinzufügen“ und dann „Rollenzuweisung hinzufügen“ aus.

Screenshot showing the add role assignment navigation in the portal.

  1. Eine Liste der Rollen wird angezeigt. Sie können die spezifischen Berechtigungen einer Rolle anzeigen, indem Sie den Link „Ansicht“ auswählen. Wählen Sie die Rolle aus, die Sie der Identität zuweisen möchten, und dann die Schaltfläche „Weiter“ aus.

Screenshot showing a role being selected in the portal.

  1. Sie werden aufgefordert auszuwählen, wem die Rolle zugewiesen werden soll. Wählen Sie die Option „Verwaltete Identität“ und dann den Link „Mitglieder hinzufügen“ aus.

Screenshot showing the identity type being selected in the portal.

  1. Ein Kontextbereich wird rechts angezeigt, in dem Sie nach dem Typ der verwalteten Identität suchen können. Wählen Sie unter „Verwaltete Identität“ die Option „Benutzerseitig zugewiesene verwaltete Identität“ aus.

Screenshot showing managed identity being selected in the portal.

  1. Wählen Sie die Identität, die Sie zuvor erstellt haben, und dann die Schaltfläche „Auswählen“ aus. Der Kontextbereich wird geschlossen, die Identität zur Liste hinzugefügt.

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

  1. Wählen Sie zunächst die Schaltfläche „Überprüfen + zuweisen“ aus, um die Übersicht über die Rollenzuweisung anzuzeigen, und dann erneut aus, um sie zu bestätigen.
  2. Wählen Sie die Option „Rollenzuweisungen“ aus. Daraufhin wird eine Liste der Rollenzuweisungen für die Ressource angezeigt.

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

Ihre verwaltete Identität verfügt jetzt über die benötigten Berechtigungen für den Zugriff auf die Azure-Zielressource. Erfahren Sie mehr über die rollenbasierte Zugriffssteuerung in Azure.

Verwenden der verwalteten Identität in Ihrem Code

Ihre App Service-Instanz verfügt jetzt über eine verwaltete Identität mit Berechtigungen. Zur Interaktion mit Zielressourcen können Sie die verwaltete Identität in Ihrem Code verwenden, anstatt Anmeldeinformationen in Ihrem Code zu speichern.

Die empfohlene Methode ist die Verwendung der Azure Identity-Bibliothek für Ihre bevorzugte Programmiersprache. Unterstützte Sprachen sind .NET, Java, JavaScript, Python, Go und C++. Die Bibliothek bezieht Zugriffstoken für Sie, sodass Sie sich ganz einfach mit Zielressourcen verbinden können.

Verwenden der Azure Identity-Bibliothek in Ihrer Entwicklungsumgebung

Mit Ausnahme der C++-Bibliothek unterstützen die Azure Identity-Bibliotheken den Typ DefaultAzureCredential. DefaultAzureCredential versucht automatisch, sich über mehrere Mechanismen zu authentifizieren, darunter Umgebungsvariablen oder interaktive Anmeldung. Der Anmeldeinformationstyp kann in Ihrer Entwicklungsumgebung mit Ihren eigenen Anmeldeinformationen verwendet werden. Er kann auch in Ihrer Azure-Produktionsumgebung mithilfe einer verwalteten Identität verwendet werden. Zur Bereitstellung Ihrer Anwendung sind keine Codeänderungen erforderlich.

Wenn Sie benutzerseitig zugewiesene verwaltete Identitäten verwenden, sollten Sie auch die benutzerseitig zugewiesene verwaltete Identität, mit der Sie sich authentifizieren möchten, explizit angeben, indem Sie die Client-ID der Identität als Parameter übergeben. Sie können die Client-ID abrufen, indem Sie im Portal zur Identität navigieren.

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

Weitere Informationen zu den Azure Identity-Bibliotheken finden Sie unter:

Zugreifen auf ein 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();                
}

Zugreifen auf ein in Azure Key Vault gespeichertes Geheimnis

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;

Zugreifen auf Azure SQL-Datenbank

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

Herstellen einer Verbindung mit Ressourcen, die die Microsoft Entra ID- oder tokenbasierte Authentifizierung in Bibliotheken nicht unterstützen

Einige Azure-Ressourcen unterstützen die Microsoft Entra-Authentifizierung entweder noch nicht, oder ihre Clientbibliotheken unterstützen nicht die Authentifizierung mit einem Token. In der Regel handelt es sich bei diesen Ressourcen um Open-Source-Technologien, die einen Benutzernamen und ein Kennwort bzw. einen Zugriffsschlüssel in einer Verbindungszeichenfolge erwarten.

Um das Speichern von Anmeldeinformationen in Ihrem Code oder Ihrer Anwendungskonfiguration zu vermeiden, können Sie die Anmeldeinformationen als Geheimnis in Azure Key Vault speichern. Anhand des oben gezeigten Beispiels können Sie das Geheimnis mit einer verwalteten Identität aus Azure KeyVault abrufen und die Anmeldeinformationen an Ihre Verbindungszeichenfolge übergeben. Dieser Ansatz bedeutet, dass keine Anmeldeinformationen direkt in Ihrem Code oder Ihrer Umgebung verarbeitet werden müssen.

Leitlinien, wenn Sie Token direkt verarbeiten

In einigen Szenarien möchten Sie möglicherweise Token für verwaltete Identitäten manuell beziehen, anstatt eine integrierte Methode zu verwenden, um eine Verbindung mit der Zielressource herzustellen. Diese Szenarien sehen keine Clientbibliothek für die von Ihnen verwendete Programmiersprache oder die Zielressource vor, mit der Sie sich verbinden, oder Sie verbinden sich mit Ressourcen, die nicht in Azure ausgeführt werden. Befolgen Sie beim manuellen Beziehen von Token die folgenden Leitlinien:

Zwischenspeichern der bezogenen Token

Aus Gründen der Leistung und Zuverlässigkeit empfehlen wir, dass Ihre Anwendung Token im lokalen Arbeitsspeicher zwischengespeichert oder verschlüsselt, wenn Sie sie auf einem Datenträger speichern möchten. Da Token für verwaltete Identitäten 24 Stunden gültig sind, ist es nicht sinnvoll, regelmäßig neue Token anzufordern, da der das Token ausstellende Endpunkt ein zwischengespeichertes Token zurückgibt. Wenn Sie die Grenzwerte für Anforderungen überschreiten, erfolgen eine Ratenbeschränkung und die Rückgabe des HTTP-Fehlers 429.

Wenn Sie ein Token beziehen, können Sie Ihren Tokencache so festlegen, dass er 5 Minuten vor der expires_on-Eigenschaft (oder einer gleichwertigen Eigenschaft) abläuft, die zurückgegeben wird, wenn das Token generiert wird.

Tokenüberprüfung

Ihre Anwendung sollte sich nicht auf den Inhalt eines Tokens verlassen. Der Inhalt des Tokens ist nur für die Zielgruppe (Zielressource) bestimmt, auf die zugegriffen wird, nicht für den Client, der das Token anfordert. Der Tokeninhalt kann in Zukunft geändert oder verschlüsselt werden.

Token nicht verfügbar machen oder verschieben

Token sollten wie Anmeldeinformationen behandelt werden. Machen Sie sie nicht für Benutzer oder andere Dienste verfügbar, z. B. für Protokollierungs- oder Überwachungslösungen. Sie sollten nicht aus der Quellressource, die sie verwendet, verschoben werden, außer zur Authentifizierung bei der Zielressource.

Nächste Schritte