Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Puede usar identidades administradas asignadas por el sistema y asignadas por el usuario para autenticarse en una instancia de servidor flexible de Azure Database for PostgreSQL. En este artículo se muestra cómo usar una identidad administrada asignada por el sistema para una máquina virtual (VM) de Azure para acceder a una instancia de servidor flexible de Azure Database for PostgreSQL. Azure administra automáticamente las identidades administradas y le permite autenticarse en los servicios que admiten la autenticación de Microsoft Entra sin necesidad de insertar credenciales en el código.
Aprenderá a:
- Conceda a la máquina virtual acceso a una instancia de servidor flexible de Azure Database for PostgreSQL.
- Cree un usuario en la base de datos que represente la identidad asignada por el sistema de la máquina virtual.
- Obtenga un token de acceso mediante la identidad de máquina virtual y úselo para consultar una instancia de servidor flexible de Azure Database for PostgreSQL.
- Implemente la recuperación de tokens en una aplicación de ejemplo de C#.
Prerrequisitos
- Si no está familiarizado con la característica identidades administradas para recursos de Azure, consulte esta introducción. Si no tiene una cuenta de Azure, regístrese para obtener una cuenta gratuita antes de continuar.
- Para realizar la creación de recursos necesaria y la administración de roles, la cuenta necesita permisos de "Propietario" en el ámbito adecuado (su suscripción o grupo de recursos). Si necesita ayuda con una asignación de roles, consulte Asignación de roles de Azure para administrar el acceso a los recursos de suscripción de Azure.
- Necesita una máquina virtual de Azure (por ejemplo, ejecutar Ubuntu Linux) que le gustaría usar para acceder a la base de datos mediante identidad administrada.
- Necesita una instancia de servidor flexible de Azure Database for PostgreSQL que tenga configurada la autenticación de Microsoft Entra .
- Para seguir el ejemplo de C#, en primer lugar, complete la guía sobre cómo conectarse con C#
Creación de una identidad administrada asignada por el sistema para la máquina virtual
Use az vm identity assign con el identity assign comando habilita la identidad asignada por el sistema a una máquina virtual existente:
az vm identity assign -g myResourceGroup -n myVm
Recupere el identificador de aplicación de la identidad administrada asignada por el sistema, que necesita en los pasos siguientes:
# Get the client ID (application ID) of the system-assigned managed identity
az ad sp list --display-name vm-name --query [*].appId --out tsv
Cree un usuario de Azure Database for PostgreSQL para su Identidad Administrada.
Ahora, conéctese como usuario administrador de Microsoft Entra a la base de datos de servidor flexible de Azure Database for PostgreSQL y ejecute las siguientes instrucciones SQL, reemplazando por <identity_name> el nombre de los recursos para los que creó una identidad administrada asignada por el sistema:
Tenga en cuenta pgaadauth_create_principal debe ejecutarse en la base de datos de Postgres.
select * from pgaadauth_create_principal('<identity_name>', false, false);
El éxito tiene el siguiente aspecto:
pgaadauth_create_principal
-----------------------------------
Created role for "<identity_name>"
(1 row)
Para obtener más información sobre cómo administrar roles de base de datos habilitados para el identificador de Entra de Microsoft, consulte Administración de roles de Microsoft Entra en Azure Database for PostgreSQL.
La identidad administrada ahora tiene acceso al autenticarse con el nombre de identidad como un nombre de rol y el token de Microsoft Entra como una contraseña.
Nota:
Si la identidad administrada no es válida, se devuelve un error: ERROR: Could not validate AAD user <ObjectId> because its name is not found in the tenant. [...].
Si ve un error como "No hay coincidencias de función...", asegúrese de que se está conectando a la postgres base de datos, no a una base de datos diferente que también ha creado.
Recuperación del token de acceso del servicio de metadatos de Azure Instance
La aplicación ahora puede recuperar un token de acceso del servicio de metadatos de Azure Instance y usarlo para autenticarse con la base de datos.
Esta recuperación de tokens se realiza realizando una HTTP solicitud a http://169.254.169.254/metadata/identity/oauth2/token y pasando los parámetros siguientes:
api-version=2018-02-01resource=https://ossrdbms-aad.database.windows.net-
client_id=CLIENT_ID(que recuperó anteriormente)
Devuelve un resultado JSON que contiene un access_token campo: este valor de texto largo es el token de acceso de identidad administrada que debe usar como contraseña al conectarse a la base de datos.
Con fines de prueba, puede ejecutar los siguientes comandos en el shell.
Nota:
Tenga en cuenta que necesita curl, jqy el 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
Ahora está conectado a la base de datos que configuró anteriormente.
Conexión mediante identidad administrada
En esta sección se muestra cómo obtener un token de acceso mediante la identidad administrada asignada por el usuario de la máquina virtual y usarlo para llamar a una instancia de servidor flexible de Azure Database for PostgreSQL. Azure Database for PostgreSQL admite de forma nativa la autenticación de Microsoft Entra, por lo que puede aceptar directamente tokens de acceso obtenidos mediante identidades administradas para recursos de Azure. Al crear una conexión a Azure Database for PostgreSQL, se pasa el token de acceso en el campo contraseña.
Conexión mediante identidad administrada en Python
Para obtener un ejemplo de código de Python, consulte el inicio rápido: Uso de Python para conectarse y consultar datos en Azure Database for PostgreSQL.
Conexión mediante identidad administrada en Java
Para obtener un ejemplo de código de Java, consulte inicio rápido: Uso de Java y JDBC con Azure Database for PostgreSQL.
Conexión mediante identidad administrada en C#
Este es un ejemplo de código de .NET para abrir una conexión a una instancia de servidor flexible de Azure Database for PostgreSQL mediante un token de acceso. Este código debe ejecutarse en la máquina virtual para usar la identidad administrada asignada por el sistema para obtener un token de acceso de Microsoft Entra ID. Reemplace los valores de HOST, USER (por <identity_name>) y 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}");
}
}
}
Debe rellenar los siguientes marcadores de posición:
- HOST: reemplace your-server-name.postgres.database.azure.com por el nombre de host de la instancia.
- USUARIO: reemplace <identity_name> por el nombre de la identidad administrada.
-
DATABASE: reemplace your-database-name por el nombre de la instancia de Azure Database for PostgreSQL. - Autenticación de Microsoft Entra: el código usa la identidad administrada asignada por el sistema de la máquina virtual para capturar un token de acceso de Microsoft Entra ID.
Cuando se ejecuta, este comando proporciona una salida similar a la siguiente:
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