Tutorial: Verbindungsherstellung mit Azure-Datenbanken über App Service ohne Geheimnisse mithilfe einer verwalteten Identität
Artikel
App Service bietet einen hochgradig skalierbaren Webhostingdienst mit Self-Patching in Azure. Außerdem steht eine verwaltete Identität für Ihre App zur Verfügung, wobei es sich um eine vorgefertigte Lösung zum Schutz des Zugriffs auf Azure-Datenbank handelt, einschließlich:
Verwaltete Identitäten in App Service machen Ihre App frei von Geheimnissen (wie etwa Anmeldeinformationen in Verbindungszeichenfolgen) und verbessern so die Sicherheit Ihrer App. In diesem Tutorial wird gezeigt, wie Sie eine Verbindung mit den oben erwähnten Datenbanken aus App Service mithilfe verwalteter Identitäten herstellen.
Sie lernen Folgendes:
Konfigurieren eines Microsoft Entra-Benutzers oder einer Microsoft Entra-Benutzerin als Administrator*in für Ihre Azure-Datenbank
Herstellen einer Verbindung mit Ihrer Datenbank als Microsoft Entra-Benutzer*in
Konfigurieren einer systemseitig oder benutzerseitig zugewiesenen verwalteten Identität für eine App Service-App.
Gewähren von Datenbankzugriff auf die verwaltete Identität.
Herstellen einer Verbindung mit der Azure-Datenbank aus Ihrem Code (.NET Framework 4.8, .NET 6, Node.js, Python, Java) mithilfe einer verwalteten Identität.
Herstellen einer Verbindung mit der Azure-Datenbank aus Ihrer Entwicklungsumgebung mithilfe des Microsoft Entra-Benutzers oder der Microsoft Entra-Benutzerin
Erstellen Sie eine App in App Service, basierend auf .NET, Node.js, Python oder Java.
Erstellen Sie einen Datenbankserver mit Azure SQL-Datenbank, Azure Database for MySQL oder Azure Database for PostgreSQL.
Sie sollten mit dem Standardkonnektivitätsmuster (mit Benutzername und Kennwort) vertraut und in der Lage sein, eine erfolgreiche Verbindung von Ihrer App Service-App mit Ihrer ausgewählten Datenbank herzustellen.
Wenn Sie CLI-Referenzbefehle lieber lokal ausführen, installieren Sie die Azure CLI. Wenn Sie Windows oder macOS ausführen, sollten Sie die Azure CLI in einem Docker-Container ausführen. Weitere Informationen finden Sie unter Ausführen der Azure CLI in einem Docker-Container.
Wenn Sie eine lokale Installation verwenden, melden Sie sich mithilfe des Befehls az login bei der Azure CLI an. Führen Sie die in Ihrem Terminal angezeigten Schritte aus, um den Authentifizierungsprozess abzuschließen. Informationen zu anderen Anmeldeoptionen finden Sie unter Anmelden mit der Azure CLI.
Installieren Sie die Azure CLI-Erweiterung beim ersten Einsatz, wenn Sie dazu aufgefordert werden. Weitere Informationen zu Erweiterungen finden Sie unter Verwenden von Erweiterungen mit der Azure CLI.
Führen Sie az version aus, um die installierte Version und die abhängigen Bibliotheken zu ermitteln. Führen Sie az upgrade aus, um das Upgrade auf die aktuelle Version durchzuführen.
1. Installieren der kennwortlosen Dienstconnector-Erweiterung
Installieren Sie die aktuelle kennwortlose Dienstconnector-Erweiterung für die Azure CLI:
az extension add --name serviceconnector-passwordless --upgrade
Hinweis
Überprüfen Sie mit az version, ob Sie Version 2.0.2 oder höher der Erweiterung „serviceconnector-passwordless“ ausführen. Möglicherweise müssen Sie zuerst ein Upgrade der Azure CLI durchführen, um die Erweiterungsversion upzugraden.
2. Erstellen einer kennwortlosen Verbindung
Erstellen Sie als nächstes eine kennwortlose Verbindung mit dem Dienstconnector.
Tipp
Das Azure-Portal kann Ihnen beim Verfassen der folgenden Befehle helfen. Wechseln Sie im Azure-Portal zu Ihrer Azure App Service-Ressource, wählen Sie Service Connector im linken Menü aus und wählen Sie Erstellen aus. Füllen Sie das Formular mit allen erforderlichen Parametern aus. Azure generiert automatisch den Verbindungserstellungsbefehl, den Sie kopieren können, um ihn in der CLI zu verwenden oder in Azure Cloud Shell auszuführen.
Für die Azure-Datenbank für MySQL – Flexible Server müssen Sie zuerst die Microsoft Entra-Authentifizierung manuell einrichten, die eine separate vom Benutzer zugewiesene verwaltete Identität und bestimmte Microsoft Graph-Berechtigungen erfordert. Dieser Schritt kann nicht automatisiert werden.
Erteilen der Berechtigung für bereits erstellte Tabellen
Wenn Sie vor der Verwendung des Dienstconnectors Tabellen und Sequenzen auf dem flexiblen PostgreSQL-Server erstellt haben, müssen Sie als Nächstes als der Besitzer eine Verbindung herstellen und dem vom Dienstconnector erstellten <aad-username> die Berechtigung erteilen. Der Benutzername aus der Verbindungszeichenfolge oder der vom Dienstconnector festgelegten Konfiguration sollte aad_<connection name> ähneln. Wenn Sie das Azure-Portal verwenden, wählen Sie die Schaltfläche „erweitern“ neben der Service Type-Spalte aus, und rufen Sie den Wert ab. Wenn Sie die Azure CLI verwenden, überprüfen Sie configurations in der CLI-Befehlsausgabe.
Führen Sie dann die Abfrage aus, um die Berechtigung zu erteilen.
az extension add --name rdbms-connect
az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO \"<aad-username>\";GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO \"<aad username>\";"
Der <owner-username> und das <owner-password> sind der Besitzer einer vorhandenen Tabelle, der anderen Personen Berechtigungen erteilen kann. <aad-username> ist der bzw. die Benutzer*in, der bzw. die vom Dienstconnector erstellt wurde. Ersetzen Sie sie durch den tatsächlichen Wert.
Überprüfen Sie das Ergebnis mit dem folgenden Befehl:
az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "SELECT distinct(table_name) FROM information_schema.table_privileges WHERE grantee='<aad-username>' AND table_schema='public';" --output table
Mit diesem Dienstconnector-Befehl werden die folgenden Aufgaben im Hintergrund ausgeführt:
Aktivieren Sie die vom System zugewiesene verwaltete Identität oder weisen Sie eine Benutzeridentität für die von Azure App Service gehostete <server-name>-App zu.
Legen Sie den Microsoft Entra-Administrator auf den aktuellen angemeldeten Benutzer fest.
Fügen Sie einen Datenbankbenutzer für die vom System zugewiesene verwaltete Identität oder vom Benutzer zugewiesene verwaltete Identität hinzu. Gewähren Sie diesem Benutzer alle Berechtigungen für die Datenbank <database-name>. Der Benutzername befindet sich in der Verbindungszeichenfolge in der vorherigen Befehlsausgabe.
Legen Sie Konfigurationen mit dem Namen AZURE_MYSQL_CONNECTIONSTRING, AZURE_POSTGRESQL_CONNECTIONSTRING oder AZURE_SQL_CONNECTIONSTRING entsprechend dem Datenbanktyp auf die Azure-Ressource fest.
Für App Service werden die Konfigurationen auf dem Blatt App-Einstellungen festgelegt.
Wenn beim Erstellen einer Verbindung Probleme auftreten, finden Sie hier Informationen zur Problembehandlung.
Rufen Sie die Azure SQL-Datenbank-Verbindungszeichenfolge aus der Umgebungsvariable ab, die vom Dienstconnector hinzugefügt wird.
using Microsoft.Data.SqlClient;
// AZURE_SQL_CONNECTIONSTRING should be one of the following:
// For system-assigned managed identity:"Server=tcp:<server-name>.database.windows.net;Database=<database-name>;Authentication=Active Directory Default;TrustServerCertificate=True"
// For user-assigned managed identity: "Server=tcp:<server-name>.database.windows.net;Database=<database-name>;Authentication=Active Directory Default;User Id=<client-id-of-user-assigned-identity>;TrustServerCertificate=True"
string connectionString =
Environment.GetEnvironmentVariable("AZURE_SQL_CONNECTIONSTRING")!;
using var connection = new SqlConnection(connectionString);
connection.Open();
Rufen Sie die Azure SQL-Datenbank-Verbindungskonfigurationen aus der Umgebungsvariable ab, die von Service Connector hinzugefügt wurde. Heben Sie die Auskommentierung des Teils des Codeschnipsels für den Authentifizierungstyp auf, den Sie verwenden möchten.
import os;
import pyodbc
server = os.getenv('AZURE_SQL_SERVER')
port = os.getenv('AZURE_SQL_PORT')
database = os.getenv('AZURE_SQL_DATABASE')
authentication = os.getenv('AZURE_SQL_AUTHENTICATION') # The value should be 'ActiveDirectoryMsi'
# Uncomment the following lines according to the authentication type.
# For system-assigned managed identity.
# connString = f'Driver={{ODBC Driver 18 for SQL Server}};Server={server},{port};Database={database};Authentication={authentication};Encrypt=yes;'
# For user-assigned managed identity.
# client_id = os.getenv('AZURE_SQL_USER')
# connString = f'Driver={{ODBC Driver 18 for SQL Server}};Server={server},{port};Database={database};UID={client_id};Authentication={authentication};Encrypt=yes;'
conn = pyodbc.connect(connString)
Rufen Sie die Azure SQL-Datenbank-Verbindungskonfigurationen aus den vom Dienstconnector hinzugefügten Umgebungsvariablen ab. Heben Sie die Auskommentierung des Teils des Codeschnipsels für den Authentifizierungstyp auf, den Sie verwenden möchten.
Die Konnektivität mit Azure Database for MySQL in Ihrem Code folgt dem DefaultAzureCredential-Muster für alle Sprachstapel. DefaultAzureCredential ist flexibel genug, um sich sowohl an die Entwicklungsumgebung als auch an die Azure-Umgebung anzupassen. Bei der lokalen Ausführung kann der angemeldete Azure-Benutzer aus der Umgebung Ihrer Wahl (Visual Studio, Visual Studio Code, Azure CLI oder Azure PowerShell) abgerufen werden. Bei Ausführung in Azure wird die verwaltete Identität abgerufen. Auf diese Weise ist es möglich, sowohl zur Entwicklungszeit als auch in der Produktion eine Verbindung mit der Datenbank zu haben. Das Muster ist wie folgt:
Instanziieren eines DefaultAzureCredential aus der Azure Identity-Clientbibliothek. Wenn Sie eine benutzerseitig zugewiesene Identität verwenden, geben Sie die Client-ID der Identität an.
Rufen Sie ein Zugriffstoken für Azure Database for MySQL ab: https://ossrdbms-aad.database.windows.net/.default.
Hinzufügen des Tokens zu Ihrer Verbindungszeichenfolge.
Rufen Sie für .NET ein Zugriffstoken für die verwaltete Identität mithilfe einer Clientbibliothek wie Azure.Identity ab. Verwenden Sie dann das Zugriffstoken als Kennwort, um eine Verbindung mit der Datenbank herzustellen. Stellen Sie bei Verwendung des folgenden Codes sicher, dass Sie den Teil des Codeausschnitts aufheben, der dem Authentifizierungstyp entspricht, den Sie verwenden möchten.
using Azure.Core;
using Azure.Identity;
using MySqlConnector;
// Uncomment the following lines according to the authentication type.
// For system-assigned managed identity.
// var credential = new DefaultAzureCredential();
// For user-assigned managed identity.
// var credential = new DefaultAzureCredential(
// new DefaultAzureCredentialOptions
// {
// ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_MYSQL_CLIENTID");
// });
var tokenRequestContext = new TokenRequestContext(
new[] { "https://ossrdbms-aad.database.windows.net/.default" });
AccessToken accessToken = await credential.GetTokenAsync(tokenRequestContext);
// Open a connection to the MySQL server using the access token.
string connectionString =
$"{Environment.GetEnvironmentVariable("AZURE_MYSQL_CONNECTIONSTRING")};Password={accessToken.Token}";
using var connection = new MySqlConnection(connectionString);
Console.WriteLine("Opening connection using access token...");
await connection.OpenAsync();
// do something
Fügen Sie der Datei pom.xml die folgenden Abhängigkeiten hinzu:
Rufen Sie die Verbindungszeichenfolge aus den Umgebungsvariablen ab, und fügen Sie den Plug-In-Namen hinzu, um eine Verbindung mit der Datenbank herzustellen:
Authentifizieren sie sich mit einem Zugriffstoken aus der azure-identity-Bibliothek. Rufen Sie die Verbindungsinformationen aus der Umgebungsvariablen ab, die vom Dienstconnector hinzugefügt wurde. Stellen Sie bei Verwendung des folgenden Codes sicher, dass Sie den Teil des Codeausschnitts aufheben, der dem Authentifizierungstyp entspricht, den Sie verwenden möchten.
from azure.identity import ManagedIdentityCredential, ClientSecretCredential
import mysql.connector
import os
# Uncomment the following lines according to the authentication type.
# For system-assigned managed identity.
# cred = ManagedIdentityCredential()
# For user-assigned managed identity.
# managed_identity_client_id = os.getenv('AZURE_MYSQL_CLIENTID')
# cred = ManagedIdentityCredential(client_id=managed_identity_client_id)
# acquire token
accessToken = cred.get_token('https://ossrdbms-aad.database.windows.net/.default')
# open connect to Azure MySQL with the access token.
host = os.getenv('AZURE_MYSQL_HOST')
database = os.getenv('AZURE_MYSQL_NAME')
user = os.getenv('AZURE_MYSQL_USER')
password = accessToken.token
cnx = mysql.connector.connect(user=user,
password=password,
host=host,
database=database)
cnx.close()
Rufen Sie ein Zugriffstoken mithilfe von @azure/identity und der Azure MySQL-Datenbank aus den Umgebungsvariablen ab, die vom Dienstconnector hinzugefügt wurde. Stellen Sie bei Verwendung des folgenden Codes sicher, dass Sie den Teil des Codeausschnitts aufheben, der dem Authentifizierungstyp entspricht, den Sie verwenden möchten.
import { DefaultAzureCredential,ClientSecretCredential } from "@azure/identity";
const mysql = require('mysql2');
// Uncomment the following lines according to the authentication type.
// for system-assigned managed identity
// const credential = new DefaultAzureCredential();
// for user-assigned managed identity
// const clientId = process.env.AZURE_MYSQL_CLIENTID;
// const credential = new DefaultAzureCredential({
// managedIdentityClientId: clientId
// });
// acquire token
var accessToken = await credential.getToken('https://ossrdbms-aad.database.windows.net/.default');
const connection = mysql.createConnection({
host: process.env.AZURE_MYSQL_HOST,
user: process.env.AZURE_MYSQL_USER,
password: accessToken.token,
database: process.env.AZURE_MYSQL_DATABASE,
port: process.env.AZURE_MYSQL_PORT,
ssl: process.env.AZURE_MYSQL_SSL
});
connection.connect((err) => {
if (err) {
console.error('Error connecting to MySQL database: ' + err.stack);
return;
}
console.log('Connected to MySQL database');
});
Die Konnektivität mit Azure Database for PostgreSQL in Ihrem Code folgt dem DefaultAzureCredential-Muster für alle Sprachstapel. DefaultAzureCredential ist flexibel genug, um sich sowohl an die Entwicklungsumgebung als auch an die Azure-Umgebung anzupassen. Bei der lokalen Ausführung kann der angemeldete Azure-Benutzer aus der Umgebung Ihrer Wahl (Visual Studio, Visual Studio Code, Azure CLI oder Azure PowerShell) abgerufen werden. Bei Ausführung in Azure wird die verwaltete Identität abgerufen. Auf diese Weise ist es möglich, sowohl zur Entwicklungszeit als auch in der Produktion eine Verbindung mit der Datenbank zu haben. Das Muster ist wie folgt:
Instanziieren eines DefaultAzureCredential aus der Azure Identity-Clientbibliothek. Wenn Sie eine benutzerseitig zugewiesene Identität verwenden, geben Sie die Client-ID der Identität an.
Rufen Sie ein Zugriffstoken für Azure Database for PostgreSQL ab: https://ossrdbms-aad.database.windows.net/.default.
Hinzufügen des Tokens zu Ihrer Verbindungszeichenfolge.
Rufen Sie für .NET ein Zugriffstoken für die verwaltete Identität mithilfe einer Clientbibliothek wie Azure.Identity ab. Verwenden Sie dann das Zugriffstoken als Kennwort, um eine Verbindung mit der Datenbank herzustellen. Stellen Sie bei Verwendung des folgenden Codes sicher, dass Sie den Teil des Codeausschnitts aufheben, der dem Authentifizierungstyp entspricht, den Sie verwenden möchten.
using Azure.Identity;
using Azure.Core;
using Npgsql;
// Uncomment the following lines according to the authentication type.
// For system-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential();
// For user-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential(
// new DefaultAzureCredentialOptions
// {
// ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTID");
// }
// );
// Acquire the access token.
AccessToken accessToken = await sqlServerTokenProvider.GetTokenAsync(
new TokenRequestContext(scopes: new string[]
{
"https://ossrdbms-aad.database.windows.net/.default"
}));
// Combine the token with the connection string from the environment variables provided by Service Connector.
string connectionString =
$"{Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING")};Password={accessToken.Token}";
// Establish the connection.
using (var connection = new NpgsqlConnection(connectionString))
{
Console.WriteLine("Opening connection using access token...");
connection.Open();
}
Fügen Sie der Datei pom.xml die folgenden Abhängigkeiten hinzu:
Rufen Sie die Verbindungszeichenfolge aus den Umgebungsvariablen ab und fügen Sie den Plug-In-Namen hinzu, um eine Verbindung mit der Datenbank herzustellen:
Authentifizieren Sie sich mit einem Zugriffstoken, das über die azure-identity-Bibliothek abgerufen und als Kennwort verwendet wird. Rufen Sie die Verbindungsinformationen aus den Umgebungsvariablen ab, die vom Dienstconnector hinzugefügt wurden. Stellen Sie bei Verwendung des folgenden Codes sicher, dass Sie den Teil des Codeausschnitts aufheben, der dem Authentifizierungstyp entspricht, den Sie verwenden möchten.
from azure.identity import DefaultAzureCredential
import psycopg2
# Uncomment the following lines according to the authentication type.
# For system-assigned identity.
# cred = DefaultAzureCredential()
# For user-assigned identity.
# managed_identity_client_id = os.getenv('AZURE_POSTGRESQL_CLIENTID')
# cred = ManagedIdentityCredential(client_id=managed_identity_client_id)
# Acquire the access token
accessToken = cred.get_token('https://ossrdbms-aad.database.windows.net/.default')
# Combine the token with the connection string from the environment variables added by Service Connector to establish the connection.
conn_string = os.getenv('AZURE_POSTGRESQL_CONNECTIONSTRING')
conn = psycopg2.connect(conn_string + ' password=' + accessToken.token)
Weitere Informationen finden Sie in den folgenden Ressourcen:
Rufen Sie im Code das Zugriffstoken über @azure/identity und die PostgreSQL-Verbindungsinformationen aus Umgebungsvariablen ab, die vom Dienstconnector hinzugefügt wurden. Kombinieren Sie sie, um die Verbindung herzustellen. Stellen Sie bei Verwendung des folgenden Codes sicher, dass Sie den Teil des Codeausschnitts aufheben, der dem Authentifizierungstyp entspricht, den Sie verwenden möchten.
import { DefaultAzureCredential, ClientSecretCredential } from "@azure/identity";
const { Client } = require('pg');
// Uncomment the following lines according to the authentication type.
// For system-assigned identity.
// const credential = new DefaultAzureCredential();
// For user-assigned identity.
// const clientId = process.env.AZURE_POSTGRESQL_CLIENTID;
// const credential = new DefaultAzureCredential({
// managedIdentityClientId: clientId
// });
// Acquire the access token.
var accessToken = await credential.getToken('https://ossrdbms-aad.database.windows.net/.default');
// Use the token and the connection information from the environment variables added by Service Connector to establish the connection.
(async () => {
const client = new Client({
host: process.env.AZURE_POSTGRESQL_HOST,
user: process.env.AZURE_POSTGRESQL_USER,
password: accesstoken.token,
database: process.env.AZURE_POSTGRESQL_DATABASE,
port: Number(process.env.AZURE_POSTGRESQL_PORT) ,
ssl: process.env.AZURE_POSTGRESQL_SSL
});
await client.connect();
await client.end();
})();
In diesem Beispielcode wird DefaultAzureCredential dazu verwendet, ein nutzbares Token für Ihre Azure-Datenbank aus Microsoft Entra ID abzurufen, das dann der Datenbankverbindung hinzugefügt wird. Sie können DefaultAzureCredential zwar anpassen, doch es ist bereits standardmäßig sehr vielseitig. Es wird ein Token vom angemeldeten Microsoft Entra-Benutzer bzw. von der angemeldeten Microsoft Entra-Benutzerin oder von einer verwalteten Identität abgerufen, je nachdem, ob Sie ihn lokal in Ihrer Entwicklungsumgebung oder in App Service ausführen.
Ohne weitere Änderungen ist Ihr Code zur Ausführung in Azure bereit. Um Ihren Code lokal zu debuggen, benötigt Ihre Entwicklungsumgebung jedoch einen angemeldeten Microsoft Entra-Benutzer oder eine angemeldete Microsoft Entra-Benutzerin. In diesem Schritt konfigurieren Sie die Umgebung Ihrer Wahl, indem Sie sich mit Ihrem*r Microsoft Entra-Benutzer*in anmelden.
Visual Studio für Windows ist in die Microsoft Entra-Authentifizierung integriert. Sie fügen in Visual Studio Microsoft Entra-Benutzer*innen hinzu, damit diese in Visual Studio entwickeln und debuggen können. Wählen Sie dazu das Menü Datei>Kontoeinstellungen und anschließend Anmelden oder Hinzufügen aus.
Wählen Sie das Menü Extras>Optionen und anschließend Azure-Dienstauthentifizierung>Kontoauswahl aus, um Microsoft Entra-Benutzer*innen für die Azure-Dienstauthentifizierung festzulegen. Wählen Sie die hinzugefügten Microsoft Entra-Benutzer*innen und dann OK aus.
Visual Studio für Mac ist nicht in die Microsoft Entra-Authentifizierung integriert. Die Azure Identity-Clientbibliothek, die Sie später verwenden werden, kann jedoch Token auch aus der Azure CLI abrufen. Um die Entwicklung und das Debuggen in Visual Studio zu ermöglichen, installieren Sie die Azure CLI auf dem lokalen Computer.
Melden Sie sich mit dem folgenden Befehl und Ihrem Microsoft Entra-Benutzerkonto bei der Azure-Befehlszeilenschnittstelle an:
az login --allow-no-subscriptions
Visual Studio Code ist über die Azure-Erweiterung in die Microsoft Entra-Authentifizierung integriert. Installieren Sie die Azure-Tools-Erweiterung in Visual Studio Code.
Wählen Sie auf der Aktivitätsleiste in Visual Studio Code das Azure-Logo aus.
Wählen Sie im App Service-Explorer die Option Bei Azure anmelden... aus, und befolgen Sie die Anweisungen.
Von der Azure Identity-Clientbibliothek, die Sie später verwenden, können Tokens aus der Azure CLI verwendet werden. Zum Unterstützen der befehlszeilenbasierten Entwicklung installieren Sie die Azure CLI auf dem lokalen Computer.
Melden Sie sich mit dem folgenden Befehl und Ihrem Microsoft Entra-Benutzerkonto bei Azure an:
az login --allow-no-subscriptions
Von der Azure Identity-Clientbibliothek, die Sie später verwenden, können Tokens aus Azure PowerShell verwendet werden. Zum Aktivieren der befehlszeilenbasierten Entwicklung installieren Sie Azure PowerShell auf dem lokalen Computer.
Melden Sie sich mit dem folgenden Cmdlet und Ihrem Microsoft Entra-Benutzerkonto bei der Azure-Befehlszeilenschnittstelle an:
Connect-AzAccount
Weitere Informationen zum Einrichten der Entwicklungsumgebung für die Microsoft Entra-Authentifizierung finden Sie unter Azure Identity-Clientbibliothek für .NET.
Nun können Sie Ihre App mit SQL-Datenbank als Back-End entwickeln und debuggen und dabei die Microsoft Entra-Authentifizierung verwenden.
5. Testen und Veröffentlichen
Führen Sie Ihren Code in Ihrer Entwicklungsumgebung aus. Ihr Code verwendet den angemeldeten Microsoft Entra-Benutzer in Ihrer Umgebung, um eine Verbindung mit der Back-End-Datenbank herzustellen. Der Benutzer oder die Benutzerin kann auf die Datenbank zugreifen, da er bzw. sie als Microsoft Entra-Administrator*in für die Datenbank konfiguriert ist.
Veröffentlichen Sie Ihren Code mithilfe der bevorzugten Veröffentlichungsmethode in Azure. In App Service verwendet Ihr Code die verwaltete Identität der App, um eine Verbindung mit der Back-End-Datenbank herzustellen.
Ich erhalte den Fehler Login failed for user '<token-identified principal>'..
Die verwaltete Identität, für die Sie versuchen, ein Token anzufordern, ist nicht berechtigt, auf die Azure-Datenbank zuzugreifen.
Ich habe Änderungen an der App Service-Authentifizierung oder der zugehörigen App-Registrierung vorgenommen. Warum erhalte ich weiterhin das alte Token?
Die Back-End-Dienste verwalteter Identitäten verwalten darüber hinaus einen Tokencache, der das Token für eine Zielressource nur bei Ablauf aktualisiert. Wenn Sie die Konfiguration ändern, nachdem Sie versucht haben, mit Ihrer App ein Token abzurufen, erhalten Sie tatsächlich erst dann ein neues Token mit den aktualisierten Berechtigungen, wenn das zwischengespeicherte Token abläuft. Die beste Möglichkeit, um dies zu umgehen, besteht darin, Ihre Änderungen mit einem neuen InPrivate (Edge)/privatem (Safari)/Incognito (Chrome)-Fenster zu testen. Auf diese Weise können Sie sicher sein, dass Sie mit einer neuen authentifizierten Sitzung beginnen.
Gewusst wie: Hinzufügen der verwalteten Identität zu einer Microsoft Entra-Gruppe
Wenn Sie möchten, können Sie die Identität einer Microsoft Entra-Gruppe hinzufügen und dann Zugriff auf die Microsoft Entra-Gruppe anstatt auf die Identität gewähren. Mit den folgenden Befehlen wird beispielsweise die verwaltete Identität aus dem vorherigen Schritt zu einer neuen Gruppe namens myAzureSQLDBAccessGroup hinzugefügt:
groupid=$(az ad group create --display-name myAzureSQLDBAccessGroup --mail-nickname myAzureSQLDBAccessGroup --query objectId --output tsv)
msiobjectid=$(az webapp identity show --resource-group <group-name> --name <app-name> --query principalId --output tsv)
az ad group member add --group $groupid --member-id $msiobjectid
az ad group member list -g $groupid
Informationen zum Gewähren von Datenbankberechtigungen für eine Microsoft Entra-Gruppe finden Sie in der Dokumentation für den jeweiligen Datenbanktyp.
Ich erhalte den Fehler SSL connection is required. Please specify SSL options and retry.
Das Herstellen einer Verbindung mit der Azure-Datenbank erfordert zusätzliche Einstellungen und geht über den Umfang dieses Tutorials hinaus. Weitere Informationen dazu finden Sie unter den folgenden Links:
Ich habe meine App mit der Vorlage „Web App + Datenbank” erstellt, und jetzt kann ich keine verwaltete Identitätsverbindung mit den Dienstconnector-Befehlen konfigurieren.
Dienstconnector benötigt Netzwerkzugriff auf die Datenbank, um Zugriff auf die App-Identität zu gewähren. Wenn Sie eine sichere standardmäßige App- und Datenbankarchitektur im Azure-Portal mit der Vorlage „Web App + Datenbank” erstellen, sperrt die Architektur den Netzwerkzugriff auf die Datenbank und lässt nur Verbindungen aus dem virtuellen Netzwerk zu. Das gilt auch für Azure Cloud Shell. Sie können Cloud Shell jedoch im virtuellen Netzwerk bereitstellen, und dann den Dienstconnector-Befehl in dieser Cloud Shell ausführen.
Nächste Schritte
Sie haben Folgendes gelernt:
Konfigurieren eines Microsoft Entra-Benutzers oder einer Microsoft Entra-Benutzerin als Administrator*in für Ihre Azure-Datenbank
Herstellen einer Verbindung mit Ihrer Datenbank als Microsoft Entra-Benutzer*in
Konfigurieren einer systemseitig oder benutzerseitig zugewiesenen verwalteten Identität für eine App Service-App.
Gewähren von Datenbankzugriff auf die verwaltete Identität.
Herstellen einer Verbindung mit der Azure-Datenbank aus Ihrem Code (.NET Framework 4.8, .NET 6, Node.js, Python, Java) mithilfe einer verwalteten Identität.
Herstellen einer Verbindung mit der Azure-Datenbank aus Ihrer Entwicklungsumgebung mithilfe des Microsoft Entra-Benutzers oder der Microsoft Entra-Benutzerin