Spring Cloud Azure PostgreSQL-Unterstützung

Azure-Datenbank für PostgreSQL ist ein relationaler Datenbankdienst, der auf dem Open-Source-Datenbankmodul Postgres basiert. Es ist ein vollständig verwalteter Datenbank-as-a-Service, der unternehmenskritische Workloads mit vorhersehbarer Leistung, Sicherheit, hoher Verfügbarkeit und dynamischer Skalierbarkeit verarbeiten kann.

Von Version 4.5.0unterstützt Spring Cloud Azure verschiedene Arten von Anmeldeinformationen für die Authentifizierung bei Azure Database für PostgreSQL Flexible Server.

Unterstützte PostgreSQL-Version

Unterstützte Versionen finden Sie unter Unterstützte PostgreSQL-Hauptversionen in Azure Database for PostgreSQL - Flexible Server.

Kernfunktionen

Kennwortlose Verbindung

Die kennwortlose Verbindung verwendet die Microsoft Entra-Authentifizierung zum Herstellen einer Verbindung mit Azure-Diensten, ohne Anmeldeinformationen in der Anwendung, den Konfigurationsdateien oder in Umgebungsvariablen zu speichern. Die Microsoft Entra-Authentifizierung ist ein Mechanismus zum Herstellen einer Verbindung mit Azure-Datenbank für PostgreSQL mithilfe von In Microsoft Entra ID definierten Identitäten. Mit der Microsoft Entra-Authentifizierung können Sie Datenbankbenutzeridentitäten und andere Microsoft-Dienste an einem zentralen Ort verwalten, wodurch die Berechtigungsverwaltung vereinfacht wird.

Funktionsweise

Spring Cloud Azure erstellt zunächst einen der folgenden Arten von Anmeldeinformationen, je nach Anwendungsauthentifizierungskonfiguration:

  • ClientSecretCredential
  • ClientCertificateCredential
  • UsernamePasswordCredential
  • ManagedIdentityCredential
  • DefaultAzureCredential

Wenn keine dieser Arten von Anmeldeinformationen gefunden wird, werden die DefaultAzureCredential Anmeldeinformationen aus Anwendungseigenschaften, Umgebungsvariablen, verwalteten Identitäten oder der IDE abgerufen. Weitere Informationen finden Sie unter Spring Cloud Azure authentication.

Das folgende allgemeine Diagramm fasst zusammen, wie die Authentifizierung mit der OAuth-Anmeldeinformationsauthentifizierung mit Azure Database for PostgreSQL funktioniert. Die Pfeile geben Kommunikationspfade an.

Diagramm mit der Microsoft Entra-Authentifizierung für PostgreSQL .

Konfiguration

Spring Cloud Azure für PostgreSQL unterstützt die folgenden beiden Konfigurationsoptionen:

  1. Die globalen Authentifizierungskonfigurationsoptionen von credential und profile mit Präfixen von spring.cloud.azure.

  2. Allgemeine Konfigurationsoptionen für Spring Cloud Azure für PostgreSQL.

Die folgende Tabelle zeigt die allgemeinen Konfigurationsoptionen für Spring Cloud Azure für PostgreSQL:

Name Beschreibung
spring.datasource.azure.passwordless-enabled Gibt an, ob Kennwortlose Verbindungen mit Azure-Datenbanken mithilfe von OAuth2-Microsoft Entra-Tokenanmeldeinformationen aktiviert werden sollen.
spring.datasource.azure.credential.client-certificate-password Kennwort der Zertifikatdatei.
spring.datasource.azure.credential.client-certificate-path Pfad einer PEM-Zertifikatdatei, die beim Ausführen der Dienstprinzipalauthentifizierung mit Azure verwendet werden soll.
spring.datasource.azure.credential.client-id Client-ID, die beim Ausführen der Dienstprinzipalauthentifizierung mit Azure verwendet werden soll. Dies ist eine veraltete Eigenschaft.
spring.datasource.azure.credential.client-secret Geheimer Clientschlüssel, der beim Ausführen der Dienstprinzipalauthentifizierung mit Azure verwendet werden soll. Dies ist eine veraltete Eigenschaft.
spring.datasource.azure.credential.managed-identity-enabled Gibt an, ob verwaltete Identität für die Authentifizierung mit Azure aktiviert werden soll. Wenn true und client-id festgelegt ist, ist die Client-ID die vom Benutzer zugewiesene verwaltete Identitätsclient-ID. Der Standardwert ist false.
spring.datasource.azure.credential.password Kennwort, das bei der Authentifizierung mit Benutzername/Kennwort mit Azure verwendet werden soll.
spring.datasource.azure.credential.username Benutzername, der bei der Authentifizierung mit Benutzername/Kennwort mit Azure verwendet werden soll.
spring.datasource.azure.profile.cloud-type Name der Azure-Cloud, mit der eine Verbindung hergestellt werden soll.
spring.datasource.azure.profile.environment.active-directory-endpoint Der Microsoft Entra-Endpunkt, mit dem eine Verbindung hergestellt werden soll.
spring.datasource.azure.profile.tenant-id Mandanten-ID für Azure-Ressourcen. Die für tenant-id zulässigen Werte sind: common, organizations, consumersoder die Mandanten-ID.

Einrichtung von Abhängigkeiten

Fügen Sie dem Projekt die folgende Abhängigkeit hinzu. Dies schließt automatisch die spring-boot-starter Abhängigkeit in Ihr Projekt transitiv ein.

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter-jdbc-postgresql</artifactId>
</dependency>

Anmerkung

Kennwortlose Verbindungen werden seit Version 4.5.0unterstützt.

