Partekatu bidez


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, como 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 saliente de NSG que solo permita el tráfico a la etiqueta de servicio AzureActiveDirectory.
    • 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, agregue 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.

Entre los clientes probados se incluyen:

  • Extensión PostgreSQL para Visual Studio Code: use el TIPO DE AUTENTICACIÓN para establecer el método de autenticación en Entra Auth.
  • Línea de comandos de psql: use la variable PGPASSWORD para pasar el token.
  • 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.

Autenticación 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 la 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

Especifique el valor del recurso como se muestra en el ejemplo anterior. 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 los pasos 2 y 3 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')
    
  • El token de acceso es válido durante 5 a 60 minutos. Obtenga el token de acceso antes de iniciar el inicio de 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 deshabilita la sincronización de grupos, los miembros pueden iniciar sesión con sus tokens de acceso y especificar el nombre del grupo como nombre de usuario.

Si habilita la sincronización de grupos (a través del parámetro de servidor pgaadauth.enable_group_sync establecido en "ON"), los miembros deben iniciar sesión con sus credenciales individuales de ID de Microsoft Entra, 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 puede deshabilitarlos mediante: ALTER ROLE "ROLE_NAME" NOLOGIN;
  • No elimine el rol de grupo para mantener la sincronización.
  • La autosincronización de grupos se realiza cada 30 minutos.
  • Puede desencadenar la sincronización manual mediante: 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.