Integrare il supporto utenti di Active Directory con AlloyDB Omni

Seleziona una versione della documentazione:

Questa pagina descrive come integrare AlloyDB Omni con l'implementazione di Active Directory esistente in modo da poter utilizzare i nomi utente e le password esistenti per accedere al database AlloyDB Omni. L'integrazione di Active Directory fornisce Kerberos come meccanismo di autenticazione predefinito per comunicare con AlloyDB Omni. Per saperne di più, consulta la panoramica di Active Directory.

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

Prima di iniziare

Prima di integrare Active Directory, assicurati di soddisfare i seguenti requisiti:

  • Assicurati che Active Directory sia configurata.
  • Ottieni il REALM del server Active Directory.
  • Ottieni il nome host del centro di distribuzione chiavi (KDC) del server Active Directory. Il nome host è archiviato nelle immagini Docker.
  • Ottieni il nome host del server di amministrazione del server Active Directory. Questo nome host viene archiviato nelle immagini Docker.
  • Assicurati di avere accesso al server Active Directory in modo da poter generare un file .keytab.
  • Scegli un utente Active Directory da utilizzare per i test e l'accesso.
  • Scarica un file .keytab dal server Active Directory esistente.

Ottieni un file .keytab dal server Active Directory esistente

Per ottenere un keytab dal server Active Directory, segui questi passaggi:

  1. Accedi come amministratore al terminale PowerShell del server Active Directory.
  2. Crea un utente denominato postgres eseguendo il seguente comando o utilizzando l'interfaccia utente di 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 keytab dell'entità di servizio mappato a questo server 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
      

    Dove <HOST> è il nome di dominio completo del server in cui prevedi di eseguire il deployment di AlloyDB Omni, ad esempio alloydb-server.ad.example.com. Devi configurare lo stesso host nel file krb5.conf nella mappatura del realm del dominio.

  6. Copia il file keytab sul computer Linux.

Attiva l'autenticazione Active Directory

Per attivare l'autenticazione Active Directory in AlloyDB Omni, segui questi passaggi, che includono la configurazione della Generic Security Service Application Program Interface (GSSAPI), un'interfaccia di programmazione di un'applicazione che consente ai programmi di accedere ai servizi di sicurezza.

  1. Aggiungi le seguenti voci al file /var/lib/postgresql/data/pg_hba.conf, prima della voce
    host all all all scram-sha-256.

    1. Esegui questo comando Docker per aggiungere gss all'interno del container:

      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. Esegui il seguente comando Docker per verificare che il file pg_hba.conf si trovi all'interno del container:

      docker exec CONTAINER_NAME cat /var/lib/postgresql/data/pg_hba.conf
      
    3. Verifica che nel file sia presente la seguente voce:

      hostgssenc all all 0.0.0.0/0 gss map=gssmap
      

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

  2. Copia il file keytab nella directory di dati all'interno dell'immagine 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
    

    Il file keytab viene generato da Kerberos per il server PostgreSQL. Per saperne di più sull'autenticazione, consulta Autenticazione GSSAPI.

  3. Aggiungi una voce per il file keytab al file /var/lib/postgresql/data/DATA_DIR/postgresql.conf.

    1. Esegui il seguente comando Docker per aggiungere la voce all'interno del container:

      docker exec CONTAINER_NAME sed -i '$akrb_server_keyfile='"'"'/var/lib/postgresql/data/alloydb.keytab'"'" /var/lib/postgresql/data/postgresql.conf
      
    2. Esegui il seguente comando Docker per verificare il file postgresql.conf all'interno del container:

      docker exec CONTAINER_NAME tail  /var/lib/postgresql/data/postgresql.conf
      
    3. Assicurati che nel file sia presente la seguente voce:

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

      Per saperne di più, consulta krb_server_keyfile.

  4. (Facoltativo) Aggiungi voci al file /var/lib/postgresql/data/DATA_DIR/pg_ident.conf.

    Quando utilizzi un sistema di autenticazione esterno come GSSAPI, il nome dell'utente del sistema operativo che ha avviato la connessione potrebbe non essere lo stesso dell'utente (ruolo) del database che vuoi utilizzare.

    In questo caso, specifica la mappatura utente di sistema-utente PostgreSQL nel file /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
    

    Per implementare la mappatura dei nomi utente, specifica map=gssmap nel campo Options nel file pg_hba.conf.

    Per saperne di più sull'autenticazione basata su ident, consulta Mappe ident.

  5. Ricarica le configurazioni PostgreSQL utilizzando il seguente comando:

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

Testa l'autenticazione Active Directory

Per verificare che l'autenticazione Active Directory funzioni, segui questi passaggi:

  1. Accedi ad Active Directory utilizzando kinit.
  2. Esegui questo comando psql dalla macchina su cui di solito esegui 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=#
    

Disabilita l'autenticazione Active Directory

Per disattivare l'autenticazione Active Directory in AlloyDB Omni, segui questi passaggi, che disattivano GSSAPI:

  1. Rimuovi le voci nel file pg_hba.conf che rimandano al metodo di autenticazione 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. Ricarica le configurazioni PostgreSQL utilizzando il seguente comando:

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

Passaggi successivi