Obsługa usługi Azure PostgreSQL w usłudze Spring Cloud

Azure Database for PostgreSQL to usługa relacyjnej bazy danych oparta na silniku bazy danych Postgres typu open source. Jest to w pełni zarządzana baza danych jako usługa, która może obsługiwać obciążenia o krytycznym znaczeniu z przewidywalną wydajnością, zabezpieczeniami, wysoką dostępnością i dynamiczną skalowalnością.

Z wersji 4.5.0platforma Spring Cloud Azure obsługuje różne typy poświadczeń na potrzeby uwierzytelniania na serwerze elastycznym usługi Azure Database for PostgreSQL.

Obsługiwana wersja bazy danych PostgreSQL

Informacje o obsługiwanych wersjach zawiera artykuł Obsługiwane główne wersje PostgreSQL w usłudze Azure Database for PostgreSQL — Serwer elastyczny.

Podstawowe funkcje

Połączenie bez hasła

Połączenie bez hasła używa uwierzytelniania Entra firmy Microsoft do nawiązywania połączenia z usługami platformy Azure bez przechowywania poświadczeń w aplikacji, jej plikach konfiguracji lub zmiennych środowiskowych. Uwierzytelnianie Microsoft Entra to mechanizm służący do łączenia się z usługą Azure Database for PostgreSQL przy użyciu tożsamości zdefiniowanych w usłudze Microsoft Entra ID. Dzięki uwierzytelnianiu firmy Microsoft Entra można zarządzać tożsamościami użytkowników bazy danych i innymi usługami firmy Microsoft w centralnej lokalizacji, co upraszcza zarządzanie uprawnieniami.

Jak to działa

Platforma Spring Cloud Azure najpierw utworzy jeden z następujących typów poświadczeń w zależności od konfiguracji uwierzytelniania aplikacji:

  • ClientSecretCredential
  • ClientCertificateCredential
  • UsernamePasswordCredential
  • ManagedIdentityCredential
  • DefaultAzureCredential

Jeśli żaden z tych typów poświadczeń nie zostanie znaleziony, poświadczenia DefaultAzureCredential zostaną uzyskane z właściwości aplikacji, zmiennych środowiskowych, tożsamości zarządzanych lub środowiska IDE. Aby uzyskać więcej informacji, zobacz Spring Cloud Azure authentication.

Poniższy diagram wysokiego poziomu podsumowuje sposób działania uwierzytelniania przy użyciu uwierzytelniania OAuth w usłudze Azure Database for PostgreSQL. Strzałki wskazują ścieżki komunikacyjne.

Diagram przedstawiający uwierzytelnianie firmy Microsoft dla bazy danych PostgreSQL.

Konfiguracja

Platforma Spring Cloud Azure for PostgreSQL obsługuje następujące dwa poziomy opcji konfiguracji:

  1. Globalne opcje konfiguracji uwierzytelniania credential i profile z prefiksami spring.cloud.azure.

  2. Spring Cloud Azure for PostgreSQL — typowe opcje konfiguracji.

W poniższej tabeli przedstawiono typowe opcje konfiguracji platformy Spring Cloud azure for PostgreSQL:

Nazwa Opis
spring.datasource.azure.passwordless-enabled Czy włączyć połączenia bez hasła z bazami danych platformy Azure przy użyciu poświadczeń tokenu OAuth2 Firmy Microsoft Entra.
spring.datasource.azure.credential.client-certificate-password Hasło pliku certyfikatu.
spring.datasource.azure.credential.client-certificate-path Ścieżka pliku certyfikatu PEM do użycia podczas przeprowadzania uwierzytelniania jednostki usługi na platformie Azure.
spring.datasource.azure.credential.client-id Identyfikator klienta do użycia podczas przeprowadzania uwierzytelniania jednostki usługi za pomocą platformy Azure. Jest to starsza właściwość.
spring.datasource.azure.credential.client-secret Klucz tajny klienta używany podczas przeprowadzania uwierzytelniania jednostki usługi za pomocą platformy Azure. Jest to starsza właściwość.
spring.datasource.azure.credential.managed-identity-enabled Czy włączyć tożsamość zarządzaną do uwierzytelniania za pomocą platformy Azure. Jeśli true i client-id jest ustawiona, użyje identyfikatora klienta jako identyfikatora klienta tożsamości zarządzanej przypisanej przez użytkownika. Wartość domyślna to false.
spring.datasource.azure.credential.password Hasło do użycia podczas przeprowadzania uwierzytelniania nazwy użytkownika/hasła na platformie Azure.
spring.datasource.azure.credential.username Nazwa użytkownika do użycia podczas przeprowadzania uwierzytelniania nazwy użytkownika/hasła na platformie Azure.
spring.datasource.azure.profile.cloud-type Nazwa chmury platformy Azure do nawiązania połączenia.
spring.datasource.azure.profile.environment.active-directory-endpoint Punkt końcowy Microsoft Entra, z którym ma zostać nawiązane połączenie.
spring.datasource.azure.profile.tenant-id Identyfikator dzierżawcy dla zasobów platformy Azure. Dozwolone wartości dla tenant-id to: common, organizations, consumerslub identyfikator dzierżawy.

