Integrare Active Directory con AlloyDB Omni su Kubernetes

Seleziona una versione della documentazione:

Questo documento descrive come abilitare l'integrazione di Active Directory nel cluster di database AlloyDB Omni basato su Kubernetes in modo da consentire agli utenti esistenti basati su Active Directory di accedere al tuo database AlloyDB Omni. L'integrazione di Active Directory fornisce l'autorizzazione tramite GSSAPI per gli utenti autenticati utilizzando il meccanismo Kerberos per accedere ad AlloyDB Omni.

La configurazione di Active Directory in AlloyDB Omni è facoltativa ed è disabilitata per impostazione predefinita. Solo gli ambienti che utilizzano Active Directory Server per l'autenticazione possono utilizzare questo meccanismo di configurazione.

Questo documento presuppone che tu abbia familiarità con l'applicazione dei file manifest Kubernetes e con l'utilizzo dello strumento a riga di comando kubectl. Per saperne di più, consulta Strumento a riga di comando (kubectl).

Prima di iniziare

Per attivare l'integrazione di Active Directory, devi disporre di:

  • Un cluster AlloyDB Omni di cui è stato eseguito il deployment in un ambiente Kubernetes
  • Un file keytab del server Active Directory

Abilita l'autenticazione di Active Directory

Per abilitare l'autenticazione Active Directory, esegui questo comando Helm:

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

Il comando restituisce il seguente output:

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

Controllare lo stato dell'autenticazione di Active Directory

Per determinare lo stato dell'autenticazione di Active Directory, segui questi passaggi:

  1. Recupera il deployment args attuale per il controller del parco risorse e assicurati che enable-user-defined-authentication sia impostato su true eseguendo i seguenti comandi:

    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. Recupera gli argomenti di deployment attuali per il controller locale e assicurati che enable-user-defined-authentication sia impostato su true eseguendo i seguenti comandi:

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

Configurare il supporto di Active Directory

  1. Crea e applica una ConfigMap utilizzando le voci del file 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 queste voci in base ai tuoi requisiti. Queste voci sovrascrivono le voci predefinite in pg_hba.conf. Se aggiungi una configurazione non valida, gli utenti non possono accedere.

    Nell'esempio precedente, hai aggiunto voci per l'autenticazione basata su GSS seguita dall'autenticazione basata su password. Ciò significa che l'utente eseguirà l'accesso utilizzando l'API GSS. Se questo approccio di accesso non va a buon fine, verrà utilizzata l'autenticazione basata su password come fallback.

    Per saperne di più, consulta Il file pg_hba.conf.

  2. Crea e applica un secret con il keytab:

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

  3. (Facoltativo) Crea e applica una mappa di configurazione utilizzando le voci 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

    Per implementare la mappatura dei nomi utente, specifica map=MAP_NAME nel campo delle opzioni del file pg_hba.conf.

    Per ulteriori informazioni, consulta Ident Maps.

  4. Per attivare l'integrazione di Active Directory, aggiungi annotazioni alla specifica 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
    

Creare ruoli del database come utente Active Directory

  1. Crea un ruolo nel database che corrisponda all'utente Active Directory. Per creare un ruolo per l'utente Active Directory, connettiti al cluster ed esegui questi comandi:

    username=# CREATE ROLE "USERNAME@REALM" WITH LOGIN;
    
  2. Accedi al database utilizzando l'utente Active Directory. Devi aver attivato kinit nel client a cui ti stai connettendo.

    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. Esegui query SQL.

    username=# select * from ;
    

Disattiva l'autenticazione di Active Directory

Per disattivare l'autenticazione Active Directory, esegui questo comando Helm:

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

Puoi controllare lo stato dell'autenticazione di Active Directory.

Il comando restituisce il seguente output:

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