Поддержка PostgreSQL в Spring Cloud Azure

База данных Azure для PostgreSQL — это реляционная служба баз данных на основе ядра СУБД Postgres с открытым исходным кодом. Это полностью управляемая база данных как услуга, которая может обрабатывать критически важные рабочие нагрузки с прогнозируемой производительностью, безопасностью, высокой доступностью и динамической масштабируемостью.

Начиная с версии 4.5.0, Spring Cloud Azure поддерживает различные типы учетных данных для проверки подлинности на гибком сервере Базы данных Azure для PostgreSQL.

Поддерживаемая версия PostgreSQL

Поддерживаемые версии см. в разделе Поддерживаемые основные версии PostgreSQL в Базе данных Azure для PostgreSQL — гибкий сервер.

Основные функции

Подключение без пароля

Подключение без пароля использует проверку подлинности Microsoft Entra для подключения к службам Azure без хранения учетных данных в приложении, его файлах конфигурации или переменных среды. Проверка подлинности Microsoft Entra — это механизм подключения к базе данных Azure для PostgreSQL с помощью удостоверений, определенных в идентификаторе Microsoft Entra. С помощью проверки подлинности Microsoft Entra можно управлять удостоверениями пользователей базы данных и другими службами Майкрософт в центральном расположении, что упрощает управление разрешениями.

Принцип работы

Spring Cloud Azure сначала создаст один из следующих типов учетных данных в зависимости от конфигурации проверки подлинности приложения:

  • ClientSecretCredential
  • ClientCertificateCredential
  • UsernamePasswordCredential
  • ManagedIdentityCredential
  • DefaultAzureCredential

Если ни один из этих типов учетных данных не найден, учетные данные DefaultAzureCredential будут извлечены из свойств приложения, переменных среды, управляемых идентификаторов или интегрированной среды разработки. Дополнительные сведения см. в разделе Аутентификация Spring Cloud Azure.

На следующей высокоуровневой схеме показано, как работает проверка подлинности с помощью проверки подлинности учетных данных OAuth с базой данных Azure для PostgreSQL. Стрелки указывают пути связи.

схема с проверкой подлинности Microsoft Entra для PostgreSQL.

Конфигурация

Spring Cloud Azure for PostgreSQL поддерживает следующие два уровня параметров конфигурации:

  1. Параметры глобальной конфигурации проверки подлинности credential и profile с префиксами spring.cloud.azure.

  2. Общие параметры конфигурации Spring Cloud Azure для PostgreSQL.

В следующей таблице показаны распространенные параметры конфигурации Azure Spring Cloud для PostgreSQL:

Имя Описание
spring.datasource.azure.passwordless-enabled Следует ли включить подключения без пароля к базам данных Azure с помощью учетных данных токена Microsoft Entra OAuth2.
spring.datasource.azure.credential.client-certificate-password Пароль файла сертификата.
spring.datasource.azure.credential.client-certificate-path Путь к файлу сертификата PEM для использования при выполнении проверки подлинности субъекта-службы с помощью Azure.
spring.datasource.azure.credential.client-id Идентификатор клиента, используемый для аутентификации субъекта-службы в Azure. Это устаревшее свойство.
spring.datasource.azure.credential.client-secret Секрет клиента, используемый при выполнении проверки подлинности субъекта-службы с помощью Azure. Это устаревшее свойство.
spring.datasource.azure.credential.managed-identity-enabled Следует ли включить управляемое удостоверение для проверки подлинности в Azure. Если задано значение true и установлен параметр client-id, в качестве идентификатора клиента управляемой идентификации, назначаемой пользователем, будет использоваться идентификатор клиента. Значение по умолчанию — false.
spring.datasource.azure.credential.password Пароль, используемый при выполнении проверки подлинности имени пользователя или пароля в Azure.
spring.datasource.azure.credential.username Имя пользователя, используемое при выполнении проверки подлинности имени пользователя или пароля в Azure.
spring.datasource.azure.profile.cloud-type Имя облака Azure для подключения.
spring.datasource.azure.profile.environment.active-directory-endpoint Конечная точка Microsoft Entra, к которой выполняется подключение.
spring.datasource.azure.profile.tenant-id Идентификатор клиента для ресурсов Azure. Значения, допустимые для tenant-id: common, organizations, consumersили идентификатор клиента.

Настройка зависимостей

Добавьте в проект следующую зависимость. Это автоматически добавит зависимость spring-boot-starter в ваш проект как транзитивную.

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

Заметка

Подключения без пароля поддерживаются начиная с версии 4.5.0.

Не забудьте добавить BOM spring-cloud-azure-dependencies вместе с указанной выше зависимостью. Дополнительные сведения см. в разделе Начало работы руководства разработчика Spring Cloud Azure.

Базовое использование

В следующих разделах показаны классические сценарии использования приложений Spring Boot.

Важно

Подключение без пароля использует проверку подлинности Microsoft Entra. Чтобы использовать проверку подлинности Microsoft Entra, сначала необходимо задать пользователя администратора Microsoft Entra. Только пользователь администратора Microsoft Entra может создавать и включать пользователей для проверки подлинности на основе идентификаторов Майкрософт. Дополнительные сведения см. в статье Use Spring Data JDBC with База данных Azure для PostgreSQL.

Подключение к Azure PostgreSQL локально без пароля

  1. Сведения о создании пользователей и предоставлении разрешений см. в разделе Создание пользователя, отличного от администратора PostgreSQL, и предоставление разрешений раздела Use Spring Data JDBC with База данных Azure для PostgreSQL.

  2. Настройте следующие свойства в файле 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
    

Подключение к Azure PostgreSQL с помощью субъекта-службы

  1. Назначьте роль субъекту-службе:

    1. Создайте скрипт SQL с именем create_ad_user_sp.sql для создания пользователя без администратора. Добавьте следующее содержимое и сохраните его локально:

      Важно

      Убедитесь, что <service-principal-name> уже существует в клиенте Microsoft Entra, или вы не сможете создать пользователя без администратора.

      cat << EOF > create_ad_user_sp.sql
      select * from pgaadauth_create_principal('<service-principal-name>', false, false);
      EOF
      
    2. Используйте следующую команду, чтобы выполнить SQL-скрипт для создания пользователя Microsoft Entra без прав администратора:

      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. Теперь используйте следующую команду, чтобы удалить временный файл скрипта SQL:

      rm create_ad_user_sp.sql
      
  2. Настройте следующие свойства в файле 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
    

Заметка

Значения, допустимые для tenant-id: common, organizations, consumersили идентификатор клиента. Дополнительные сведения об этих значениях см. в разделе Использована неправильная конечная точка (личные и организационные учетные записи) статьи Ошибка AADSTS50020: учетная запись пользователя от поставщика удостоверений не существует в арендаторе. Сведения о преобразовании однотенантного приложения см. в статье Преобразование однотенантного приложения в мультитенантное в Microsoft Entra ID.

Подключение к Azure PostgreSQL с помощью управляемого удостоверения в Приложения Azure Spring

  1. Чтобы включить управляемую идентификацию, см. раздел Назначение управляемой идентификации с помощью портала Azure в статье Перенос приложения для использования беспарольных подключений с База данных Azure для PostgreSQL.

  2. Чтобы предоставить разрешения, см. раздел Назначение ролей для управляемого удостоверения в статье Перенос приложения для использования подключений без пароля с База данных Azure для PostgreSQL.

  3. Настройте следующие свойства в файле 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
    

Образцы

См. репозиторий azure-spring-boot-samples на сайте GitHub.