Compartir a través de


Uso de Microsoft Entra ID para la autenticación con Azure Database for PostgreSQL

En este artículo, configurará el acceso de Microsoft Entra ID para la autenticación con Azure Database for PostgreSQL. También aprenderá a usar un token de Microsoft Entra con una instancia de servidor flexible de Azure Database for PostgreSQL.

Puede configurar la autenticación de Microsoft Entra para una instancia de servidor flexible de Azure Database for PostgreSQL durante el aprovisionamiento del servidor o posterior. Los usuarios administradores de Microsoft Entra son los únicos que pueden crear o habilitar usuarios para la autenticación basada en Microsoft Entra ID. No use el administrador de Microsoft Entra para las operaciones de base de datos normales porque ese rol tiene permisos de usuario elevados (por ejemplo, CREATEDB).

Puede tener varios usuarios administradores de Microsoft Entra con Azure Database for PostgreSQL. Los usuarios administradores de Microsoft Entra pueden ser un usuario, un grupo o una entidad de servicio.

Prerrequisitos

Configuración de los requisitos de red

Microsoft Entra ID es una multiinquilino. Necesita conectividad saliente para operaciones como agregar grupos de administración de Microsoft Entra.

Los requisitos de red varían según la topología:

  • Acceso público (direcciones IP permitidas): no se requieren reglas de salida adicionales.
  • Acceso privado (integración de red virtual):
    • Agregue una regla de NSG de salida que permita el tráfico solo a la etiqueta de servicioAzureActiveDirectory.
    • Si usa una tabla de rutas, agregue una ruta con el destino AzureActiveDirectory y el próximo salto Internet.
    • Si usa un proxy, permita solo el tráfico HTTPS a la etiqueta de servicio AzureActiveDirectory.
  • DNS personalizado:
    • Asegúrese de que estos nombres de host se resuelven públicamente: login.microsoftonline.com (autenticación) y graph.microsoft.com (Microsoft Graph API).
    • Si se produce un error en la resolución, se produce un error en las operaciones de asignación de administración y adquisición de tokens.

Para establecer el administrador de Microsoft Entra durante el aprovisionamiento del servidor, siga estos pasos:

  1. En Azure Portal, durante el aprovisionamiento del servidor, seleccione autenticación de PostgreSQL y Microsoft Entra o autenticación de Microsoft Entra solo como método de autenticación.
  2. En la pestaña Establecer administrador, seleccione un usuario, grupo, entidad de servicio o identidad administrada válidos de Microsoft Entra en el inquilino del cliente que quiera que actúen como administrador de Microsoft Entra.

Opcionalmente, puede agregar una cuenta de administrador de PostgreSQL local, en caso de que prefiera usar el método de autenticación de PostgreSQL y Microsoft Entra.

Nota:

Solo puede agregar un administrador de Microsoft Entra durante el aprovisionamiento del servidor. Puede agregar varios usuarios administradores de Microsoft Entra después de crear el servidor.

Para establecer el administrador de Microsoft Entra después de la creación del servidor, siga estos pasos:

  1. En Azure Portal, seleccione la instancia del servidor flexible de Azure Database for PostgreSQL que quiere habilitar para Microsoft Entra ID.
  2. En Seguridad, seleccione Autenticación. A continuación, elija Autenticación de PostgreSQL y Microsoft Entra o Autenticación de Microsoft Entra solo como método de autenticación, en función de sus necesidades.
  3. Seleccione Agregar administradores de Microsoft Entra. A continuación, seleccione un usuario, grupo, entidad de servicio o identidad administrada válidos de Microsoft Entra en el inquilino del cliente que quiera que actúen como un administrador de Microsoft Entra.
  4. Haga clic en Guardar.

Importante

Al establecer el administrador, se agrega un nuevo usuario a la instancia de servidor flexible de Azure Database for PostgreSQL con permisos de administrador completos.

Conexión a Azure Database for PostgreSQL con Microsoft Entra ID

La integración de Microsoft Entra funciona con herramientas estándar de PostgreSQL, como psql, que no son compatibles con Microsoft Entra y solo admiten la especificación de nombre de usuario y contraseña al conectarse a PostgreSQL.

