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

Se aplica a: Azure Database for PostgreSQL: servidor único

Importante

El servicio de servidor único de Azure Database for PostgreSQL está en proceso de retirada. Es muy recomendable actualizar al servidor flexible de Azure Database for PostgreSQL: servidor flexible. Para más información sobre la migración al servidor flexible de Azure Database for PostgreSQL, consulte ¿Qué sucederá con el servicio de servidor único de Azure Database for PostgreSQL?

Este artículo le guiará a través de los pasos para configurar el acceso a Microsoft Entra ID con Azure Database for PostgreSQL, y cómo conectarse con un token de Azure AD.

Establecimiento del usuario administrador de Microsoft Entra

Los usuarios administradores de Microsoft Entra son los únicos que pueden crear/habilitar usuarios para la autenticación basada en Microsoft Entra ID. Se recomienda no usar el administrador de Microsoft Entra para las operaciones normales de base de datos, ya que tiene permisos de usuario elevados (por ejemplo, CREATEDB).

Para configurar el administrador de Microsoft Entra (puede usar un usuario o un grupo), siga estos pasos

  1. En Azure Portal, seleccione la instancia de Azure Database for PostgreSQL que quiere habilitar para Microsoft Entra ID.
  2. En Configuración, seleccione Administrador de Active Directory:

establecer el administrador de Microsoft Entra

  1. Seleccione un usuario válido de Microsoft Entra en el inquilino del cliente para que sea administrador de Microsoft Entra.

Importante

Al establecer el administrador, se agrega un nuevo usuario al servidor de Azure Database for PostgreSQL con permisos de administrador totales. El usuario administrador de Microsoft Entra en Azure Database for PostgreSQL tendrá el rol azure_ad_admin. Solo se puede crear un administrador de Microsoft Entra por servidor PostgreSQL y la selección de otro sobrescribirá al administrador de Microsoft Entra existente configurado para el servidor. Puede especificar un grupo de Microsoft Entra en lugar de un usuario individual para que tenga varios administradores.

Solo se puede crear un administrador de Microsoft Entra por servidor PostgreSQL y la selección de otro sobrescribirá al administrador de Microsoft Entra existente configurado para el servidor. Puede especificar un grupo de Microsoft Entra en lugar de un usuario individual para que tenga varios administradores. Tenga en cuenta que, después iniciará sesión con el nombre de grupo para fines de administración.

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

En el siguiente diagrama de alto nivel se resume el flujo de trabajo del uso de la autenticación de Microsoft Entra con Azure Database for PostgreSQL:

flujo de autenticación

Hemos diseñado la integración de Microsoft Entra para trabajar con herramientas comunes 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. Pasamos el token de Microsoft Entra como la contraseña tal como se muestra en la imagen anterior.

Actualmente hemos probado a los siguientes clientes:

  • Línea de comandos de psql (use la variable PGPASSWORD para pasar el token; vea el paso 3 para obtener más información)
  • Azure Data Studio (con la extensión PostgreSQL)
  • Otros clientes se basan en libpq (por ejemplo, marcos de trabajo de la aplicación comunes y ORM)
  • PgAdmin (desactive la opción de conectarse ahora al crear el servidor. Consulte el paso 4 para obtener más información)

Los pasos que se describen a continuación son los que debe seguir un usuario o una aplicación para autenticarse con Microsoft Entra ID:

Requisitos previos

Puede seguir en Azure Cloud Shell, en una máquina virtual de Azure o en su equipo local. Asegúrese de que tiene instalado el CLI de Azure.

Autenticación con el Microsoft Entra ID como un único usuario

Paso 1: Inicio de sesión en la suscripción de Azure del usuario

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 iniciará 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.

Paso 2: recuperación del token de acceso de Microsoft Entra

Invoque la herramienta de la CLI de Azure a fin de adquirir un token de acceso para el usuario autenticado en Microsoft Entra del paso 1 y acceder a Azure Database for PostgreSQL.

