Использование идентификатора Microsoft Entra для проверки подлинности с помощью PostgreSQL

Область применения: отдельный сервер Базы данных Azure для PostgreSQL

Внимание

База данных Azure для PostgreSQL — одиночный сервер находится на пути выхода на пенсию. Настоятельно рекомендуется выполнить обновление до База данных Azure для PostgreSQL — гибкий сервер. Дополнительные сведения о миграции на База данных Azure для PostgreSQL — гибкий сервер см. в статье "Что происходит с одним сервером База данных Azure для PostgreSQL?".

В этой статье описаны инструкции по настройке доступа к идентификатору Microsoft Entra с помощью База данных Azure для PostgreSQL и способам подключения с помощью маркера Microsoft Entra.

Настройка пользователя Microsoft Entra Администратор

Только администраторы Microsoft Entra могут создавать и включать пользователей для проверки подлинности на основе идентификаторов Майкрософт. Не рекомендуется использовать администратор Microsoft Entra для регулярных операций базы данных, так как он имеет повышенные разрешения пользователя (например, CREATEDB).

Чтобы задать администратора Microsoft Entra (можно использовать пользователя или группу), выполните следующие действия.

  1. В портал Azure выберите экземпляр База данных Azure для PostgreSQL, который требуется включить для идентификатора Microsoft Entra.
  2. В разделе "Параметры" выберите "Администратор Active Directory",

Установка администратора Microsoft Entra

  1. Выберите допустимого пользователя Microsoft Entra в клиенте клиента, чтобы быть администратором Microsoft Entra.

Внимание

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

Для каждого сервера PostgreSQL можно создать только один администратор Microsoft Entra, а другой перезаписывает существующий администратор Microsoft Entra, настроенный для сервера. Можно указать группу Microsoft Entra вместо отдельного пользователя, чтобы иметь несколько администраторов. Обратите внимание, что для выполнения действий, связанных с администрированием, вам нужно будет войти с помощью имени группы.

Подключение База данных Azure для PostgreSQL с помощью идентификатора Microsoft Entra

На следующей высокоуровневой схеме представлен рабочий процесс использования проверки подлинности Microsoft Entra с База данных Azure для PostgreSQL:

поток проверки подлинности

Мы разработали интеграцию Microsoft Entra для работы с общими инструментами PostgreSQL, такими как psql, которые не поддерживают Microsoft Entra и поддерживают только указание имени пользователя и пароля при подключении к PostgreSQL. Мы передаем маркер Microsoft Entra в качестве пароля, как показано на рисунке выше.

В настоящее время мы протестировали следующие клиенты:

  • командную строку psql (для передачи маркера проверки подлинности используйте переменную PGPASSWORD, дополнительные сведения см. в шаге 3);
  • Azure Data Studio (использующее расширение PostgreSQL);
  • другие клиенты на основе libpq (например, обычные исполняющие среды и ORM).
  • PgAdmin (снимите флажок "Подключиться сейчас" при создании сервера. См. шаг 4 для получения дополнительной информации)

Это действия, которые потребуется выполнить проверку подлинности пользователя или приложения с помощью идентификатора Microsoft Entra, описанного ниже.

Необходимые компоненты

Вы можете выполнить этот процесс в Azure Cloud Shell, на виртуальной машине Azure или на локальном компьютере. Убедитесь, что у вас установлен Azure CLI.

Проверка подлинности с помощью идентификатора Microsoft Entra в качестве одного пользователя

Шаг 1. Вход в подписку Azure пользователя

Начните с проверки подлинности с помощью идентификатора Microsoft Entra с помощью средства Azure CLI. Этот шаг не является обязательным в Azure Cloud Shell.

az login

Команда запустит окно браузера на странице проверки подлинности Microsoft Entra. Для этого необходимо предоставить идентификатор пользователя Microsoft Entra и пароль.

Шаг 2. Получение маркера доступа Microsoft Entra

Вызовите средство Azure CLI, чтобы получить маркер доступа для пользователя, прошедшего проверку подлинности Microsoft Entra, с шага 1, чтобы получить доступ к База данных Azure для PostgreSQL.

Пример (для общедоступного облака)

az account get-access-token --resource https://ossrdbms-aad.database.windows.net

Приведенное выше значение ресурса должно быть указано точно так, как показано. Для других облаков значение ресурса можно найти с помощью следующего.

az cloud show

Для Azure CLI 2.0.71 и более поздних версий команду можно указать в следующей более удобной версии для всех облаков.

