Heim > Backend-Entwicklung > Python-Tutorial > Verwendung verwalteter Identitäten für sichere dienstübergreifende Kommunikation in Azure

Verwendung verwalteter Identitäten für sichere dienstübergreifende Kommunikation in Azure

Susan Sarandon
Freigeben: 2024-12-23 00:40:01
Original
618 Leute haben es durchsucht

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.


Microsoft-Authentifizierungsbibliothek

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
Nach dem Login kopieren

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)
Nach dem Login kopieren

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.


Demo-Python-Backend

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)

Nach dem Login kopieren

Dieser einfache Ansatz stellt sicher, dass Ihr Backend über verwaltete Identitäten sicher mit der Datenbank interagiert.


Docker-Datei

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"]

Nach dem Login kopieren

Dieses Setup stellt sicher, dass Ihr Container für eine sichere Verbindung mit Azure SQL bereit ist.


SQL Server- und Datenbankbereitstellung

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
  }
}
Nach dem Login kopieren

Diese Vorlage stellt sicher, dass die Datenbank sicher konfiguriert und einsatzbereit ist.


Gewähren von Datenbankrollen für verwaltete Identitäten

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
Nach dem Login kopieren

Diese Rollen ermöglichen es der verwalteten Identität, nach Bedarf Lese-, Schreib- und Schemaänderungsvorgänge durchzuführen.


Öffentliche Vorlage auf GitHub

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.

Using Managed Identities for Secure Cross-Service Communication in Azure Latzox / Schnellstart-Backend-mit-SQL-Datenbank

Eine schlanke Backend-Umgebung zum Testen neuer Anwendungsfunktionen. Es umfasst alles vom Hosting der App bis zur Verwaltung der Datenpersistenz und integriert CI/CD für einfaches Testen und Iteration.

Schnellstart-Backend mit SQL-Datenbankverbindung

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.

Ziele

  • Stellen Sie ein skalierbares und sicheres Web-Backend auf Azure bereit, um neue Anwendungsfunktionen zu testen.
  • Automatisieren Sie die Infrastrukturbereitstellung mit Bicep.
  • Integrieren Sie die kontinuierliche Bereitstellung der Anwendung für häufige Tests und einfache Updates.

Komponentenübersicht

  • Azure App Service – Stellen Sie eine einfache Backend-API bereit.
  • Azure SQL-Datenbank – Richten Sie eine SQL-Datenbank für Persistenz ein.
  • Azure Container Registry (optional) – Speichern Sie Containerbilder zur Versionierung (wenn Sie eine Containerversion verwenden).
  • Kontinuierliche Integration/kontinuierliche Bereitstellung (CI/CD) – Automatisieren Sie die Bereitstellung mithilfe von GitHub-Aktionen.



Auf GitHub ansehen



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!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage