Ligar com a identidade gerida no Base de Dados do Azure para PostgreSQL flexible server

Pode usar identidades geridas atribuídas pelo sistema e atribuídas pelo utilizador para autenticar num servidor flexível do Base de Dados do Azure para PostgreSQL. Este artigo mostra-lhe como usar uma identidade gerida atribuída pelo sistema para uma Máquina Virtual Azure (VM) para aceder a um servidor flexível Base de Dados do Azure para PostgreSQL. O Azure gere automaticamente identidades geridas e permite-lhe autenticar-se em serviços que suportam autenticação Microsoft Entra sem necessidade de inserir credenciais no seu código.

Você aprende a:

  • Dê à sua VM acesso a um Base de Dados do Azure para PostgreSQL - Flexible Server.
  • Crie um usuário no banco de dados que represente a identidade atribuída ao sistema da VM.
  • Obtenha um token de acesso ao utilizar a identidade da VM e use-o para consultar um servidor flexível do Base de Dados do Azure para PostgreSQL.
  • Implemente a recuperação de token em um aplicativo de exemplo em C#.

Pré-requisitos

  • Se não estiver familiarizado com a funcionalidade das identidades geridas para os recursos do Azure, veja esta descrição geral. Se não tiver uma conta do Azure, inscreva-se numa conta gratuita antes de continuar.
  • Para fazer a criação de recursos e o gerenciamento de funções necessários, sua conta precisa de permissões de "Proprietário" no escopo apropriado (sua assinatura ou grupo de recursos). Se precisar de ajuda com uma atribuição de função, consulte Atribuir funções do Azure para gerenciar o acesso aos recursos de assinatura do Azure.
  • Precisas de uma VM Azure (por exemplo, a correr Ubuntu Linux) que queiras usar para aceder à tua base de dados usando Identidade Gerida.
  • Precisa de um servidor flexível Base de Dados do Azure para PostgreSQL que tenha autenticação Microsoft Entra configurada.
  • Para seguir o exemplo de C#, primeiro, complete o guia sobre como Ligar com C#.

Criar uma identidade gerenciada atribuída ao sistema para sua VM

Utilize az vm identity assign com o comando identity assign para adicionar a identidade atribuída pelo sistema a uma VM existente:

az vm identity assign -g myResourceGroup -n myVm

Recupere o ID do aplicativo para a identidade gerenciada atribuída ao sistema, que você precisa nas próximas etapas:

# Get the client ID (application ID) of the system-assigned managed identity

az ad sp list --display-name vm-name --query [*].appId --out tsv

Crie um utilizador do Base de Dados do Azure para PostgreSQL para a sua identidade gerida

Agora, ligue-se, como utilizador administrador Microsoft Entra, à sua base de dados de servidor flexível Base de Dados do Azure para PostgreSQL e execute as seguintes instruções SQL. Substitua <identity_name> pelo nome dos recursos para os quais criou uma identidade gerida atribuída ao sistema.

Observação pgaadauth_create_principal deve ser executado no banco de dados Postgres.

select * from pgaadauth_create_principal('<identity_name>', false, false);

O sucesso se parece com:

    pgaadauth_create_principal
-----------------------------------
 Created role for "<identity_name>"
(1 row)

Para obter mais informações sobre como gerenciar funções de banco de dados habilitadas para Microsoft Entra ID, consulte Gerenciar funções do Microsoft Entra no Banco de Dados do Azure para PostgreSQL.

A identidade gerida tem agora acesso ao autenticar-se com o nome da identidade como nome de função e o token do Microsoft Entra como palavra-passe.

Observação

Se a identidade gerida não for válida, é devolvido um erro: ERROR: Could not validate AAD user <ObjectId> because its name is not found in the tenant. [...].

Se vir um erro como "Nenhuma função corresponde...", certifique-se de que se está a ligar à postgres base de dados, e não a uma base de dados diferente que também criou.

Recuperar o token de acesso do serviço de Metadados de Instância do Azure

Seu aplicativo agora pode recuperar um token de acesso do serviço de Metadados de Instância do Azure e usá-lo para autenticação com o banco de dados.

Esta recuperação do token é efetuada através de um pedido HTTP a http://169.254.169.254/metadata/identity/oauth2/token e da passagem dos seguintes parâmetros:

  • api-version = 2018-02-01
  • resource = https://ossrdbms-aad.database.windows.net
  • client_id = CLIENT_ID (que você recuperou anteriormente)

Você recebe de volta um resultado JSON contendo um access_token campo - esse valor de texto longo é o token de acesso de Identidade Gerenciada que você deve usar como senha ao se conectar ao banco de dados.

Para fins de teste, você pode executar os seguintes comandos em seu shell.

Observação

Observe que você precisa de curl, jqe o psql cliente instalado.

# 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

Agora você está conectado ao banco de dados configurado anteriormente.

Conectar-se usando a Identidade Gerenciada

Esta secção mostra como obter um token de acesso usando a identidade gerida atribuída pelo utilizador da VM e usá-lo para chamar um servidor flexível Base de Dados do Azure para PostgreSQL. O Banco de Dados do Azure para PostgreSQL dá suporte nativo à autenticação do Microsoft Entra, para que ele possa aceitar diretamente tokens de acesso obtidos usando identidades gerenciadas para recursos do Azure. Ao criar uma conexão com um Banco de Dados do Azure para PostgreSQL, você passa o token de acesso no campo de senha.

Conectar-se usando Identidade Gerenciada em Python

Para obter um exemplo de código Python, consulte Guia de início rápido: usar Python para conectar e consultar dados no Banco de Dados do Azure para PostgreSQL

Ligue-se usando Identidade Gerida em Java

Para um exemplo de código Java, veja Quickstart: Use Java and JDBC with Base de Dados do Azure para PostgreSQL.

Ligue usando Identidade Gerida em C#

Aqui está um exemplo de código .NET que abre uma ligação a um servidor flexível do Base de Dados do Azure para PostgreSQL usando um token de acesso. Este código deve ser executado na VM para usar a identidade gerida atribuída pelo sistema e obter um token de acesso do Microsoft Entra ID. Substitua os valores de HOST, (por USER), e <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}");
        }
    }
}

Preencha os seguintes espaços reservados:

  • HOST: Substitua your-server-name.postgres.database.azure.com pelo nome de host do seu servidor.
  • USER: Substitui <identity_name> pelo nome da tua identidade gerida.
  • DATABASE: Substitua your-database-name pelo nome do seu servidor flexível Base de Dados do Azure para PostgreSQL.
  • Autenticação do Microsoft Entra: O código usa a identidade gerenciada atribuída pelo sistema da VM para buscar um token de acesso da ID do Microsoft Entra.

Quando executas este comando, obténs um resultado assim:

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