En esta página se describe cómo configurar y gestionar la autenticación y autorización basadas en grupos de Active Directory en AlloyDB Omni. La asistencia basada en grupos de Active Directory automatiza la gestión de las pertenencias a roles de PostgreSQL en función de las pertenencias a grupos de un usuario en tu Active Directory, lo que agiliza la gestión de usuarios y asegura que los permisos estén sincronizados.
Para obtener más información, consulta la descripción general de Active Directory.
Flujo de trabajo de integración de Active Directory
La integración de Active Directory se implementa mediante una extensión de PostgreSQL (google_pg_auth
), tal como se muestra en el siguiente flujo de trabajo:
- Inicio de sesión de usuario: un usuario se autentica en AlloyDB Omni con sus credenciales estándar de Active Directory mediante GSSAPI.
- Creación automática de roles: si no existe un rol de PostgreSQL correspondiente al usuario, el sistema lo crea automáticamente. Por ejemplo,
CREATE ROLE "user@REALM" WITH LOGIN;
. - Comprobación de grupos LDAP: el sistema se conecta de forma segura a tu Active Directory mediante LDAP para obtener la información sobre los grupos a los que pertenece el usuario.
- Sincronización de la pertenencia: el sistema compara los grupos de Active Directory del usuario con las asignaciones que has configurado.
- Si el usuario pertenece a un grupo de Active Directory asignado, pero no al grupo de PostgreSQL correspondiente, se le concederá la pertenencia.
- Si el usuario no está en un grupo de Active Directory asignado, pero sí en el grupo de PostgreSQL correspondiente, se revoca su pertenencia.
- Inicio de sesión completado: se finaliza la conexión del usuario y se inicia sesión en la base de datos. Los permisos del usuario se determinan en función de los roles de PostgreSQL a los que pertenece, que están sincronizados con el estado de su grupo de Active Directory.
Esta sincronización se produce automáticamente cada vez que un usuario inicia sesión, lo que garantiza que los derechos de acceso de PostgreSQL reflejen el estado actual de tu Active Directory.
Antes de empezar
Antes de integrar la compatibilidad con grupos de Active Directory en AlloyDB Omni, asegúrate de que cumples los siguientes requisitos.
- Autenticación GSSAPI: la autenticación basada en GSSAPI debe configurarse y estar operativa en tu instancia de AlloyDB Omni. Para obtener más información, consulta Integrar Active Directory con AlloyDB Omni.
Roles de grupo de PostgreSQL: debes crear manualmente los roles de grupo de PostgreSQL que quieras asignar a grupos de Active Directory, tal como se muestra en el siguiente ejemplo:
CREATE ROLE 'postgres_developers'; CREATE ROLE 'postgres_read_only';
Permisos: debes asignar manualmente los permisos de la base de datos (por ejemplo,
SELECT
yINSERT
) a estos roles de grupo de PostgreSQL. La integración solo gestiona la pertenencia, pero no los privilegios de los grupos, como se muestra en el siguiente ejemplo:GRANT SELECT ON ALL TABLES IN SCHEMA sales TO postgres_read_only; GRANT USAGE ON SCHEMA finance TO postgres_developers; GRANT USAGE ON SCHEMA sales TO postgres_read_only; GRANT SELECT, INSERT ON finance.transactions TO postgres_developers;
Configurar la compatibilidad con grupos de Active Directory
Para configurar la compatibilidad con grupos de Active Directory en AlloyDB Omni, debes habilitar la extensión google_pg_auth
, proporcionar los detalles de Active Directory en el archivo postgresql.conf
y gestionar las credenciales de forma segura.
Proporciona la contraseña de LDAP.
Debes proporcionar la contraseña de la cuenta de servicio
ldap_bind_dn
al contenedor de AlloyDB Omni mediante la variable de entornoAD_LDAP_PASSWORD
, como se muestra en el siguiente ejemplo:docker run -d --name CONTAINER_NAME \ -e POSTGRES_PASSWORD=NEW_PASSWORD \ -e AD_LDAP_PASSWORD=AD_LDAP_PASSWORD \ -vDATA_DIR:/var/lib/postgresql/data \ -p HOST_PORT:5432 \ --restart=always \ google/alloydbomni:IMAGE_TAG
Habilita la extensión
google_pg_auth
.En el archivo
postgresql.conf
, añade o modifica los siguientes parámetros para habilitar la extensión y configurar la conexión LDAP. El archivopostgresql.conf
se encuentra en el directorio de datos que montaste al iniciar la imagen de AlloyDB Omni.# --------------------------------------------------------------------------- # ALLOYDB ACTIVE DIRECTORY INTEGRATION SETTINGS # --------------------------------------------------------------------------- google_pg_auth.enable_auth = on google_pg_auth.ldap_uri = "AD_LDAP_SERVER_HOST" google_pg_auth.ldap_base_dn = AD_LDAP_BASE_DN google_pg_auth.ldap_bind_dn = AD_LDAP_BIND_DN google_pg_auth.auth_cache_ttl_sec = 3600
Haz las siguientes sustituciones:
AD_LDAP_SERVER_HOST
: el URI de tu servidor LDAP de Active Directory. Por ejemplo,ldap://ad-controller.example.com
.AD_LDAP_BASE_DN
: el nombre completo base para realizar búsquedas LDAP. Por ejemplo,DC=example,DC=com
.AD_LDAP_BIND_DN
: el nombre completo (DN) de la cuenta de usuario de Active Directory que usa AlloyDB Omni para conectarse y realizar búsquedas LDAP. Por ejemplo,setupadmin@ad-example.com
.auth_cache_ttl_sec
es el tiempo transcurrido hasta que AlloyDB Omni almacena en caché los datos por usuario antes de que AlloyDB Omni intente ponerse en contacto con el servidor LDAP de nuevo. El valor deauth_cache_ttl_sec
puede oscilar entre un mínimo de 60 segundos y un máximo de 86.400 segundos (24 horas).
Añade
google_pg_auth
al parámetroshared_preload_libraries
enpostgresql.conf
.Añade la siguiente línea a tu archivo
postgresql.conf
:shared_preload_libraries='google_pg_auth,google_columnar_engine,google_job_scheduler,google_storage'
Reinicia la base de datos.
docker restart CONTAINER_NAME
Configura el certificado LDAPS.
Para asegurar una conexión segura a tu servidor Active Directory a través de LDAPS, necesitas un certificado de AC.
Coloca el archivo de certificado LDAPS en la siguiente ubicación predefinida de la imagen de AlloyDB Omni:
/etc/ldap/ldap.crt
.
Gestionar asignaciones de grupos
Puedes crear y gestionar asignaciones entre grupos de Active Directory y roles de PostgreSQL mediante funciones SQL.
Inicia sesión en el clúster y carga la extensión
docker exec -it CONTAINER_NAME psql -h localhost -U postgres postgres=# CREATE EXTENSION google_pg_auth; CREATE EXTENSION
Crear una asignación de grupo
Para asignar un grupo de Active Directory a un rol de grupo de PostgreSQL que ya hayas creado, usa la función map_ad_group()
:
SELECT google_pg_auth.map_ad_group(ad_group_name TEXT, ad_group_sid TEXT, pg_role_name TEXT);
Por ejemplo, para asignar el grupo de ad-developers
Active Directory al rol de pg-developers
PostgreSQL, usa el siguiente comando:
SELECT google_pg_auth.map_ad_group('ad-developers', 'S-1-5-21-.....', 'postgres_read_only');
Para obtener el SID de un grupo concreto de Active Directory, usa el siguiente comando en tu servidor de Active Directory:
C:\Users\Admin> Get-ADGroup -Identity ad-developers | select SID SID ----------------------------------------------- S-1-5-21-3168537779-1985441202-1799118680-1612
Quitar una asignación de grupos
Para quitar una asignación, usa la función unmap_ad_group()
. Esta función detiene la sincronización de ese grupo, pero no elimina a los usuarios del grupo de PostgreSQL si ya son miembros.
SELECT google_pg_auth.unmap_ad_group(ad_group_sid TEXT, pg_role_name TEXT);
Consulta el siguiente ejemplo:
SELECT google_pg_auth.unmap_ad_group('quinn@google.com', 'postgres_read_only');
Conectarse a la base de datos de AlloyDB Omni
Inicia sesión en la base de datos de AlloyDB Omni con el usuario de Active Directory. Debes habilitar kinit
en el cliente al que te conectes.
En el siguiente ejemplo, el pod postgres-client
tiene instalados kinit
y psql
, y está configurado para conectarse al clúster de AlloyDB Omni mediante el cliente psql
.
root@postgres-client:/# kinit AD_USER_NAME Password for user1REALM: root@postgres-client:/# psql -h ALLOYDB_SERVER_HOST_NAME -U AD_USER_NAME@REALM -d postgres psql (16.6 (Ubuntu 16.6-0ubuntu0.24.04.1), server 16.3) GSSAPI-encrypted connection Type "help" for help. user1=#
Tu acceso a la base de datos de AlloyDB Omni se determina automáticamente en función de lo siguiente:
- Tu pertenencia actual a grupos de Active Directory.
- Las asignaciones definidas por el administrador entre esos grupos de Active Directory y los roles de PostgreSQL.
- Los permisos que el administrador ha concedido a esos roles de PostgreSQL.
Si es la primera vez que te conectas, tu rol de usuario de PostgreSQL (your_ad_user@YOURDOMAIN.COM
) se creará automáticamente.
Cada vez que inicias sesión, el sistema comprueba tus pertenencias a grupos de Active Directory y actualiza las correspondientes pertenencias a roles de PostgreSQL para que coincidan. No es necesario que hagas nada para que se produzca esta sincronización.
Ejemplo de conexión a una base de datos
Por ejemplo, supongamos que un usuario llamado Quinn forma parte de un grupo de Active Directory llamado ad_developers
. El administrador ha asignado ad_developers
a un rol de postgres llamado
pg_read_only
. Este rol tiene acceso de lectura a una tabla llamada sales
. Cuando el usuario inicia sesión, puede acceder a la tabla.
root@postgres-client:/# kinit quinn@REALM Password for quinn@YOUR.REALM: root@postgres-client:/# psql -h ALLOYDB_SERVER_HOST_NAME -U quinn@REALM -d postgres psql (16.6 (Ubuntu 16.6-0ubuntu0.24.04.1), server 16.3) GSSAPI-encrypted connection Type "help" for help. postgres=# select * from sales; // Query will be run successfully
En el siguiente ejemplo, se elimina a Quinn del grupo ad_developers
en Active Directory:
root@postgres-client:/# kinit quinn@REALM Password for quinn@YOUR.REALM: root@postgres-client:/# psql -h ALLOYDB_SERVER_HOST_NAME -U quinn@REALM -d postgres psql (16.6 (Ubuntu 16.6-0ubuntu0.24.04.1), server 16.3) GSSAPI-encrypted connection Type "help" for help. postgres=# select * from sales; // Query will fail
Limitaciones
- Gestión manual de grupos y permisos: esta función solo automatiza la pertenencia de los usuarios a grupos de PostgreSQL. La creación de esos grupos y la concesión de sus permisos sigue siendo una tarea administrativa manual.
- Latencia de sincronización: la pertenencia solo se sincroniza cuando un usuario inicia sesión. Los cambios que se hagan en la pertenencia a grupos de un usuario en Active Directory solo se reflejarán en AlloyDB Omni en la siguiente sesión de inicio de sesión del usuario.
- Rendimiento: la búsqueda de LDAP añade una pequeña latencia al proceso inicial de inicio de sesión del usuario. El almacenamiento en caché ayuda a mitigar esta latencia en los inicios de sesión posteriores
dentro del tiempo de vida configurado (
auth_cache_ttl_sec
). - Gestión de errores: si no se puede acceder al servidor LDAP o se producen otros errores durante el proceso de sincronización, AlloyDB Omni registra el error. Sin embargo, el usuario podrá iniciar sesión porque la autenticación GSSAPI se ha realizado correctamente. Solo fallará la sincronización de la pertenencia al grupo de esa sesión.
Siguientes pasos
- Integra la compatibilidad con usuarios de Active Directory en AlloyDB Omni.
- Soluciona problemas de integración de Active Directory en AlloyDB Omni.