Verwaltete Identitäten sind für die sichere dienstübergreifende Kommunikation in Azure unerlässlich. Sie machen die Verwaltung von Geheimnissen, Schlüsseln oder Verbindungszeichenfolgen überflüssig und ermöglichen eine nahtlose Integration von Anwendungskomponenten. In diesem Blog zeige ich, wie man mithilfe verwalteter Identitäten eine Azure SQL-Datenbank mit einem Python-Backend verbindet, das auf Azure App Service ausgeführt wird.
Um über Entra-Identitäten eine Verbindung zu Azure-Diensten herzustellen, benötigen Sie die Microsoft Authentication Library (MSAL). In diesem Beispiel verwende ich die Python-Bibliothek, aber keine Sorge, die MSAL existiert für jede große Programmiersprache.
import msal
Hier ist eine einfache Funktion zum Herstellen einer Verbindung mit einer Azure SQL-Datenbank:
def get_db_connection(): connection_string = f'DRIVER={{ODBC Driver 17 for SQL Server}};SERVER={server}.database.windows.net;PORT=1433;DATABASE={database};Authentication=ActiveDirectoryMsi' return pyodbc.connect(connection_string)
Wenn diese Voraussetzungen erfüllt sind, können Sie Datenbankverbindungen innerhalb Ihres Codes herstellen und Abfragen ausführen, ohne mit Geheimnissen oder Verbindungszeichenfolgen umgehen zu müssen.
Zur Demonstration habe ich eine einfache Python-Flask-API erstellt, die Mitarbeiterdaten wie Name, Position und Gehalt zurückgibt. Beachten Sie, wie die Funktion get_db_connection() verwendet wird, um die Datenbankverbindung zu öffnen und die Daten abzufragen.
def get_employees(): conn = get_db_connection() cursor = conn.cursor() cursor.execute('SELECT ID, Name, Position, Salary FROM Employees') rows = cursor.fetchall() conn.close() # Convert data to a list of dictionaries. employees = [] for row in rows: employees.append({ 'ID': row.ID, 'Name': row.Name, 'Position': row.Position, 'Salary': row.Salary }) return jsonify(employees)
Dieser einfache Ansatz stellt sicher, dass Ihr Backend über verwaltete Identitäten sicher mit der Datenbank interagiert.
Wenn Sie Ihre Anwendung in Docker-Containern bereitstellen, finden Sie hier die Docker-Datei zum Installieren des ODBC-Treibers für SQL Server:
FROM python:3.13-slim COPY . /app WORKDIR /app # Install Microsoft ODBC Driver 17 for SQL Server and dependencies RUN apt-get update \ && apt-get install -y gnupg curl apt-transport-https \ && curl https://packages.microsoft.com/keys/microsoft.asc | tee /etc/apt/trusted.gpg.d/microsoft.asc \ && echo "deb [arch=amd64] https://packages.microsoft.com/debian/11/prod bullseye main" | tee /etc/apt/sources.list.d/mssql-release.list \ && apt-get update \ && ACCEPT_EULA=Y apt-get install -y msodbcsql17 unixodbc-dev \ && apt-get install -y build-essential \ && apt-get clean -y # Install Python dependencies RUN pip install -r requirements.txt EXPOSE 80 CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:80", "app:app"]
Dieses Setup stellt sicher, dass Ihr Container für eine sichere Verbindung mit Azure SQL bereit ist.
Konfigurieren Sie bei der Bereitstellung eines Azure SQL-Servers die reine Azure AD-Authentifizierung. Dies ist eine Voraussetzung für die verwaltete Identität. Nachfolgend finden Sie die Bicep-Vorlage, die zum Bereitstellen des SQL-Servers und der Datenbank verwendet wird:
resource sqlServer 'Microsoft.Sql/servers@2023-08-01-preview' = { name: serverName location: location tags: { workload: 'Sample Backend with SQL Database' topic: 'SQL Server' environment: 'Production' } properties: { minimalTlsVersion: '1.2' administrators: { administratorType: 'ActiveDirectory' login: sqlAdminName sid: sqlAdminObjectId tenantId: tenantId principalType: principalType azureADOnlyAuthentication: azureADOnlyAuthentication } } } resource sqlDB 'Microsoft.Sql/servers/databases@2023-08-01-preview' = { parent: sqlServer name: sqlDBName location: location sku: { name: sqlDBSkuName tier: sqlDBSkuTier capacity: capacity } }
Diese Vorlage stellt sicher, dass die Datenbank sicher konfiguriert und einsatzbereit ist.
Damit Ihr App Service ohne Geheimnisse auf die Datenbank zugreifen kann, weisen Sie der verwalteten Identität die erforderlichen Datenbankrollen zu. Sie können diesen Schritt nicht mit Bicep oder Terraform ausführen. Erstellen Sie ein benutzerdefiniertes Skript oder greifen Sie über das Azure-Portal auf die Datenbank zu.
CREATE USER [<displayname-of-appservice>] FROM EXTERNAL PROVIDER; ALTER ROLE db_datareader ADD MEMBER [<displayname-of-appservice>]; ALTER ROLE db_datawriter ADD MEMBER [<displayname-of-appservice>]; ALTER ROLE db_ddladmin ADD MEMBER [<displayname-of-appservice>]; GO
Diese Rollen ermöglichen es der verwalteten Identität, nach Bedarf Lese-, Schreib- und Schemaänderungsvorgänge durchzuführen.
Den vollständigen Code, einschließlich CI/CD-Integration, finden Sie in der öffentlichen Vorlage auf GitHub. Dieses Repository enthält alles, was Sie zum Replizieren des in diesem Blog beschriebenen Setups benötigen.
Dieser Anwendungsfall umfasst die Bereitstellung eines Azure App Service mit einer Azure SQL-Datenbank, um eine schlanke Backend-Umgebung zum Testen neuer Anwendungsfunktionen bereitzustellen. Es umfasst alles vom Hosting der App bis zur Verwaltung der Datenpersistenz und integriert CI/CD für einfaches Testen und Iteration.
Die Verwendung verwalteter Identitäten vereinfacht die dienstübergreifende Kommunikation und erhöht die Sicherheit, da keine Geheimnisse mehr erforderlich sind. Dieser Ansatz wird jedem dringend empfohlen, der sichere und skalierbare Anwendungen in Azure erstellt.
Das obige ist der detaillierte Inhalt vonVerwendung verwalteter Identitäten für sichere dienstübergreifende Kommunikation in Azure. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!