App Service bietet in Azure einen hoch skalierbaren Self-Patching-Webhostingdienst. Außerdem stellt sie eine managed Identity für Ihre App bereit, die eine turn-key-Lösung zum Sichern des Zugriffs auf Azure Datenbanken ist, 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 Sie einen Microsoft Entra Benutzer als Administrator für Ihre Azure-Datenbank.
- Stellen Sie eine Verbindung mit Ihrer Datenbank als Microsoft Entra Benutzer her.
- Konfigurieren einer systemseitig oder benutzerseitig zugewiesenen verwalteten Identität für eine App Service-App.
- Gewähren von Datenbankzugriff auf die verwaltete Identität.
- Stellen Sie mithilfe einer verwalteten Identität eine Verbindung mit der Azure-Datenbank aus Ihrem Code (.NET Framework 4.8, .NET 6, Node.js, Python, Java) her.
- Stellen Sie mithilfe des Microsoft Entra Benutzers eine Verbindung mit der Azure-Datenbank aus Ihrer Entwicklungsumgebung her.
Wenn Sie kein Azure Konto haben, erstellen Sie ein free-Konto bevor Sie beginnen.
Voraussetzungen
- Erstellen Sie eine App in App Service basierend auf .NET, Node.js, Python oder Java.
- Erstellen Sie einen Datenbankserver mit Azure SQL Database, 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.
Bereiten Sie Ihre Umgebung auf die Azure CLI vor.
1. Installieren der kennwortlosen Dienstconnector-Erweiterung
Installieren Sie die neueste Kennwortlose Erweiterung für Service Connector 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 Azure CLI zuerst aktualisieren, um die Erweiterungsversion zu aktualisieren.
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 zur Ressource Azure App Service, wählen Sie Service Connector im linken Menü aus, und wählen Sie Create aus. Füllen Sie das Formular mit allen erforderlichen Parametern aus. Azure generiert automatisch den Verbindungserstellungsbefehl, den Sie kopieren können, um sie in der CLI zu verwenden oder in Azure Cloud Shell auszuführen.
Der folgende Azure CLI-Befehl verwendet einen parameter --client-type.
Führen Sie optional az webapp connection create sql -h aus, um die unterstützten Clienttypen abzurufen.
Wählen Sie einen Clienttyp aus und führen Sie den entsprechenden Befehl aus. Ersetzen Sie die folgenden Platzhalter durch Ihre eigenen Informationen:
az webapp connection create sql \
--resource-group <group-name> \
--name <server-name> \
--target-resource-group <sql-group-name> \
--server <sql-name> \
--database <database-name> \
--user-identity client-id=<client-id> subs-id=<subscription-id> \
--client-type <client-type>
az webapp connection create sql \
--resource-group <group-name> \
--name <server-name> \
--target-resource-group <group-name> \
--server <sql-name> \
--database <database-name> \
--system-identity \
--client-type <client-type>
Hinweis
Für Azure Database for MySQL – Flexible Server müssen Sie zuerst manual die Microsoft Entra Authentifizierung einrichten, die eine separate vom Benutzer zugewiesene verwaltete Identität und bestimmte Microsoft Graph Berechtigungen erfordert. Dieser Schritt kann nicht automatisiert werden.
Manuelle Einrichtung der Microsoft Entra-Authentifizierung für Azure Database for MySQL – Flexible Server.
Führen Sie optional den Befehl az webapp connection create mysql-flexible -h aus, um die unterstützten Clienttypen abzurufen.
Wählen Sie einen Clienttyp aus und führen Sie den entsprechenden Befehl aus. Der folgende Azure CLI-Befehl verwendet einen parameter --client-type.
az webapp connection create mysql-flexible \
--resource-group <group-name> \
--name <server-name> \
--target-resource-group <group-name> \
--server <mysql-name> \
--database <database-name> \
--user-identity client-id=XX subs-id=XX mysql-identity-id=$IDENTITY_RESOURCE_ID \
--client-type <client-type>
az webapp connection create mysql-flexible \
--resource-group <group-name> \
--name <server-name> \
--target-resource-group <group-name> \
--server <mysql-name> \
--database <database-name> \
--system-identity mysql-identity-id=$IDENTITY_RESOURCE_ID \
--client-type <client-type>
Der folgende Azure CLI-Befehl verwendet einen parameter --client-type.
Führen Sie optional den Befehl az webapp connection create postgres-flexible -h aus, um eine Liste aller unterstützten Clienttypen abzurufen.
Wählen Sie einen Clienttyp aus und führen Sie den entsprechenden Befehl aus.
az webapp connection create postgres-flexible \
--resource-group <group-name> \
--name <server-name> \
--target-resource-group <group-name> \
--server <postgresql-name> \
--database <database-name> \
--user-identity client-id=XX subs-id=XX \
--client-type java
az webapp connection create postgres-flexible \
--resource-group <group-name> \
--name <server-name> \
--target-resource-group <group-name> \
--server <postgresql-name> \
--database <database-name> \
--system-identity \
--client-type <client-type>
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 dem connection string oder der von Service Connector festgelegten Konfiguration sollte wie aad_<connection name> aussehen. Wenn Sie das Azure Portal verwenden, wählen Sie die Schaltfläche "Erweitern" neben der Spalte Service Type aus, und rufen Sie den Wert ab. Wenn Sie 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 entweder die systemzugewiesene verwaltete Identität oder weisen Sie eine Benutzeridentität für die App
<server-name> zu, die von Azure App Service gehostet wird.
- 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 im connection string in der vorherigen Befehlsausgabe.
- Legen Sie Konfigurationen namens
AZURE_MYSQL_CONNECTIONSTRING, AZURE_POSTGRESQL_CONNECTIONSTRING oder AZURE_SQL_CONNECTIONSTRING auf die Azure Ressource basierend auf dem Datenbanktyp 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.
3. Ändern Ihres Codes
Installieren Sie Abhängigkeiten.
dotnet add package Microsoft.Data.SqlClient
Rufen Sie die Azure SQL Database connection string aus der Umgebungsvariable ab, die von Service Connector hinzugefügt wurde.
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();
Weitere Informationen finden Sie unter Using Active Directory Managed Identity Authentication.
Fügen Sie der Datei pom.xml die folgenden Abhängigkeiten hinzu:
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.4.6</version>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>10.2.0.jre11</version>
</dependency>
Rufen Sie die Azure SQL Database connection string aus der Umgebungsvariable ab, die von Service Connector hinzugefügt wurde.
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import com.microsoft.sqlserver.jdbc.SQLServerDataSource;
public class Main {
public static void main(String[] args) {
// AZURE_SQL_CONNECTIONSTRING should be one of the following:
// For system-assigned managed identity: "jdbc:sqlserver://{SQLName}.database.windows.net:1433;databaseName={SQLDbName};authentication=ActiveDirectoryMSI;"
// For user-assigned managed identity: "jdbc:sqlserver://{SQLName}.database.windows.net:1433;databaseName={SQLDbName};msiClientId={UserAssignedMiClientId};authentication=ActiveDirectoryMSI;"
String connectionString = System.getenv("AZURE_SQL_CONNECTIONSTRING");
SQLServerDataSource ds = new SQLServerDataSource();
ds.setURL(connectionString);
try (Connection connection = ds.getConnection()) {
System.out.println("Connected successfully.");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Weitere Informationen finden Sie unter Connect using Microsoft Entra authentication.
Installieren Sie Abhängigkeiten.
python -m pip install mssql-python python-dotenv
Rufen Sie die Azure SQL Database 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
from mssql_python import connect
server = os.getenv('AZURE_SQL_SERVER')
port = os.getenv('AZURE_SQL_PORT')
database = os.getenv('AZURE_SQL_DATABASE')
# Uncomment the following lines according to the authentication type.
# For system-assigned managed identity.
# connection_string = f'Server={server},{port};Database={database};Authentication=ActiveDirectoryMSI;Encrypt=yes;'
# For user-assigned managed identity.
# client_id = os.getenv('AZURE_SQL_USER')
# connection_string = f'Server={server},{port};Database={database};UID={client_id};Authentication=ActiveDirectoryMSI;Encrypt=yes;'
conn = connect(connection_string)
Für eine alternative Methode können Sie auch mithilfe eines Zugriffstokens eine Verbindung mit Azure SQL Database herstellen, siehe Migrieren einer Python-Anwendung, um kennwortlose Verbindungen mit Azure SQL Database zu verwenden.
- Installieren Sie Abhängigkeiten.
npm install mssql
- Rufen Sie die Azure SQL Database Verbindungskonfigurationen aus den Von Service Connector hinzugefügten Umgebungsvariablen ab. Heben Sie die Auskommentierung des Teils des Codeschnipsels für den Authentifizierungstyp auf, den Sie verwenden möchten.
import sql from 'mssql';
const server = process.env.AZURE_SQL_SERVER;
const database = process.env.AZURE_SQL_DATABASE;
const port = parseInt(process.env.AZURE_SQL_PORT);
const authenticationType = process.env.AZURE_SQL_AUTHENTICATIONTYPE;
// Uncomment the following lines according to the authentication type.
// For system-assigned managed identity.
// const config = {
// server,
// port,
// database,
// authentication: {
// authenticationType
// },
// options: {
// encrypt: true
// }
// };
// For user-assigned managed identity.
// const clientId = process.env.AZURE_SQL_CLIENTID;
// const config = {
// server,
// port,
// database,
// authentication: {
// type: authenticationType
// },
// options: {
// encrypt: true,
// clientId: clientId
// }
// };
this.poolconnection = await sql.connect(config);
Weitere Informationen finden Sie unter Homepage für die Clientprogrammierung in Microsoft SQL Server.
Weitere Codebeispiele finden Sie unter Erstellen einer kennwortlosen Verbindung mit einem Datenbankdienst über den Dienstconnector.
Die Konnektivität zur Azure Database for MySQL in Ihrem Code folgt dem Muster DefaultAzureCredential für alle Sprachumgebungen.
DefaultAzureCredential ist flexibel genug, um sowohl an die Entwicklungsumgebung als auch an die Azure Umgebung anzupassen. Wenn sie lokal ausgeführt wird, kann er den angemeldeten Azure Benutzer aus der Umgebung Ihrer Wahl abrufen (Visual Studio, Visual Studio Code, Azure CLI oder Azure PowerShell). Wenn sie in Azure ausgeführt wird, ruft sie die verwaltete Identität ab. 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 Sie eine
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.
- Fügen Sie das Token zu Ihrem connection string hinzu.
- Öffnen Sie die Verbindung.
Rufen Sie für .NET ein Zugriffstoken für die Managed Identity mithilfe einer Client-Bibliothek 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:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity-extensions</artifactId>
<version>1.2.0</version>
</dependency>
Rufen Sie die connection string aus der Umgebungsvariable ab, und fügen Sie den Plug-In-Namen hinzu, um eine Verbindung mit der Datenbank herzustellen:
String url = System.getenv("AZURE_MYSQL_CONNECTIONSTRING");
String pluginName = "com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin";
Connection connection = DriverManager.getConnection(url + "&defaultAuthenticationPlugin=" +
pluginName + "&authenticationPlugins=" + pluginName);
Weitere Informationen finden Sie unter Use Java und JDBC with Azure Database for MySQL - Flexible Server.
Installieren Sie Abhängigkeiten.
pip install azure-identity
# install Connector/Python https://dev.mysql.com/doc/connector-python/en/connector-python-installation.html
pip install mysql-connector-python
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()
Installieren Sie Abhängigkeiten.
npm install --save @azure/identity
npm install --save mysql2
Rufen Sie ein Zugriffstoken mit @azure/identity und den Azure MySQL-Datenbankinformationen aus den von Service Connector hinzugefügten Umgebungsvariablen ab. 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');
});
Weitere Codebeispiele finden Sie unter Erstellen einer kennwortlosen Verbindung mit einem Datenbankdienst über den Dienstconnector.
Die Konnektivität zur Azure-Datenbank für PostgreSQL in Ihrem Code folgt dem Muster DefaultAzureCredential für alle Sprachumgebungen.
DefaultAzureCredential ist flexibel genug, um sowohl an die Entwicklungsumgebung als auch an die Azure Umgebung anzupassen. Wenn sie lokal ausgeführt wird, kann er den angemeldeten Azure Benutzer aus der Umgebung Ihrer Wahl abrufen (Visual Studio, Visual Studio Code, Azure CLI oder Azure PowerShell). Wenn sie in Azure ausgeführt wird, ruft sie die verwaltete Identität ab. 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 Sie eine
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.
- Fügen Sie das Token zu Ihrem connection string hinzu.
- Öffnen Sie die Verbindung.
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:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.5</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity-extensions</artifactId>
<version>1.2.0</version>
</dependency>
Rufen Sie die connection string aus den Umgebungsvariablen ab, und fügen Sie den Plug-In-Namen hinzu, um eine Verbindung mit der Datenbank herzustellen:
import java.sql.*;
String url = System.getenv("AZURE_POSTGRESQL_CONNECTIONSTRING");
String pluginName = "com.Azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin";
Connection connection = DriverManager.getConnection(url + "&authenticationPluginClassName=" + pluginName);
Weitere Informationen finden Sie in den folgenden Ressourcen:
Installieren Sie Abhängigkeiten.
pip install azure-identity
pip install psycopg2-binary
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:
Installieren Sie Abhängigkeiten.
npm install --save @azure/identity
npm install --save pg
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();
})();
Weitere Codebeispiele finden Sie unter Erstellen einer kennwortlosen Verbindung mit einem Datenbankdienst über den Dienstconnector.
4. Einrichten Ihrer Entwicklungsumgebung
Dieser Beispielcode verwendet DefaultAzureCredential, um ein verwendbares Token für Ihre Azure Datenbank aus Microsoft Entra ID abzurufen und sie dann der Datenbankverbindung hinzufügt. Sie können DefaultAzureCredential zwar anpassen, doch es ist bereits standardmäßig sehr vielseitig. Es ruft ein Token vom angemeldeten Microsoft Entra Benutzer oder von einer verwalteten Identität ab, je nachdem, ob Sie es lokal in Ihrer Entwicklungsumgebung oder in App Service ausführen.
Ohne weitere Änderungen kann Ihr Code in Azure ausgeführt werden. Um Den Code lokal zu debuggen, benötigt Ihre Entwicklungsumgebung jedoch einen angemeldeten Microsoft Entra Benutzer. In diesem Schritt konfigurieren Sie Ihre Gewünschte Umgebung, indem Sie sich mit Ihrem Microsoft Entra Benutzer anmelden.
Visual Studio für Windows ist in Microsoft Entra Authentifizierung integriert. Um die Entwicklung und das Debuggen in Visual Studio zu aktivieren, fügen Sie Ihren Microsoft Entra Benutzer in Visual Studio hinzu, indem Sie File>Account Settings aus dem Menü auswählen, und wählen Sie Sign in oder Add aus.
So legen Sie den Microsoft Entra Benutzer für Azure Dienstauthentifizierung fest, wählen Sie Tools>Options aus dem Menü und dann Azure Service Authentication>Account Selection aus. Wählen Sie den hinzugefügten Microsoft Entra Benutzer aus, und wählen Sie OK aus.
Visual Studio für Mac ist nicht in die Microsoft Entra Authentifizierung integriert. Die Azure Identitätsclientbibliothek, die Sie später verwenden werden, kann jedoch auch Token aus Azure CLI abrufen. Um die Entwicklung und das Debuggen in Visual Studio zu aktivieren, installieren Sie Azure CLI auf Ihrem lokalen Computer.
Melden Sie sich mit dem folgenden Befehl mit Ihrem Microsoft Entra Benutzer bei Azure CLI an:
az login --allow-no-subscriptions
Visual Studio Code ist über die Azure-Erweiterung in Microsoft Entra Authentifizierung integriert. Installieren Sie die Erweiterung Azure Tools in Visual Studio Code.
Wählen Sie in Visual Studio Code im Activity Bar das Logo Azure aus.
Wählen Sie im Explorer App ServiceSign in to Azure... und folgen Sie den Anweisungen.
Die Azure Identitätsclientbibliothek, die Sie später verwenden werden, kann Token aus der Azure CLI verwenden. Um die befehlszeilenbasierte Entwicklung zu aktivieren, installieren Sie Azure CLI auf Ihrem lokalen Computer.
Melden Sie sich mit dem folgenden Befehl mit Ihrem Microsoft Entra Benutzer bei Azure an:
az login --allow-no-subscriptions
Die Azure Identitätsclientbibliothek, die Sie später verwenden, können Token aus Azure PowerShell verwenden. Um die befehlszeilenbasierte Entwicklung zu aktivieren, installieren Sie Azure PowerShell auf Ihrem lokalen Computer.
Melden Sie sich mit dem folgenden Cmdlet mit Ihrem Microsoft Entra Benutzer bei Azure CLI an:
Connect-AzAccount
Weitere Informationen zum Einrichten Ihrer Entwicklungsumgebung für Microsoft Entra Authentifizierung finden Sie unter Azure Identity-Clientbibliothek für .NET.
Sie können Ihre App jetzt mit der SQL-Datenbank als Back-End entwickeln und debuggen, indem Sie 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 kann auf die Datenbank zugreifen, da er als Microsoft Entra Administrator für die Datenbank konfiguriert ist.
Veröffentlichen Sie Ihren Code auf Azure mit der bevorzugten Veröffentlichungsmethode. In App Service verwendet Ihr Code die verwaltete Identität der App, um eine Verbindung mit der Back-End-Datenbank herzustellen.
Häufig gestellte Fragen
Unterstützt verwaltete Identität SQL Server?
Ja. Weitere Informationen finden Sie unter
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.
Wie füge ich die verwaltete Identität zu einer Microsoft Entra Gruppe hinzu?
Wenn Sie möchten, können Sie die Identität zu einer Microsoft Entra Gruppe hinzufügen und dann der Microsoft Entra Gruppe anstelle der Identität Zugriff 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 Erteilen 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.
Für das Herstellen einer Verbindung mit der Azure-Datenbank sind zusätzliche Einstellungen erforderlich, die über den Umfang dieses Lernprogramms hinausgehen. Weitere Informationen dazu finden Sie unter den folgenden Links:
Konfigurieren Sie die TLS-Konnektivität in Azure Database for PostgreSQL – Single ServerKonfigurieren Sie die SSL-Konnektivität in Ihrer Anwendung, um eine sichere Verbindung mit Azure Database for MySQL herzustellen
Dienstconnector benötigt Netzwerkzugriff auf die Datenbank, um Zugriff auf die App-Identität zu gewähren. Wenn Sie eine 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. Es gilt auch für Azure Cloud Shell. Sie können jedoch Cloud Shell im virtuellen Netzwerk bereitstellen und dann den Dienstconnectorbefehl in diesem Cloud Shell ausführen.
Nächste Schritte
Sie haben Folgendes gelernt:
- Konfigurieren Sie einen Microsoft Entra Benutzer als Administrator für Ihre Azure-Datenbank.
- Stellen Sie eine Verbindung mit Ihrer Datenbank als Microsoft Entra Benutzer her.
- Konfigurieren einer systemseitig oder benutzerseitig zugewiesenen verwalteten Identität für eine App Service-App.
- Gewähren von Datenbankzugriff auf die verwaltete Identität.
- Stellen Sie mithilfe einer verwalteten Identität eine Verbindung mit der Azure-Datenbank aus Ihrem Code (.NET Framework 4.8, .NET 6, Node.js, Python, Java) her.
- Stellen Sie mithilfe des Microsoft Entra Benutzers eine Verbindung mit der Azure-Datenbank aus Ihrer Entwicklungsumgebung her.
Wie verwaltete Identitäten für App Service und Azure Functions
Tutorial: Stellen Sie eine Verbindung mit Azure Diensten her, die verwaltete Identitäten (mithilfe von Key Vault)