Ejemplo (para la nube pública):

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

El valor del recurso anterior debe especificarse exactamente como se muestra. En el caso de otras nubes, el valor del recurso se puede buscar usando:

az cloud show

En la versión 2.0.71 de CLI de Azure y posteriores, el comando se puede especificar en la siguiente versión más conveniente para todas las nubes:

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

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

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

El token es una cadena de Base 64 que codifica toda la información sobre el usuario autenticado, y que está dirigida al servicio de Azure Database for PostgreSQL.

Paso 3: Uso del token como contraseña para iniciar sesión con el cliente psql

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

Cuando se usa el cliente de línea de comandos psql, el token de acceso debe pasarse a través de la variable de entorno PGPASSWORD, ya que el token de acceso supera la longitud de la contraseña que psql puede aceptar directamente:

Ejemplo de Windows:

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

Ejemplo de Linux/macOS:

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

Ahora puede iniciar una conexión con Azure Database for PostgreSQL como lo haría normalmente:

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

Paso 4: Uso del token como contraseña para iniciar sesión con PgAdmin

Para conectarse mediante el token de Microsoft Entra con pgAdmin, debe seguir estos pasos:

  1. Desactive la opción Conectarse ahora en la creación del servidor.
  2. Escriba los detalles del servidor en la pestaña Conexión y seleccione Guardar.
  3. En el menú del explorador, seleccione Conectarse al servidor Azure Database for PostgreSQL.
  4. Escriba la contraseña del token de AD cuando se le pida.

Consideraciones importantes al conectarse:

  • user@tenant.onmicrosoft.com es el nombre del usuario de Microsoft Entra
  • Asegúrese de usar el usuario de Azure de la misma forma exacta en que se escribe, ya que los nombres de usuarios y grupos de Microsoft Entra distinguen mayúsculas de minúsculas.
  • Si el nombre contiene espacios, use \ antes de cada espacio para aplicarle escape.
  • La validez del token de acceso es de entre 5 y 60 minutos. Se recomienda obtener el token de acceso justo antes del 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

Paso 1: creación de grupos de Microsoft Entra en Azure Database for PostgreSQL

Para habilitar el acceso de un grupo de Microsoft Entra a la base de datos, use el mismo mecanismo que para los usuarios, pero en su lugar especifique el nombre del grupo:

Ejemplo:

CREATE USER <new_user> IN ROLE azure_ad_user;

Al iniciar sesión, los miembros del grupo usarán sus token de acceso personal, pero firmarán con el nombre del grupo especificado como nombre de usuario.

Paso 2: Inicio de sesión en la suscripción de Azure del usuario

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

az login

Paso 3: recuperación del token de acceso de Microsoft Entra

Invoque la herramienta de la CLI de Azure a fin de adquirir un token de acceso para el usuario autenticado en Microsoft Entra del paso 2 y acceder a Azure Database for PostgreSQL.

Ejemplo (para la nube pública):

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

El valor del recurso anterior debe especificarse exactamente como se muestra. En el caso de otras nubes, el valor del recurso se puede buscar usando:

az cloud show

En la versión 2.0.71 de CLI de Azure y posteriores, el comando se puede especificar en la siguiente versión más conveniente para todas las nubes:

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

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

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

Paso 4: Uso del token como contraseña para iniciar sesión con psql o PgAdmin (vea los pasos anteriores para la conexión de usuario)

Consideraciones importantes al conectarse como miembro de un grupo:

  • groupname@mydb es el nombre del grupo de Microsoft Entra al que se intenta conectar
  • Anexe siempre el nombre del servidor después del nombre del grupo o usuario de Microsoft Entra (por ejemplo, @mydb)).
  • Asegúrese de usar la forma exacta en que se escribe el nombre del grupo de Microsoft Entra.
  • Los nombres de usuario y grupo de Microsoft Entra distinguen mayúsculas de minúsculas
  • Al conectarse como grupo, use solo el nombre del grupo (por ejemplo, GroupName@mydb) y no el alias de un miembro del grupo.
  • Si el nombre contiene espacios, use \ delante de cada espacio para aplicarle escape.
  • La validez del token de acceso es de entre 5 y 60 minutos. Se recomienda obtener el token de acceso justo antes del inicio de sesión en Azure Database for PostgreSQL.

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

