Подключение с помощью управляемого удостоверения к базе данных Azure для PostgreSQL - гибкий сервер
ОБЛАСТЬ ПРИМЕНЕНИЯ: База данных Azure для PostgreSQL — гибкий сервер
Управляемые удостоверения, назначаемые системой, и назначаемые пользователем, можно использовать для проверки подлинности на гибком сервере База данных 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 with the identity assign
command enable the system-assigned identity to a existing VM:
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 для PostgreSQL гибкого пользователя сервера для управляемого удостоверения
Теперь подключитесь от имени администратора Microsoft Entra к гибкой базе данных сервера База данных Azure для PostgreSQL и выполните следующие инструкции 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 ID см. в статье об управлении ролями гибкого сервера с База данных Azure для PostgreSQL включенным идентификатором Microsoft Entra.
Теперь управляемое удостоверение имеет доступ при проверке подлинности с помощью имени удостоверения в качестве имени роли и маркера 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-01
resource
=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. Замените значения 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> именем управляемого удостоверения.
- БАЗА ДАННЫХ: замените имя базы данных именем экземпляра База данных Azure для PostgreSQL.
- Проверка подлинности Microsoft Entra: код использует управляемое удостоверение, назначаемое системой, для получения маркера доступа из идентификатора Microsoft Entra.
При выполнении эта команда дает выходные данные следующим образом:
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