Podpora Spring Cloud Azure PostgreSQL

azure Database for PostgreSQL je relační databázová služba založená na opensourcovém databázovém stroji Postgres. Jedná se o plně spravovanou databázi jako službu, která dokáže zpracovávat důležité úlohy s předvídatelným výkonem, zabezpečením, vysokou dostupností a dynamickou škálovatelností.

Od verze 4.5.0podporuje Spring Cloud Azure různé typy přihlašovacích údajů pro ověřování na flexibilní server Azure Database for PostgreSQL.

Podporovaná verze PostgreSQL

Podporované verze najdete v tématu Podporované hlavní verze PostgreSQL ve službě Azure Database for PostgreSQL – flexibilní server.

Základní funkce

Připojení bez hesla

Připojení bez hesla používá ověřování Microsoft Entra pro připojení ke službám Azure bez uložení přihlašovacích údajů v aplikaci, konfiguračních souborech nebo v proměnných prostředí. Ověřování Microsoft Entra je mechanismus pro připojení ke službě Azure Database for PostgreSQL pomocí identit definovaných v MICROSOFT Entra ID. Pomocí ověřování Microsoft Entra můžete spravovat identity uživatelů databáze a další služby Microsoftu v centrálním umístění, což zjednodušuje správu oprávnění.

Jak to funguje

Spring Cloud Azure nejprve sestaví jeden z následujících typů přihlašovacích údajů v závislosti na konfiguraci ověřování aplikací:

  • ClientSecretCredential
  • ClientCertificateCredential
  • UsernamePasswordCredential
  • ManagedIdentityCredential
  • DefaultAzureCredential

Pokud se nenajde žádný z těchto typů přihlašovacích údajů, DefaultAzureCredential přihlašovací údaje budou získány z vlastností aplikace, proměnných prostředí, spravovaných identit nebo z integrovaného vývojového prostředí. Další informace najdete v tématu ověřování Spring Cloud Azure.

Následující základní diagram shrnuje, jak funguje ověřování pomocí ověřování přihlašovacích údajů OAuth se službou Azure Database for PostgreSQL. Šipky označují komunikační cesty.

diagram znázorňující ověřování Microsoft Entra pro PostgreSQL .

Konfigurace

Spring Cloud Azure for PostgreSQL podporuje následující dvě úrovně možností konfigurace:

  1. Možnosti konfigurace globálního ověřování credential a profile s předponami spring.cloud.azure.

  2. Běžné možnosti konfigurace Spring Cloud Azure for PostgreSQL

Následující tabulka uvádí běžné možnosti konfigurace Spring Cloud Azure for PostgreSQL:

Jméno Popis
spring.datasource.azure.passwordless-enabled Určuje, jestli chcete povolit připojení bez hesla k databázím Azure pomocí přihlašovacích údajů tokenu OAuth2 Microsoft Entra.
spring.datasource.azure.credential.client-certificate-password Heslo souboru certifikátu.
spring.datasource.azure.credential.client-certificate-path Cesta k souboru certifikátu PEM, který se má použít při ověřování instančního objektu v Azure
spring.datasource.azure.credential.client-id ID klienta, které se má použít při ověřování instančního objektu v Azure. Toto je starší vlastnost.
spring.datasource.azure.credential.client-secret Tajný klíč klienta, který se má použít při ověřování instančního objektu v Azure. Toto je starší vlastnost.
spring.datasource.azure.credential.managed-identity-enabled Určuje, jestli se má spravovaná identita ověřit v Azure. Pokud true a je nastavená client-id, použije se ID klienta jako ID klienta přiřazené uživatelem spravované identity. Výchozí hodnota je false.
spring.datasource.azure.credential.password Heslo, které se má použít při ověřování pomocí uživatelského jména a hesla v Azure.
spring.datasource.azure.credential.username Uživatelské jméno, které se má použít při ověřování pomocí uživatelského jména a hesla v Azure.
spring.datasource.azure.profile.cloud-type Název cloudu Azure, ke kterému se chcete připojit.
spring.datasource.azure.profile.environment.active-directory-endpoint Koncový bod Microsoft Entra, ke kterému se chcete připojit.
spring.datasource.azure.profile.tenant-id ID tenanta pro prostředky Azure. Hodnoty povolené pro tenant-id jsou: common, organizations, consumersnebo ID tenanta.