Denken Sie daran, zusätzlich zur obigen Abhängigkeit die BOM spring-cloud-azure-dependencies hinzuzufügen. Weitere Informationen finden Sie im Abschnitt Erste Schritte abschnitt des Spring Cloud Azure-Entwicklerhandbuchs.

Grundlegende Nutzung

Die folgenden Abschnitte zeigen die klassischen Anwendungsverwendungsszenarien für Spring Boot.

Wichtig

Kennwortlose Verbindung verwendet die Microsoft Entra-Authentifizierung. Um die Microsoft Entra-Authentifizierung zu verwenden, sollten Sie zuerst den Microsoft Entra-Administratorbenutzer festlegen. Nur ein Microsoft Entra-Administratorbenutzer kann Benutzer für die microsoft Entra ID-basierte Authentifizierung erstellen und aktivieren. Weitere Informationen finden Sie unter Verwenden von Spring Data JDBC mit Azure Database for PostgreSQL.

Lokales Herstellen einer Verbindung mit Azure PostgreSQL ohne Kennwort

  1. Zum Erstellen von Benutzern und Erteilen von Berechtigungen siehe den Abschnitt Erstellen eines PostgreSQL-Benutzers ohne Administratorrechte und Erteilen von Berechtigungen in Verwenden von Spring Data JDBC mit Azure Database for PostgreSQL.

  2. Konfigurieren Sie die folgenden Eigenschaften in Ihrer application.yml Datei:

    spring:
      datasource:
        url: jdbc:postgresql://${AZ_DATABASE_SERVER_NAME}.postgres.database.azure.com:5432/${AZ_DATABASE_NAME}?sslmode=require
        username: ${AZ_POSTGRESQL_AD_NON_ADMIN_USERNAME}
        azure:
          passwordless-enabled: true
    

Herstellen einer Verbindung mit Azure PostgreSQL mithilfe eines Service Principal

  1. Zuweisen einer Rolle zum Dienstprinzipal:

    1. Erstellen Sie ein SQL-Skript namens create_ad_user_sp.sql zum Erstellen eines Nicht-Administratorbenutzers. Fügen Sie den folgenden Inhalt hinzu, und speichern Sie ihn lokal:

      Wichtig

      Stellen Sie sicher, dass <service-principal-name> bereits in Ihrem Microsoft Entra-Mandanten vorhanden ist, oder Sie können den Nicht-Administrator-Benutzer nicht erstellen.

      cat << EOF > create_ad_user_sp.sql
      select * from pgaadauth_create_principal('<service-principal-name>', false, false);
      EOF
      
    2. Verwenden Sie den folgenden Befehl, um das SQL-Skript auszuführen, um den Nicht-Administratorbenutzer von Microsoft Entra zu erstellen:

      psql "host=$AZ_DATABASE_SERVER_NAME.postgres.database.azure.com user=$CURRENT_USERNAME@$AZ_DATABASE_SERVER_NAME dbname=postgres port=5432 password=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken) sslmode=require" < create_ad_user_sp.sql
      
    3. Verwenden Sie nun den folgenden Befehl, um die temporäre SQL-Skriptdatei zu entfernen:

      rm create_ad_user_sp.sql
      
  2. Konfigurieren Sie die folgenden Eigenschaften in Ihrer application.yml Datei:

    spring:
      cloud:
        azure:
          credential:
            client-id: ${AZURE_CLIENT_ID}
            client-secret: ${AZURE_CLIENT_SECRET}
          profile:
            tenant-id: <tenant>
      datasource:
        url: jdbc:postgresql://${AZ_DATABASE_SERVER_NAME}.postgres.database.azure.com:5432/${AZ_DATABASE_NAME}?sslmode=require
        username: ${AZ_POSTGRESQL_AD_SP_USERNAME}
        azure:
          passwordless-enabled: true
    

Anmerkung

Die für tenant-id zulässigen Werte sind: common, organizations, consumersoder die Mandanten-ID. Weitere Informationen zu diesen Werten finden Sie im Abschnitt Falschen Endpunkt verwendet (persönliche Konten und Organisationskonten) in Fehler AADSTS50020 – Benutzerkonto des Identitätsanbieters ist im Mandanten nicht vorhanden. Informationen zum Umwandeln Ihrer Single-Tenant-App finden Sie unter Single-Tenant-App in eine Multitenant-App auf Microsoft Entra ID umwandeln.

Herstellen einer Verbindung mit Azure PostgreSQL mit verwalteter Identität in Azure Spring Apps

  1. Informationen zum Aktivieren der verwalteten Identität finden Sie im abschnitt Zuweisen der verwalteten Identität mithilfe des Azure-Portals Abschnitt Migrieren einer Anwendung, um kennwortlose Verbindungen mit Azure Database for PostgreSQLzu verwenden.

  2. Informationen zum Erteilen von Berechtigungen finden Sie im Abschnitt Zuweisen von Rollen zur verwalteten Identität Abschnitt Migrieren einer Anwendung, um kennwortlose Verbindungen mit Azure Database for PostgreSQLzu verwenden.

  3. Konfigurieren Sie die folgenden Eigenschaften in Ihrer application.yml Datei:

    spring:
      cloud:
        azure:
          credential:
            managed-identity-enabled: true
            client-id: ${AZURE_CLIENT_ID}
      datasource:
        url: jdbc:postgresql://${AZ_DATABASE_SERVER_NAME}.postgres.database.azure.com:5432/${AZ_DATABASE_NAME}?sslmode=require
        username: ${AZ_POSTGRESQL_AD_MI_USERNAME}
        azure:
          passwordless-enabled: true
    

Proben

Sehen Sie sich das azure-spring-boot-samples Repository auf GitHub an.