Подключение к Базе данных Azure для PostgreSQL с помощью управляемого удостоверения
Область применения: отдельный сервер Базы данных Azure для PostgreSQL
Внимание
База данных Azure для PostgreSQL — одиночный сервер находится на пути выхода на пенсию. Настоятельно рекомендуется выполнить обновление до База данных Azure для PostgreSQL — гибкий сервер. Дополнительные сведения о миграции на База данных 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 с параметром 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
Создание пользователя PostgreSQL для управляемого удостоверения
Теперь подключитесь к базе данных PostgreSQL от имени администратора Microsoft Entra и выполните следующие инструкции SQL, заменив CLIENT_ID
идентификатор клиента, полученный для управляемого удостоверения, назначаемого системой:
SET aad_validate_oids_in_tenant = off;
CREATE ROLE myuser WITH LOGIN PASSWORD 'CLIENT_ID' IN ROLE azure_ad_user;
Теперь управляемое удостоверение имеет доступ при проверке подлинности с помощью имени пользователя myuser
(замените другим именем по своему усмотрению).
Получение маркера доступа из Службы метаданных экземпляров 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@SERVER DBNAME
Теперь вы подключены к настроенной ранее базе данных.
Подключение с использованием управляемого удостоверения в C#
В этом разделе показано, как получить маркер доступа с помощью назначаемого пользователем управляемого удостоверения виртуальной машины и использовать этот маркер для обращения к базе данных Azure для PostgreSQL. База данных Azure для PostgreSQL изначально поддерживает проверку подлинности Microsoft Entra, поэтому он может напрямую принимать маркеры доступа, полученные с помощью управляемых удостоверений для ресурсов Azure. При создании подключения к PostgreSQL вы передаете маркер доступа в поле пароля.
Ниже приведен пример кода .NET для установки подключения к PostgreSQL с помощью маркера доступа. Этот код должен выполняться на виртуальной машине, чтобы использовать управляемое удостоверение, назначаемое системой, для получения маркера доступа из идентификатора Microsoft Entra. Замените значения HOST, USER, DATABASE и CLIENT_ID.
using System;
using System.Net;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.Text.Json;
using System.Text.Json.Serialization;
using Npgsql;
using Azure.Identity;
namespace Driver
{
class Script
{
// Obtain connection string information from the portal for use in the following variables
private static string Host = "HOST";
private static string User = "USER";
private static string Database = "DATABASE";
static async Task Main(string[] args)
{
//
// Get an access token for PostgreSQL.
//
Console.Out.WriteLine("Getting access token from Azure AD...");
// Azure AD resource ID for Azure Database for PostgreSQL is https://ossrdbms-aad.database.windows.net/
string accessToken = null;
try
{
// Call managed identities for Azure resources endpoint.
var sqlServerTokenProvider = new DefaultAzureCredential();
accessToken = (await sqlServerTokenProvider.GetTokenAsync(
new Azure.Core.TokenRequestContext(scopes: new string[] { "https://ossrdbms-aad.database.windows.net/.default" }) { })).Token;
}
catch (Exception e)
{
Console.Out.WriteLine("{0} \n\n{1}", e.Message, e.InnerException != null ? e.InnerException.Message : "Acquire token failed");
System.Environment.Exit(1);
}
//
// Open a connection to the PostgreSQL server using the access token.
//
string connString =
String.Format(
"Server={0}; User Id={1}; Database={2}; Port={3}; Password={4}; SSLMode=Prefer",
Host,
User,
Database,
5432,
accessToken);
using (var conn = new NpgsqlConnection(connString))
{
Console.Out.WriteLine("Opening connection using access token...");
conn.Open();
using (var command = new NpgsqlCommand("SELECT version()", conn))
{
var reader = command.ExecuteReader();
while (reader.Read())
{
Console.WriteLine("\nConnected!\n\nPostgres version: {0}", reader.GetString(0));
}
}
}
}
}
}
При выполнении эта команда выдает следующий результат:
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
Следующие шаги
- Ознакомьтесь с общими понятиями проверки подлинности Microsoft Entra с помощью База данных Azure для PostgreSQL