Probamos los siguientes clientes:

  • Línea de comandos de psql: use la variable PGPASSWORD para pasar el token.
  • Azure Data Studio: use la extensión de PostgreSQL.
  • Otros clientes basados en libpq: entre los ejemplos se incluyen marcos de aplicaciones comunes y asignadores relacionales de objetos (ORM).
  • PgAdmin: desactive Conectarse ahora al crear el servidor.

Autentíquese con Microsoft Entra ID

Use los procedimientos siguientes para autenticarse con microsoft Entra ID como usuario de instancia de servidor flexible de Azure Database for PostgreSQL.

Puede seguir estos pasos mediante:

  • Azure Cloud Shell
  • Máquina virtual de Azure
  • La máquina local

Inicio de sesión en Azure

Para empezar, autentíquese en Microsoft Entra ID con la CLI de Azure. Este paso no es necesario en Azure Cloud Shell.

az login

El comando abre una ventana del explorador en la página de autenticación de Microsoft Entra. Requiere que proporcione el identificador de usuario y contraseña de Microsoft Entra.

Recuperación de un token de acceso de Microsoft Entra

Use la CLI de Azure para obtener un token de acceso para que el usuario autenticado de Microsoft Entra acceda a Azure Database for PostgreSQL. Este es un ejemplo de la nube pública:

az account get-access-token --resource https://ossrdbms-aad.database.windows.net

El valor del recurso anterior debe especificarse como se muestra. Para otras nubes, puede buscar el valor del recurso con el comando siguiente:

az cloud show

En la versión 2.0.71 y posteriores de la CLI de Azure, puede especificar el comando en la práctica versión para todas las nubes que se muestra a continuación:

az account get-access-token --resource-type oss-rdbms

Una vez que la autenticación se realiza correctamente, Microsoft Entra ID devuelve un token de acceso:

{
  "accessToken": "TOKEN",
  "expiresOn": "...",
  "subscription": "...",
  "tenant": "...",
  "tokenType": "Bearer"
}

El token es una cadena de Base64. Codifica toda la información sobre el usuario autenticado y está dirigida al servicio Azure Database for PostgreSQL.

Uso de un token como contraseña para iniciar sesión con el cliente psql

Al conectarse, use el token de acceso como contraseña de usuario de PostgreSQL.

Al usar el cliente de línea de comandos de psql, debe pasar el token de acceso a través de la PGPASSWORD variable de entorno. El token de acceso es mayor que la longitud de contraseña que psql puede aceptar directamente.

Este es un ejemplo de Windows:

set PGPASSWORD=<copy/pasted TOKEN value from step 2>
$env:PGPASSWORD='<copy/pasted TOKEN value from step 2>'

Este es un ejemplo de Linux o macOS:

export PGPASSWORD=<copy/pasted TOKEN value from step 2>

También puede combinar el paso 2 y el paso 3 juntos mediante la sustitución de comandos. Puede colocar la recuperación del token en una variable y pasarla directamente como valor de la PGPASSWORD variable de entorno:

export PGPASSWORD=$(az account get-access-token --resource-type oss-rdbms --query "[accessToken]" -o tsv)

Ahora conéctese a Azure Database for PostgreSQL:

psql "host=mydb.postgres... user=user@tenant.onmicrosoft.com dbname=postgres sslmode=require"

Uso de un token como contraseña para iniciar sesión con PgAdmin

Para conectarse mediante un token de Microsoft Entra con PgAdmin, siga estos pasos:

  1. Abra PgAdmin y seleccione Registrar>servidor.
  2. En la pestaña General , escriba un nombre de conexión y desactive Conectar ahora.
  3. En la pestaña Conexión , escriba los detalles del host. Establezca Nombre de usuario en el UPN de Microsoft Entra (por ejemplo, user@tenant.onmicrosoft.com). Haga clic en Save (Guardar).
  4. En el árbol, seleccione el servidor y elija Conectar servidor.
  5. Cuando se le solicite, pegue el token de acceso como contraseña.

