Integra 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 de AlloyDB Omni basado en Kubernetes para que puedas permitir que los usuarios existentes basados en Active Directory accedan a tu base de datos de AlloyDB Omni. La integración de Active Directory proporciona autorización con GSSAPI para que los usuarios autenticados con el mecanismo de Kerberos accedan a AlloyDB Omni.

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

En este documento, se supone que estás familiarizado con la aplicación de archivos de manifiesto de Kubernetes y el uso de la herramienta de línea de comandos de kubectl. Para obtener más información, consulta Herramienta de línea de comandos (kubectl).

Antes de comenzar

Para habilitar la integración de Active Directory, debes cumplir con los siguientes requisitos:

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

Habilita 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 muestra 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

Comprueba el estado de la autenticación de Active Directory

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

  1. Para obtener el args de implementación actual del controlador de flota y asegurarte de que enable-user-defined-authentication esté configurado como true, 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. Ejecuta los siguientes comandos para obtener los argumentos de implementación actuales del controlador local y asegúrate de que enable-user-defined-authentication esté configurado como true:

    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"
    ]
    

Configura la compatibilidad con Active Directory

  1. Crea y aplica un mapa de configuración con entradas de archivos 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 reemplazan las entradas predeterminadas en pg_hba.conf. Si agregas una configuración no válida, los usuarios no podrán acceder.

    En el ejemplo anterior, agregaste entradas para la autenticación basada en GSS y, luego, para la autenticación basada en contraseñas. Esto significa que el usuario accederá con la API de GSS. Si este enfoque de acceso 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, agrega anotaciones a la especificación de 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
    

Crea 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. Accede a la base de datos con el usuario de Active Directory. Debes tener kinit habilitado en el cliente al que te conectas.

    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 en SQL

    username=# select * from ;
    

Inhabilita 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 verificar el estado de la autenticación de Active Directory.

El comando muestra 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