Поделиться через


Поддержка Spring Cloud Для Azure PostgreSQL

База данных 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 Для PostgreSQL поддерживает следующие два уровня конфигурации:

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

  2. Общие параметры конфигурации Spring Cloud для 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поддерживаются бессерверные подключения.

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

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

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

Важный

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

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

  1. Сведения о создании пользователей и предоставлении разрешений см. в разделе Создание пользователя, отличного от администратора PostgreSQL, и предоставление разрешений раздела Use Spring Data JDBC with Azure Database for 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.

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

  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.