az account get-access-token --resource-type oss-rdbms

После успешной проверки подлинности идентификатор Microsoft Entra возвращает маркер доступа:

{
  "accessToken": "TOKEN",
  "expiresOn": "...",
  "subscription": "...",
  "tenant": "...",
  "tokenType": "Bearer"
}

Маркер представляет собой строку в кодировке Base 64, которая кодирует все сведения о пользователе, прошедшем аутентификацию, и которая предназначена для службы "База данных Azure для PostgreSQL".

Шаг 3. Использование маркера в качестве пароля для входа с помощью PSQL

При подключении в качестве пароля пользователя PostgreSQL необходимо использовать маркер доступа.

При использовании клиента командной строки psql маркер доступа необходимо передавать с помощью переменной среды PGPASSWORD, поскольку длина маркера доступа превышает длину пароля, которую psql может принять напрямую:

Пример (Windows):

set PGPASSWORD=<copy/pasted TOKEN value from step 2>
$env:PGPASSWORD='<copy/pasted TOKEN value from step 2>'

Пример (Linux/macOS):

export PGPASSWORD=<copy/pasted TOKEN value from step 2>

Теперь вы можете инициировать подключение к Базе данных Azure для PostgreSQL как обычно:

psql "host=mydb.postgres... user=user@tenant.onmicrosoft.com@mydb dbname=postgres sslmode=require"

Шаг 4. Использование маркера в качестве пароля для входа с помощью PgAdmin

Чтобы подключиться с помощью маркера Microsoft Entra с pg Администратор выполните следующие действия:

  1. Снимите флажок "Подключиться сейчас" при создании сервера.
  2. Введите сведения о сервере на вкладке подключение и сохраните данные.
  3. В меню браузера выберите пункт подключения к серверу Базы данных Azure для PostgreSQL.
  4. В ответ на запрос введите пароль маркера Azure AD.

При подключении важно учесть следующее.

  • user@tenant.onmicrosoft.com — имя пользователя Microsoft Entra
  • Не забудьте использовать точный способ написания имени пользователя Azure, так как имена пользователей и групп Microsoft Entra чувствительны к регистру.
  • Если это имя содержит пробелы, экранируйте каждый пробел, добавив перед ним символ \.
  • Срок действия маркера доступа составляет от 5 до 60 минут. Мы рекомендуем получить маркер доступа непосредственно перед началом входа в Базу данных Azure для PostgreSQL.

Теперь вы прошли проверку подлинности на сервере База данных Azure для PostgreSQL с помощью проверки подлинности Microsoft Entra.

Проверка подлинности с помощью идентификатора Microsoft Entra в качестве члена группы

Шаг 1. Создание групп Microsoft Entra в База данных Azure для PostgreSQL

Чтобы включить группу Microsoft Entra для доступа к базе данных, используйте тот же механизм, что и для пользователей, но вместо этого укажите имя группы:

Пример:

CREATE USER <new_user> IN ROLE azure_ad_user;

При входе в систему участники группы будут использовать свои персональные маркеры доступа, но будут подписаны с именем группы, указанным в качестве имени пользователя.

Шаг 2. Вход в подписку Azure пользователя

Проверка подлинности с помощью идентификатора Microsoft Entra с помощью средства Azure CLI. Этот шаг не является обязательным в Azure Cloud Shell. Пользователь должен быть членом группы Microsoft Entra.

az login

Шаг 3. Получение маркера доступа Microsoft Entra

Вызовите средство Azure CLI, чтобы получить маркер доступа для пользователя, прошедшего проверку подлинности Microsoft Entra, с шага 2, чтобы получить доступ к База данных Azure для PostgreSQL.

Пример (для общедоступного облака)

az account get-access-token --resource https://ossrdbms-aad.database.windows.net

Приведенное выше значение ресурса должно быть указано точно так, как показано. Для других облаков значение ресурса можно найти с помощью следующего.

az cloud show

Для Azure CLI 2.0.71 и более поздних версий команду можно указать в следующей более удобной версии для всех облаков.

az account get-access-token --resource-type oss-rdbms

После успешной проверки подлинности идентификатор Microsoft Entra возвращает маркер доступа:

{
  "accessToken": "TOKEN",
  "expiresOn": "...",
  "subscription": "...",
  "tenant": "...",
  "tokenType": "Bearer"
}