Estas son algunas consideraciones esenciales al conectarse:

  • user@tenant.onmicrosoft.com es el valor userPrincipalName del usuario de Microsoft Entra.

  • Asegúrese de usar la forma exacta en que se escribe el usuario de Azure. Los nombres de usuario y grupo de Microsoft Entra distinguen mayúsculas de minúsculas.

  • Si el nombre contiene espacios, use una barra diagonal inversa (\) delante de cada espacio para aplicarle escape. Puede usar la CLI de Azure para obtener el usuario que ha iniciado sesión y establecer el valor de la variable de entorno PGUSER:

    export PGUSER=$(az ad signed-in-user show --query "[userPrincipalName]" -o tsv | sed 's/ /\\ /g')
    
  • La validez del token de acceso es de entre 5 y 60 minutos. Debe obtener el token de acceso antes de iniciar sesión en Azure Database for PostgreSQL.

Ahora está autenticado en el servidor de Azure Database for PostgreSQL mediante la autenticación de Microsoft Entra.

Autenticación con el Microsoft Entra ID como miembro del grupo

En esta sección se muestra cómo conectarse mediante un grupo de Microsoft Entra. Debe ser miembro del grupo y el grupo debe crearse (mapeado) en la base de datos.

Crear un principal de grupo

Cree la entidad de seguridad de grupo (rol) en la base de datos (sustituya el nombre que se muestra según sea necesario):

select * from  pgaadauth_create_principal('Prod DB Readonly', false, false).

Si la sincronización de grupos está deshabilitada, los miembros pueden iniciar sesión con sus tokens de acceso y especificar el nombre del grupo como nombre de usuario.

Si la sincronización de grupos está habilitada (a través de pgaadauth.enable_group_sync parámetro de servidor establecido en "ON"), los miembros deben iniciar sesión con sus credenciales individuales de Entra ID, pero todavía pueden iniciar sesión con el nombre de grupo como nombre de usuario.

  • Los inicios de sesión de grupo siguen estando disponibles por motivos de compatibilidad, pero se pueden deshabilitar con: ALTER ROLE "ROLE_NAME" NOLOGIN;

  • El rol de grupo no debe eliminarse para mantener la sincronización.

  • La autosincronización de grupos se realiza cada 30 minutos.

  • La sincronización manual se puede desencadenar con: SELECT * FROM pgaadauth_sync_roles_for_group_members(); (pgaadauth.enable_group_sync el parámetro debe ser "ON").

  • Los cambios en los metadatos de grupo, como el nombre del grupo, no se sincronizan

  • Los cambios de pertenencia a grupos se sincronizan

    Nota:

    Las identidades administradas y los principales del servicio se admiten como miembros del grupo.

Inicio de sesión en Azure

Autentíquese con Microsoft Entra ID mediante la CLI de Azure. Este paso no es necesario en Azure Cloud Shell. El usuario debe ser miembro del grupo de Microsoft Entra.

az login

Recuperación de un token de acceso de Microsoft Entra

Use la CLI de Azure para obtener un token de acceso para que el usuario autenticado de Microsoft Entra acceda a Azure Database for PostgreSQL. Este es un ejemplo de la nube pública:

az account get-access-token --resource https://ossrdbms-aad.database.windows.net

Debe especificar el valor del recurso inicial exactamente como se muestra. Para otras nubes, puede buscar el valor del recurso con el comando siguiente:

az cloud show

En la versión 2.0.71 y posteriores de la CLI de Azure, puede especificar el comando en la práctica versión para todas las nubes que se muestra a continuación:

az account get-access-token --resource-type oss-rdbms

Una vez que la autenticación se realiza correctamente, Microsoft Entra ID devuelve un token de acceso:

{
  "accessToken": "TOKEN",
  "expiresOn": "...",
  "subscription": "...",
  "tenant": "...",
  "tokenType": "Bearer"
}

Uso de un token como contraseña para iniciar sesión con psql o PgAdmin

Estas consideraciones son indispensables al conectarse como miembro de un grupo:

  • El nombre del grupo debe coincidir exactamente con el nombre para mostrar del grupo de Microsoft Entra (distingue entre mayúsculas y minúsculas).
  • Use solo el nombre del grupo, no un alias de miembro.
  • Espacios de escape donde sea necesario (por ejemplo, Prod\ DB\ Readonly).
  • La validez del token es de 5 a 60 minutos. Consíguelo justo antes de conectarte; no almacenes tokens en scripts.

Sugerencia

Si se produce un error en la autenticación, compruebe que el rol de base de datos existe (por ejemplo, con \du) y confirme la pgaadauth.enable_group_sync configuración.

Ahora está autenticado en el servidor de PostgreSQL mediante la autenticación de Microsoft Entra.