Integrar Active Directory con AlloyDB Omni en Kubernetes

Selecciona una versión de la documentación:

En este documento se describe cómo habilitar la integración de Active Directory en tu clúster de base de datos AlloyDB Omni basado en Kubernetes para que puedas permitir que los usuarios de Active Directory accedan a tu base de datos AlloyDB Omni. La integración de Active Directory proporciona autorización mediante GSSAPI a los usuarios autenticados con el mecanismo Kerberos para acceder a AlloyDB Omni.

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.

En este documento se da por hecho que sabes cómo aplicar archivos de manifiesto de Kubernetes y usar la herramienta de línea de comandos kubectl. Para obtener más información, consulta Herramienta de línea de comandos (kubectl).

Antes de empezar

Para habilitar la integración de Active Directory, debes tener lo siguiente:

  • Un clúster de AlloyDB Omni desplegado en un entorno de Kubernetes
  • Un archivo keytab del servidor de Active Directory

Habilitar la autenticación de Active Directory

Para habilitar la autenticación de Active Directory, ejecuta el siguiente comando de Helm:

helm upgrade alloydbomni-operator PATH_TO_CHART -n alloydb-omni-system --set userDefinedAuthentication.enabled=true

El comando devuelve el siguiente resultado:

Release "alloydbomni-operator" has been upgraded. Happy Helming!
NAME: alloydbomni-operator
LAST DEPLOYED: CURRENT_TIMESTAMP
NAMESPACE: alloydb-omni-system
STATUS: deployed
REVISION: 2
TEST SUITE: None

Comprobar el estado de la autenticación de Active Directory

Para determinar el estado de la autenticación de Active Directory, sigue estos pasos:

  1. Obtén la implementación actual args del controlador de la flota y asegúrate de que enable-user-defined-authentication esté configurado como true. Para ello, ejecuta los siguientes comandos:

    kubectl get deployment -n alloydb-omni-system fleet-controller-manager -o json | jq '.spec.template.spec.containers[0].args'
    
    [
      "--health-probe-bind-address=:8081",
      "--metrics-bind-address=127.0.0.1:8080",
      "--leader-elect",
      "--image-registry=gcr.io",
      ...
      "--enable-user-defined-authentication=true"
    ]
    
  2. Obtén los argumentos de implementación actuales del controlador local y comprueba que enable-user-defined-authentication esté definido como true ejecutando los siguientes comandos:

    kubectl get deployment -n alloydb-omni-system local-controller-manager -o json | jq '.spec.template.spec.containers[0].args'
    
    [
      "--health-probe-bind-address=:8081",
      "--metrics-bind-address=127.0.0.1:8080",
      "--leader-elect",
      "--deployment-platform=generic-k8s",
      "--enable-backup-from-standby=true",
      "--enable-user-defined-authentication=true"
    ]
    

Configurar la compatibilidad con Active Directory

  1. Crea y aplica un mapa de configuración mediante entradas de archivo pg_hba.conf:

    kubectl apply -f - 
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: pg-hba-config
    data:
      pg_hba_entries: |
        # Active Directory-based users
        hostgssenc all all 0.0.0.0/0    gss
        hostgssenc all all ::1/128      gss
        # Database-based users
        hostssl    all all 0.0.0.0/0  scram-sha-256
        hostssl    all all ::/0       scram-sha-256
    EOF
    

    Modifica estas entradas según tus requisitos. Estas entradas sobrescriben las entradas predeterminadas de pg_hba.conf. Si añades una configuración no válida, los usuarios no podrán iniciar sesión.

    En el ejemplo anterior, has añadido entradas para la autenticación basada en GSS seguida de la autenticación basada en contraseñas. Esto significa que el usuario iniciará sesión mediante la API de GSS. Si este método de inicio de sesión falla, se usará la autenticación basada en contraseñas como alternativa.

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

  2. Crea y aplica un secreto con el archivo keytab:

     kubectl apply -f - 
     apiVersion: v1
     kind: Secret
     metadata:
       name: db-keytab-dbcluster-sample
     type: Opaque
     data:
       krb5.keytab: |
        BASE64_ENCODED_KEYTAB
     EOF
     

  3. Opcional: Crea y aplica un mapa de configuración con entradas pg_ident.conf.

      kubectl apply -f - EOF
      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: pg-ident-config
      data:
        pg_ident_entries: |
    MAP_NAME /^(.)@YOUR.REALM$/ \1 MAP_NAME /^(.)@your.realm$/ \1 EOF

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

    Para obtener más información, consulta Ident Maps.

  4. Para habilitar la integración de Active Directory, añade anotaciones a la especificación DBCluster.

    kubectl apply -f - DB_CLUSTER_NAME
    type: Opaque
    data:
      DB_CLUSTER_NAME: "ENCODED_PASSWORD"
    ---
    apiVersion: alloydbomni.dbadmin.goog/v1
    kind: DBCluster
    metadata:
      name: DB_CLUSTER_NAME
      annotations:
        dbs.dbadmin.goog.com/pg-hba-config-map: pg-hba-config
        dbs.dbadmin.goog.com/pg-ident-config-map: pg-ident-config
        dbs.dbadmin.goog.com/keytab-ref: db-keytab-dbcluster-sample
    spec:
      databaseVersion: "DB_VERSION"
      primarySpec:
        adminUser:
          passwordRef:
            name: db-pw-DB_CLUSTER_NAME
        resources:
          memory: MEMORY_SIZE
          cpu: CPU_COUNT
          disks:
          - name: DataDisk
            size: DISK_SIZE
    EOF
    

Crear roles de base de datos como usuario de Active Directory

  1. Crea un rol en tu base de datos que coincida con el usuario de Active Directory. Para crear un rol para tu usuario de Active Directory, conéctate al clúster y ejecuta los siguientes comandos:

    username=# CREATE ROLE "USERNAME@REALM" WITH LOGIN;
    
  2. Inicia sesión en la base de datos con el usuario de Active Directory. Debes tener kinit habilitado en el cliente al que te conectes.

    kubectl exec -it postgres -n DB_CLUSTER_NAMESPACE -- bash
    root:/# kinit USERNAME
    Password for USERNAME@REALM:
    
    root:/# psql -h HOSTNAME -d DB_NAME -U USERNAME@REALM
    psql (16.6 (Ubuntu 16.6-0ubuntu0.24.04.1), server 16.3)
    GSSAPI-encrypted connection
    Type "help" for help.
    
  3. Ejecutar consultas de SQL.

    username=# select * from ;
    

Inhabilitar la autenticación de Active Directory

Para inhabilitar la autenticación de Active Directory, ejecuta el siguiente comando de Helm:

helm upgrade alloydbomni-operator PATH_TO_CHART -n alloydb-omni-system --set userDefinedAuthentication.enabled=false

Puedes comprobar el estado de la autenticación de Active Directory.

El comando devuelve el siguiente resultado:

Release "alloydbomni-operator" has been upgraded. Happy Helming!
NAME: alloydbomni-operator
LAST DEPLOYED: CURRENT_TIMESTAMP
NAMESPACE: alloydb-omni-system
STATUS: deployed
REVISION: 2
TEST SUITE: None