Шаг 4. Использование маркера в качестве пароля для входа с помощью PSQL или PgAdmin (сведения о подключении пользователя см. в приведенных выше шагах)

Важные моменты при подключении в качестве члена группы:

  • groupname@mydb — это имя группы Microsoft Entra, к которому вы пытаетесь подключиться как
  • Всегда добавляйте имя сервера после имени пользователя или группы Microsoft Entra (например, @mydb)
  • Обязательно используйте точный способ написания имени группы Microsoft Entra.
  • Имена пользователей и групп Microsoft Entra чувствительны к регистру
  • При подключении от имени группы указывайте только имя группы (например, так: имя_группы@mydb), а не псевдоним члена группы.
  • Если это имя содержит пробелы, экранируйте каждый пробел, добавив перед ним символ \.
  • Срок действия маркера доступа составляет от 5 до 60 минут. Мы рекомендуем получить маркер доступа непосредственно перед началом входа в Базу данных Azure для PostgreSQL.

Теперь вы прошли проверку подлинности на сервере PostgreSQL с помощью проверки подлинности Microsoft Entra.

Создание пользователей Microsoft Entra в База данных Azure для PostgreSQL

Чтобы добавить пользователя Microsoft Entra в базу данных База данных Azure для PostgreSQL, выполните следующие действия после подключения (см. дополнительные сведения о подключении):

  1. Сначала убедитесь, что пользователь <user>@yourtenant.onmicrosoft.com Microsoft Entra является допустимым пользователем в клиенте Microsoft Entra.
  2. Войдите в База данных Azure для PostgreSQL экземпляр в качестве пользователя Microsoft Entra Администратор.
  3. Создайте роль <user>@yourtenant.onmicrosoft.com в Базе данных Azure для PostgreSQL.
  4. Сделайте <user>@yourtenant.onmicrosoft.com членом роли azure_ad_user. Это должно быть предоставлено только пользователям Microsoft Entra.

Пример:

CREATE USER "user1@yourtenant.onmicrosoft.com" IN ROLE azure_ad_user;

Примечание.

Проверка подлинности пользователя с помощью идентификатора Microsoft Entra не дает пользователю никаких разрешений на доступ к объектам в базе данных База данных Azure для PostgreSQL. Вы должны предоставить пользователю необходимые разрешения вручную.

проверка маркера

Проверка подлинности Microsoft Entra в База данных Azure для PostgreSQL гарантирует, что пользователь существует на сервере PostgreSQL и проверка допустимость маркера, проверяя содержимое маркера. Для проверки маркера выполняются приведенные ниже шаги.

  • Маркер подписан идентификатором Microsoft Entra и не был изменен
  • Маркер выдан идентификатором Microsoft Entra для клиента, связанного с сервером
  • Срок действия маркера не истек.
  • Маркер предназначен для ресурса Базы данных Azure для PostgreSQL (а не другого ресурса Azure).

Перенос существующих пользователей PostgreSQL в проверку подлинности на основе идентификатора Microsoft Entra

Вы можете включить проверку подлинности Microsoft Entra для существующих пользователей. Здесь необходимо рассмотреть два случая:

Случай 1. Имя пользователя PostgreSQL соответствует имени участника-пользователя Microsoft Entra

В маловероятном случае, если существующие пользователи уже соответствуют именам пользователей Microsoft Entra, вы можете предоставить azure_ad_user им роль, чтобы включить их для проверки подлинности Microsoft Entra:

GRANT azure_ad_user TO "existinguser@yourtenant.onmicrosoft.com";

Теперь они смогут войти с помощью учетных данных Microsoft Entra, а не использовать ранее настроенный пароль пользователя PostgreSQL.

Случай 2. Имя пользователя PostgreSQL отличается от имени участника-пользователя Microsoft Entra

Если пользователь PostgreSQL не существует в идентификаторе Microsoft Entra или имеет другое имя пользователя, можно использовать группы Microsoft Entra для проверки подлинности в качестве этого пользователя PostgreSQL. Вы можете перенести существующие База данных Azure для PostgreSQL пользователей в идентификатор Microsoft Entra, создав группу Microsoft Entra с именем, соответствующим пользователю PostgreSQL, а затем предоставив роль azure_ad_user существующему пользователю PostgreSQL:

GRANT azure_ad_user TO <new_user>;

Предполагается, что вы создали группу DBReadUser в идентификаторе Microsoft Entra. Пользователи, являющиеся членами этой группы, теперь смогут входить в базу данных как указанный пользователь.

Следующие шаги