Připojení k flexibilnímu serveru Azure Database for PostgreSQL s využitím spravované identity
PLATÍ PRO: Flexibilní server Azure Database for PostgreSQL
Spravované identity přiřazené systémem i uživatelem můžete použít k ověření na flexibilním serveru Azure Database for PostgreSQL. V tomto článku se dozvíte, jak použít spravovanou identitu přiřazenou systémem pro virtuální počítač Azure pro přístup k instanci flexibilního serveru Azure Database for PostgreSQL. Spravované identity se automaticky spravují v Azure a umožňují ověřování ve službách, které podporují ověřování Microsoft Entra, aniž byste museli do kódu vkládat přihlašovací údaje.
Získáte informace pro:
- Udělte virtuálnímu počítači přístup k instanci flexibilního serveru Azure Database for PostgreSQL.
- Vytvořte uživatele v databázi, který představuje identitu přiřazenou systémem virtuálního počítače.
- Získejte přístupový token pomocí identity virtuálního počítače a použijte ho k dotazování instance flexibilního serveru Azure Database for PostgreSQL.
- Implementujte načtení tokenu v ukázkové aplikaci jazyka C#.
Požadavky
- Pokud ještě neznáte funkci spravovaných identit pro prostředky Azure, podívejte se na tento přehled. Pokud nemáte účet Azure, zaregistrujte si bezplatný účet před tím, než budete pokračovat.
- K vytvoření požadovaného prostředku a správě rolí váš účet potřebuje oprávnění Vlastník v příslušném oboru (vaše předplatné nebo skupina prostředků). Pokud potřebujete pomoc s přiřazením role, přečtěte si téma Přiřazení rolí Azure ke správě přístupu k prostředkům předplatného Azure.
- Potřebujete virtuální počítač Azure (například s Ubuntu Linuxem), který chcete použít pro přístup k databázi pomocí spravované identity.
- Potřebujete instanci flexibilního serveru Azure Database for PostgreSQL s nakonfigurovaným ověřováním Microsoft Entra.
- Pokud chcete postupovat podle příkladu jazyka C#, nejprve dokončete průvodce připojením pomocí jazyka C.#
Vytvoření spravované identity přiřazené systémem pro virtuální počítač
Pomocí příkazu az vm identity assign identity assign
povolíte identitu přiřazenou systémem k existujícímu virtuálnímu počítači:
az vm identity assign -g myResourceGroup -n myVm
Načtěte ID aplikace pro spravovanou identitu přiřazenou systémem, kterou budete potřebovat v několika dalších krocích:
# Get the client ID (application ID) of the system-assigned managed identity
az ad sp list --display-name vm-name --query [*].appId --out tsv
Vytvoření uživatele flexibilního serveru Azure Database for PostgreSQL pro spravovanou identitu
Teď se připojte jako uživatel správce Microsoft Entra k flexibilní serverové databázi Azure Database for PostgreSQL a spusťte následující příkazy SQL, přičemž nahraďte <identity_name>
názvem prostředků, pro které jste vytvořili spravovanou identitu přiřazenou systémem:
Upozorňujeme , že pgaadauth_create_principal musí být spuštěna v databázi Postgres.
select * from pgaadauth_create_principal('<identity_name>', false, false);
Úspěch vypadá takto:
pgaadauth_create_principal
-----------------------------------
Created role for "<identity_name>"
(1 row)
Další informace o správě databázových rolí s povoleným ID Microsoft Entra najdete v tématu o správě rolí flexibilního serveru Azure Database for PostgreSQL s podporou Microsoft Entra ID.
Spravovaná identita teď má přístup při ověřování s názvem identity jako názvem role a tokenem Microsoft Entra jako heslem.
Poznámka:
Pokud spravovaná identita není platná, vrátí se chyba: ERROR: Could not validate AAD user <ObjectId> because its name is not found in the tenant. [...]
.
Poznámka:
Pokud se zobrazí chyba typu Žádná funkce neodpovídá, ujistěte se, že se připojujete k postgres
databázi, ne k jiné databázi, kterou jste vytvořili.
Načtení přístupového tokenu ze služby Azure Instance Metadata
Vaše aplikace teď může načíst přístupový token ze služby Azure Instance Metadata a použít ho k ověřování v databázi.
Toto načtení tokenu se provádí provedením požadavku HTTP na http://169.254.169.254/metadata/identity/oauth2/token
následující parametry a předáním následujících parametrů:
api-version
=2018-02-01
resource
=https://ossrdbms-aad.database.windows.net
client_id
=CLIENT_ID
(které jste získali dříve)
Vrátíte výsledek JSON obsahující access_token
pole – tato dlouhá textová hodnota je přístupový token spravované identity, který byste měli použít jako heslo při připojování k databázi.
Pro účely testování můžete v prostředí spustit následující příkazy.
Poznámka:
Všimněte si, že potřebujete curl
, jq
a psql
klient nainstalovaný.
# 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
Teď jste připojení k databázi, kterou jste nakonfigurovali dříve.
Připojení pomocí spravované identity
Tato část ukazuje, jak získat přístupový token pomocí spravované identity přiřazené uživatelem virtuálního počítače a jak ho použít k volání flexibilního serveru Azure Database for PostgreSQL. Flexibilní server Azure Database for PostgreSQL nativně podporuje ověřování Microsoft Entra, takže může přímo přijímat přístupové tokeny získané pomocí spravovaných identit pro prostředky Azure. Při vytváření připojení k flexibilnímu serveru Azure Database for PostgreSQL předáte přístupový token do pole hesla.
Připojení pomocí spravované identity v Pythonu
Příklad kódu Pythonu najdete v rychlém startu: Použití Pythonu k připojení a dotazování dat na flexibilním serveru Azure Database for PostgreSQL
Připojení pomocí spravované identity v Javě
Příklad kódu Java najdete v rychlém startu : Použití Javy a JDBC s flexibilním serverem Azure Database for PostgreSQL
Připojení pomocí spravované identity v jazyce C#
Tady je příklad kódu .NET pro otevření připojení k flexibilnímu serveru Azure Database for PostgreSQL pomocí přístupového tokenu. Tento kód musí běžet na virtuálním počítači, aby pomocí spravované identity přiřazené systémem získal přístupový token z ID Microsoft Entra. Nahraďte hodnoty HOST, USER (with <identity_name>
) a DATABASE.
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 Flexible Server 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));
}
}
}
}
}
}
Při spuštění tento příkaz zobrazí výstup podobný tomuto:
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
Další kroky
- Projděte si celkové koncepty ověřování Microsoft Entra s flexibilním serverem Azure Database for PostgreSQL.