Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Управляемые удостоверения, назначаемые системой, и назначаемые пользователем, можно использовать для проверки подлинности в гибком экземпляре сервера Базы данных Azure для PostgreSQL. В этой статье показано, как использовать управляемое удостоверение, назначаемое системой, для виртуальной машины Azure для доступа к гибкому экземпляру сервера Базы данных Azure для PostgreSQL. Управляемые удостоверения автоматически управляются Azure и позволяют выполнять проверку подлинности в службах, поддерживающих проверку подлинности Microsoft Entra, без необходимости вставлять учетные данные в код.
Вы узнаете, как:
- Предоставьте виртуальной машине доступ к гибкому экземпляру сервера Базы данных Azure для PostgreSQL.
- Создайте пользователя в базе данных, представляющего системно назначенную идентичность виртуальной машины.
- Получите маркер доступа с помощью удостоверения виртуальной машины и используйте его для запроса гибкого экземпляра сервера Базы данных Azure для PostgreSQL.
- Реализуйте извлечение маркера в примере приложения C#.
Предпосылки
- Если вы не знакомы с функцией управляемых удостоверений для ресурсов Azure, ознакомьтесь с этим обзором. Если у вас нет учетной записи Azure, зарегистрируйтесь для получения бесплатной учетной записи , прежде чем продолжить.
- Чтобы выполнить требуемое создание ресурсов и управление ролями, ваша учетная запись должна иметь разрешения "Владелец" в соответствующей области (подписка или группа ресурсов). Если вам нужна помощь с назначением ролей, см. статью "Назначение ролей Azure" для управления доступом к ресурсам подписки Azure.
- Вам нужна виртуальная машина Azure (например, под управлением Ubuntu Linux), которую вы хотите использовать для доступа к базе данных с помощью управляемого удостоверения.
- Вам нужен гибкий экземпляр сервера Базы данных Azure для PostgreSQL с настроенной проверкой подлинности Microsoft Entra
- Чтобы следовать примеру C#, сначала выполните инструкции по подключению к C#
Создайте системно назначенное управляемое удостоверение для виртуальной машины
Используйте az vm identity assign с командой identity assign, чтобы включить системно назначенную идентичность для существующей ВМ.
az vm identity assign -g myResourceGroup -n myVm
Получите идентификатор для управляемого удостоверения, назначенного системой, который вам понадобится в следующих нескольких шагах:
# Get the client ID (application ID) of the system-assigned managed identity
az ad sp list --display-name vm-name --query [*].appId --out tsv
Создайте пользователя для Azure Database for PostgreSQL с управляемым удостоверением
Теперь подключитесь к базе данных гибкого сервера Azure Database для PostgreSQL в роли пользователя-администратора Microsoft Entra и выполните следующие SQL-выражения, заменив <identity_name> на имя ресурсов, для которых было создано управляемое удостоверение, назначаемое системой.
Обратите внимание , что pgaadauth_create_principal необходимо запустить в базе данных Postgres.
select * from pgaadauth_create_principal('<identity_name>', false, false);
Успех выглядит следующим образом:
pgaadauth_create_principal
-----------------------------------
Created role for "<identity_name>"
(1 row)
Дополнительные сведения об управлении ролями базы данных с включенными идентификаторами Microsoft Entra см. в статье "Управление ролями Microsoft Entra" в Базе данных Azure для PostgreSQL.
Теперь управляемая идентификация имеет доступ при аутентификации с использованием имени идентификации в качестве названия роли и токена Microsoft Entra в качестве пароля.
Замечание
Если управляемое удостоверение недопустимо, возвращается ошибка: ERROR: Could not validate AAD user <ObjectId> because its name is not found in the tenant. [...]
Если отображается сообщение об ошибке "Нет совпадений функций...", убедитесь, что вы подключаетесь к postgres базе данных, а не другой созданной базе данных.
Получение маркера доступа из службы метаданных экземпляра Azure
Теперь ваше приложение может получить токен доступа из службы метаданных экземпляра Azure и использовать его для аутентификации в базе данных.
Получение этого маркера выполняется путем выполнения запроса HTTP к http://169.254.169.254/metadata/identity/oauth2/token при передаче следующих параметров:
api-version=2018-02-01resource=https://ossrdbms-aad.database.windows.net-
client_id=CLIENT_ID(которую вы получили ранее)
Возвращается JSON-результат, содержащий поле access_token. Это длинное текстовое значение является токеном доступа к управляемому удостоверению, который следует использовать в качестве пароля при подключении к базе данных.
В целях тестирования в оболочке можно выполнить следующие команды.
Замечание
Обратите внимание, что для работы требуются установленные curl, jq и psql клиент.
# Retrieve the access token
export PGPASSWORD=`curl -s 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fossrdbms-aad.database.windows.net&client_id=CLIENT_ID' -H Metadata:true | jq -r .access_token`
# Connect to the database
psql -h SERVER --user USER DBNAME
Теперь вы подключены к базе данных, настроенной ранее.
Подключение с помощью управляемого удостоверения
В этом разделе показано, как получить маркер доступа с помощью управляемого удостоверения, назначаемого пользователем виртуальной машины, и использовать его для вызова гибкого экземпляра сервера Базы данных Azure для PostgreSQL. База данных Azure для PostgreSQL изначально поддерживает проверку подлинности Microsoft Entra, поэтому она может напрямую принимать маркеры доступа, полученные с помощью управляемых удостоверений для ресурсов Azure. При создании подключения к Базе данных Azure для PostgreSQL токен доступа передается в поле пароля.
Подключение с помощью управляемого удостоверения в Python
Пример кода Python см. в кратком руководстве. Использование Python для подключения и запроса данных в Базе данных Azure для PostgreSQL
Подключение с помощью управляемого удостоверения в Java
Пример кода Java см. в кратком руководстве. Использование Java и JDBC с базой данных Azure для PostgreSQL
Подключитесь с использованием управляемого идентификатора в C#
Ниже приведен пример кода .NET для открытия подключения к гибкому экземпляру сервера Базы данных Azure для PostgreSQL с помощью маркера доступа. Этот код должен выполняться на виртуальной машине для использования управляемого удостоверения, назначаемого системой, с целью получения токена доступа от службы Microsoft Entra ID. Замените значения HOST, USER (с <identity_name>) и DATABASE.
using Azure.Identity;
using Npgsql;
using System;
class Program
{
static void Main(string[] args)
{
try
{
// Obtain an access token using the system-assigned managed identity
var tokenCredential = new DefaultAzureCredential();
var accessToken = tokenCredential.GetToken(
new Azure.Core.TokenRequestContext(new[] { "https://ossrdbms-aad.database.windows.net/.default" })
);
// Build the connection string
string host = "your-server-name.postgres.database.azure.com"; // Replace with your flexible server's host
string database = "your-database-name"; // Replace with your database name
string user = "<identity_name>"; // Replace with your identity name (e.g., "myManagedIdentity")
var connectionString = $"Host={host};Database={database};Username={user};Password={accessToken.Token};SSL Mode=Require;Trust Server Certificate=true";
// Open a connection to the database
using var connection = new NpgsqlConnection(connectionString);
connection.Open();
Console.WriteLine("Connection successful!");
// Optional: Perform a simple query
using var command = new NpgsqlCommand("SELECT version();", connection);
using var reader = command.ExecuteReader();
while (reader.Read())
{
Console.WriteLine($"PostgreSQL version: {reader.GetString(0)}");
}
}
catch (Exception ex)
{
Console.WriteLine($"An error occurred: {ex.Message}");
}
}
}
Необходимо заполнить следующие заполнители:
- HOST: замените your-server-name.postgres.database.azure.com на имя хоста экземпляра.
- ПОЛЬЗОВАТЕЛЬ. Замените <identity_name> именем управляемого удостоверения.
-
DATABASE: замените your-database-name на имя экземпляра вашей базы данных Azure для PostgreSQL. - Проверка подлинности Microsoft Entra: код использует управляемое удостоверение виртуальной машины, назначаемое системой, для получения токена доступа из Microsoft Entra ID.
При выполнении эта команда дает выходные данные следующим образом:
Getting access token from Azure AD...
Opening connection using access token...
Connected!
Postgres version: PostgreSQL 11.11, compiled by Visual C++ build 1800, 64-bit