Nastavení závislostí

Přidejte do projektu následující závislost. To bude automaticky zahrnovat spring-boot-starter závislost do projektu tranzitivně.

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

Poznámka

Připojení bez hesla byla podporována od verze 4.5.0.

Nezapomeňte přidat spring-cloud-azure-dependencies kusovníku spolu s výše uvedenou závislostí. Další informace najdete v části Začínáme příručky pro vývojáře Spring Cloud v Azure.

Základní využití

Následující části ukazují klasické scénáře použití aplikace Spring Boot.

Důležitý

Připojení bez hesla používá ověřování Microsoft Entra. Pokud chcete použít ověřování Microsoft Entra, měli byste nejprve nastavit uživatele správce Microsoft Entra. Pouze uživatel správce Microsoft Entra může vytvářet a povolovat uživatele pro ověřování založené na ID Microsoft Entra. Další informace najdete v tématu Použití Spring Data JDBC se službou Azure Database for PostgreSQL.

Místní připojení k Azure PostgreSQL bez hesla

  1. Pokud chcete vytvářet uživatele a udělovat oprávnění, přečtěte si část Vytvoření uživatele bez oprávnění postgreSQL a udělení oprávnění části Použití Spring Data JDBC se službou Azure Database for PostgreSQL.

  2. V souboru application.yml nakonfigurujte následující vlastnosti:

    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
    

Připojení k Azure PostgreSQL pomocí instančního objektu

  1. Přiřaďte roli instančnímu objektu:

    1. Vytvořte skript SQL s názvem create_ad_user_sp.sql pro vytvoření uživatele bez oprávnění správce. Přidejte následující obsah a uložte ho místně:

      Důležitý

      Ujistěte se, že <service-principal-name> již ve vašem tenantovi Microsoft Entra existuje, nebo nebudete moct vytvořit uživatele bez oprávnění správce.

      cat << EOF > create_ad_user_sp.sql
      select * from pgaadauth_create_principal('<service-principal-name>', false, false);
      EOF
      
    2. Spuštěním následujícího příkazu spusťte skript SQL a vytvořte uživatele Microsoft Entra bez oprávnění správce:

      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. Teď pomocí následujícího příkazu odeberte dočasný soubor skriptu SQL:

      rm create_ad_user_sp.sql
      
  2. V souboru application.yml nakonfigurujte následující vlastnosti:

    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
    

Poznámka

Hodnoty povolené pro tenant-id jsou: common, organizations, consumersnebo ID tenanta. Další informace o těchto hodnotách najdete v části Použití nesprávného koncového bodu (osobní a organizační účty) části Chyba AADSTS50020 – Uživatelský účet od zprostředkovatele identity vtenanta neexistuje . Informace o převodu aplikace s jedním tenantem najdete v tématu Převod jednoklientských aplikací na víceklienta vMicrosoft Entra ID .

Připojení k Azure PostgreSQL pomocí spravované identity v Azure Spring Apps

  1. Pokud chcete povolit spravovanou identitu, přečtěte si část Přiřazení spravované identity pomocí webu Azure Portal části Migrace aplikace pro použití bez hesel sAzure Database for PostgreSQL .

  2. Pokud chcete udělit oprávnění, přečtěte si část Přiřazení rolí spravované identitěMigrace aplikace pro použití bez hesel sAzure Database for PostgreSQL .

  3. V souboru application.yml nakonfigurujte následující vlastnosti:

    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
    

Vzorky

Podívejte se na azure-spring-boot-samples úložiště na GitHubu.