Konfiguracja zależności

Dodaj następującą zależność do projektu. Spowoduje to automatyczne dołączenie zależności spring-boot-starter do projektu jako zależności przechodniej.

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

Uwaga

Połączenia bez hasła są obsługiwane od wersji 4.5.0.

Pamiętaj, aby dodać BOM spring-cloud-azure-dependencies wraz z powyższą zależnością. Aby uzyskać więcej informacji, zobacz sekcję Wprowadzenie w przewodniku deweloperów platformy Azure Spring Cloud.

Podstawowe użycie

W poniższych sekcjach przedstawiono klasyczne scenariusze użycia aplikacji Spring Boot.

Ważny

Połączenie bez hasła korzysta z uwierzytelniania firmy Microsoft Entra. Aby użyć uwierzytelniania firmy Microsoft Entra, należy najpierw ustawić użytkownika administratora firmy Microsoft Entra. Tylko użytkownik administracyjny firmy Microsoft Entra może tworzyć i włączać użytkowników na potrzeby uwierzytelniania opartego na identyfikatorze Entra firmy Microsoft. Aby uzyskać więcej informacji, zobacz Use Spring Data JDBC with Azure Database for PostgreSQL.

Nawiązywanie połączenia z usługą Azure PostgreSQL lokalnie bez hasła

  1. Aby utworzyć użytkowników i udzielić uprawnień, zobacz sekcję Create a PostgreSQL non-admin user (Tworzenie użytkownika niebędącego administratorem bazy danych PostgreSQL) i udzielanie uprawnień Use Spring Data JDBC with Azure Database for PostgreSQL(Używanie narzędzia Spring Data JDBC z usługą Azure Database for PostgreSQL).

  2. Skonfiguruj następujące właściwości w pliku application.yml:

    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
    

Nawiązywanie połączenia z usługą Azure PostgreSQL przy użyciu jednostki usługi

  1. Przypisz rolę do jednostki usługi:

    1. Utwórz skrypt SQL o nazwie create_ad_user_sp.sql na potrzeby tworzenia użytkownika niebędącego administratorem. Dodaj następującą zawartość i zapisz ją lokalnie:

      Ważny

      Upewnij się, że <service-principal-name> już istnieje w dzierżawie Microsoft Entra, w przeciwnym razie nie będzie można utworzyć użytkownika bez uprawnień administratora.

      cat << EOF > create_ad_user_sp.sql
      select * from pgaadauth_create_principal('<service-principal-name>', false, false);
      EOF
      
    2. Użyj następującego polecenia, aby uruchomić skrypt SQL tworzący użytkownika Microsoft Entra bez uprawnień administratora:

      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. Teraz użyj następującego polecenia, aby usunąć tymczasowy plik skryptu SQL:

      rm create_ad_user_sp.sql
      
  2. Skonfiguruj następujące właściwości w pliku application.yml:

    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
    

Uwaga

Dozwolone wartości dla tenant-id to: common, organizations, consumerslub identyfikator dzierżawy. Aby uzyskać więcej informacji na temat tych wartości, zobacz sekcję Użyto niewłaściwego punktu końcowego (konta osobiste i organizacyjne) w artykule Błąd AADSTS50020 — konto użytkownika od dostawcy tożsamości nie istnieje w dzierżawie. Aby uzyskać informacje na temat konwersji aplikacji z jedną dzierżawą na aplikację wielodzierżawną, zobacz Konwertowanie aplikacji z jedną dzierżawą na aplikację wielodzierżawną w usłudze Microsoft Entra ID.

Nawiązywanie połączenia z usługą Azure PostgreSQL przy użyciu tożsamości zarządzanej w usłudze Azure Spring Apps

  1. Aby włączyć tożsamość zarządzaną, zobacz sekcję Przypisywanie tożsamości zarządzanej przy użyciu witryny Azure Portal w artykule Migrowanie aplikacji w celu używania połączeń bez hasła z usługą Azure Database for PostgreSQL.

  2. Aby nadać uprawnienia, zobacz sekcję Przypisywanie ról do tożsamości zarządzanej w artykule Migrowanie aplikacji w celu używania połączeń bezhasłowych z usługą Azure Database for PostgreSQL.

  3. Skonfiguruj następujące właściwości w pliku application.yml:

    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
    

Próbki

Zobacz repozytorium azure-spring-boot-samples w serwisie GitHub.