Integrar la compatibilidad con usuarios de Active Directory en AlloyDB Omni

Selecciona una versión de la documentación:

En esta página se describe cómo integrar AlloyDB Omni con tu implementación de Active Directory para que puedas usar tus nombres de usuario y contraseñas para acceder a tu base de datos de AlloyDB Omni. La integración de Active Directory proporciona Kerberos como mecanismo de autenticación predeterminado para comunicarse con AlloyDB Omni. Para obtener más información, consulta la descripción general de Active Directory.

La configuración de Active Directory en AlloyDB Omni es opcional y está inhabilitada de forma predeterminada. Solo los entornos que usen Active Directory Server para la autenticación pueden usar este mecanismo de configuración.

Antes de empezar

Antes de integrar Active Directory, asegúrate de que cumples los siguientes requisitos:

  • Asegúrate de que Active Directory esté configurado.
  • Obtén la REALM del servidor de Active Directory.
  • Obtén el nombre de host del centro de distribución de claves (KDC) del servidor de Active Directory. El nombre de host se almacena en las imágenes de Docker.
  • Obtén el nombre de host del servidor de administración del servidor de Active Directory. Este nombre de host se almacena en las imágenes de Docker.
  • Asegúrate de tener acceso al servidor de Active Directory para poder generar un archivo .keytab.
  • Elige un usuario de Active Directory para hacer pruebas e iniciar sesión.
  • Obtén un archivo .keytab del servidor de Active Directory.

Obtener un archivo .keytab del servidor de Active Directory

Para obtener un archivo keytab del servidor de Active Directory, sigue estos pasos:

  1. Inicia sesión como administrador en la terminal de PowerShell del servidor de Active Directory.
  2. Crea un usuario llamado postgres ejecutando el siguiente comando o mediante la interfaz de usuario de Active Directory.
  3.   New-ADUser -Name "postgres" `
                   -SamAccountName "postgres" `
                   -UserPrincipalName "postgres@REALM" `
                   -Description "Service Account for AlloyDB Omni PostgreSQL Kerberos Authentication" `
                   -AccountPassword (Read-Host -AsSecureString "Set a strong password for the postgres service account") `
                   -Enabled $true `
                   -PasswordNeverExpires $true
      
  4. Genera un archivo keytab principal de servicio que se asigne a este servidor de Active Directory.
  5.   ktpass /princ postgres/ALLOYDB_HOST_NAME@REALM /Pass ChangeMe123 /mapuser postgres /crypto ALL /ptype KRB5_NT_PRINCIPAL /mapOp set /out C:\Users\Public\postgres.keytab
      

    Donde <HOST> es el nombre de dominio completo del servidor en el que tienes previsto desplegar AlloyDB Omni. Por ejemplo, alloydb-server.ad.example.com. Debes configurar el mismo host en el archivo krb5.conf de la asignación de tu dominio.

  6. Copia el archivo keytab en tu máquina Linux.

Habilitar la autenticación de Active Directory