Creación de usuarios Microsoft Entra en Azure Database for PostgreSQL

Para agregar un usuario en Microsoft Entra a la base de datos de Azure Database for PostgreSQL, haga lo siguiente después de la conexión (consulte la sección más adelante sobre cómo conectarse):

  1. En primer lugar, asegúrese de que el usuario de Microsoft Entra <user>@yourtenant.onmicrosoft.com sea un usuario válido en el inquilino de Microsoft Entra.
  2. Inicie sesión en la instancia de Azure Database for PostgreSQL como usuario administrador de Microsoft Entra.
  3. Creación del rol <user>@yourtenant.onmicrosoft.com en Azure Database for PostgreSQL.
  4. Cree <user>@yourtenant.onmicrosoft.com un miembro del rol azure_ad_user. Esto solo se debe proporcionar a los usuarios de Microsoft Entra.

Ejemplo:

CREATE USER "user1@yourtenant.onmicrosoft.com" IN ROLE azure_ad_user;

Nota:

La autenticación de un usuario a través de Microsoft Entra ID no concede al usuario ningún permiso para tener acceso a los objetos en la base de datos de Azure Database for PostgreSQL. Asegúrese de concederle al usuario los permisos necesarios de forma manual.

Validación de token

La autenticación de Microsoft Entra en Azure Database for PostgreSQL asegura que el usuario existe en el servidor de PostgreSQL, y comprueba la validez del token con la validación del contenido del token. Se realizan los siguientes pasos de validación de token:

  • El token está firmado por el identificador de Microsoft Entra ID y no se ha manipulado
  • El token se emitió por Microsoft Entra ID para el suscriptor asociado con el servidor
  • El token sigue vigente
  • El token es para el recurso Azure Database for PostgreSQL (y no para otro recurso Azure)

Migración de usuarios existentes de PostgreSQL hacia la autenticación basada en identificadores de Microsoft Entra

Puede habilitar la autenticación de Azure Microsoft Entra para los usuarios existentes. Estos son dos casos a considerar:

Caso 1: el nombre de usuario de PostgreSQL coincide con el nombre principal de usuario de Microsoft Entra

En el caso improbable de que los usuarios existentes ya coincidan con los nombres de usuario de Microsoft Entra, puede concederles el rol de azure_ad_user para habilitarlos la autenticación de Microsoft Entra:

GRANT azure_ad_user TO "existinguser@yourtenant.onmicrosoft.com";

Ahora podrán iniciar sesión con las credenciales de Microsoft Entra en lugar de usar la contraseña de usuario de PostgreSQL previamente configurada.

Caso 2: el nombre de usuario de PostgreSQL es diferente al nombre principal de usuario de Microsoft Entra

Si un usuario de PostgreSQL no existe en Microsoft Entra ID o tiene un nombre de usuario diferente, puede usar grupos de Microsoft Entra para autenticarse como usuario de PostgreSQL. Puede migrar los usuarios existentes de Azure Database for PostgreSQL hacia Microsoft Entra ID con la creación de un grupo Microsoft Entra que tenga un nombre que coincida con el del usuario de PostgreSQL y, después otorgar el rol azure_ad_user al usuario de PostgreSQL existente:

GRANT azure_ad_user TO <new_user>;

Esto asume que se ha creado un grupo "DBReadUser" en Microsoft Entra ID. Los usuarios que pertenezcan a ese grupo ahora podrán iniciar sesión en la base de datos como este usuario.

Pasos siguientes