Para habilitar la autenticación de Active Directory en AlloyDB Omni, sigue estos pasos, que incluyen la configuración de la interfaz de programación de aplicaciones de servicio de seguridad genérico (GSSAPI), que es una interfaz de programación de aplicaciones que permite a los programas acceder a los servicios de seguridad.

  1. Añade las siguientes entradas al archivo /var/lib/postgresql/data/pg_hba.conf antes de la entrada
    host all all all scram-sha-256.

    1. Ejecuta el siguiente comando de Docker para añadir gss al contenedor:

      docker exec CONTAINER_NAME sed -i 's;^host all all all scram-sha-256$;hostgssenc all all 0.0.0.0/0 gss map=gssmap\n&;' /var/lib/postgresql/data/pg_hba.conf
      
    2. Ejecuta el siguiente comando de Docker para verificar que el archivo pg_hba.conf está dentro del contenedor:

      docker exec CONTAINER_NAME cat /var/lib/postgresql/data/pg_hba.conf
      
    3. Comprueba que el archivo contiene la siguiente entrada:

      hostgssenc all all 0.0.0.0/0 gss map=gssmap
      

      Para obtener más información, consulta el archivo pg_hba.conf.

  2. Copia el archivo de la pestaña de claves en el directorio de datos de la imagen de AlloyDB Omni.

    docker cp PATH TO KEYTAB FILE CONTAINER_NAME:/var/lib/postgresql/data/alloydb.keytab
    docker exec CONTAINER_NAME chmod 600 /var/lib/postgresql/data/alloydb.keytab
    docker exec CONTAINER_NAME chown postgres:postgres /var/lib/postgresql/data/alloydb.keytab
    

    Kerberos genera el archivo keytab para el servidor PostgreSQL. Para obtener más información sobre la autenticación, consulta Autenticación GSSAPI.

  3. Añade una entrada para el archivo keytab al archivo /var/lib/postgresql/data/DATA_DIR/postgresql.conf.

    1. Ejecuta el siguiente comando de Docker para añadir la entrada al contenedor:

      docker exec CONTAINER_NAME sed -i '$akrb_server_keyfile='"'"'/var/lib/postgresql/data/alloydb.keytab'"'" /var/lib/postgresql/data/postgresql.conf
      
    2. Ejecuta el siguiente comando de Docker para verificar el archivo postgresql.conf dentro del contenedor:

      docker exec CONTAINER_NAME tail  /var/lib/postgresql/data/postgresql.conf
      
    3. Asegúrate de que el archivo contenga la siguiente entrada:

      krb_server_keyfile=/var/lib/postgresql/data/alloydb.keytab
      

      Para obtener más información, consulta krb_server_keyfile.

  4. Opcional: Añade entradas al archivo /var/lib/postgresql/data/DATA_DIR/pg_ident.conf.

    Cuando se usa un sistema de autenticación externo como GSSAPI, el nombre del usuario del sistema operativo que ha iniciado la conexión puede no ser el mismo que el del usuario de la base de datos (rol) que se quiere usar.

    En este caso, especifica la asignación de usuario del sistema a usuario de PostgreSQL en el archivo /var/lib/postgresql/data/DATA_DIR/pg_ident.conf:

    docker exec -it CONTAINER_NAME bash
    $ echo -e "
    gssmap              /^(.*)@EXAMPLE\.COM$     \1
    gssmap              /^(.*)@example\.com$     \1
    " | column -t | tee -a /var/lib/postgresql/data/pg_ident.conf
    

    Para implementar la asignación de nombres de usuario, especifica map=gssmap en el campo de opciones del archivo pg_hba.conf.

    Para obtener más información sobre la autenticación basada en identidades, consulte Ident Maps.

  5. Vuelve a cargar las configuraciones de PostgreSQL con el siguiente comando:

    docker exec -it CONTAINER_NAME psql -h localhost -U postgres
    psql (16.3)
    Type "help" for help.
    postgres=# select pg_reload_conf();
    

Probar la autenticación de Active Directory

Para verificar que la autenticación de Active Directory funciona correctamente, sigue estos pasos:

  1. Inicia sesión en Active Directory con kinit.
  2. Ejecuta el siguiente comando psql desde la máquina en la que sueles ejecutar kinit:

    root@4f6414ad02ef:/# kinit AD_USER_NAME
    Password for user1@YOUR.REALM:
    
    root@4f6414ad02ef:/# psql --h ALLOYDB_SERVER_HOST_NAME -U AD_USER_NAME
    psql (16.6 (Ubuntu 16.6-0ubuntu0.24.04.1), server 16.3)
    GSSAPI-encrypted connection
    Type "help" for help.
    
    user1=#
    

Inhabilitar la autenticación de Active Directory

Para inhabilitar la autenticación de Active Directory en AlloyDB Omni, sigue estos pasos, que inhabilitan la GSSAPI:

  1. Elimina las entradas del archivo pg_hba.conf que apunten al método de autenticación gss.

    docker exec CONTAINER_NAME sed -i '/hostgssenc all all 0.0.0.0\/0 gss map=gssmap/d' /var/lib/postgresql/data/pg_hba.conf
    
  2. Vuelve a cargar las configuraciones de PostgreSQL con el siguiente comando:

    docker exec -it CONTAINER_NAME psql -h localhost -U postgres
    psql (16.3)
    Type "help" for help.
    postgres=# select pg_reload_conf();
    

Siguientes pasos