Intégrer l'assistance utilisateur Active Directory à AlloyDB Omni

Sélectionnez une version de la documentation :

Cette page explique comment intégrer AlloyDB Omni à votre implémentation Active Directory existante afin de pouvoir utiliser vos noms d'utilisateur et mots de passe existants pour accéder à votre base de données AlloyDB Omni. L'intégration d'Active Directory fournit Kerberos comme mécanisme d'authentification par défaut pour communiquer avec AlloyDB Omni. Pour en savoir plus, consultez Présentation d'Active Directory.

La configuration d'Active Directory dans AlloyDB Omni est facultative et désactivée par défaut. Seuls les environnements utilisant Active Directory Server pour l'authentification peuvent utiliser ce mécanisme de configuration.

Avant de commencer

Avant d'intégrer Active Directory, assurez-vous de remplir les conditions suivantes :

  • Assurez-vous qu'Active Directory est configuré.
  • Obtenez le REALM du serveur Active Directory.
  • Obtenez le nom d'hôte du centre de distribution de clés (KDC) du serveur Active Directory. Le nom d'hôte est stocké dans les images Docker.
  • Obtenez le nom d'hôte du serveur d'administration du serveur Active Directory. Ce nom d'hôte est stocké dans les images Docker.
  • Assurez-vous d'avoir accès au serveur Active Directory pour pouvoir générer un fichier .keytab.
  • Choisissez un utilisateur Active Directory à utiliser pour les tests et la connexion.
  • Obtenez un fichier .keytab à partir du serveur Active Directory existant.

Obtenir un fichier .keytab à partir du serveur Active Directory existant

Pour obtenir un fichier keytab à partir du serveur Active Directory, procédez comme suit :

  1. Connectez-vous en tant qu'administrateur au terminal PowerShell du serveur Active Directory.
  2. Créez un utilisateur nommé postgres en exécutant la commande suivante ou en utilisant l'interface utilisateur 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. Générez un fichier keytab de principal de service qui correspond à ce serveur 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
      

    <HOST> est le nom de domaine complet du serveur sur lequel vous prévoyez de déployer AlloyDB Omni (par exemple, alloydb-server.ad.example.com). Vous devez configurer le même hôte dans le fichier krb5.conf de votre mappage de domaine.

  6. Copiez le fichier keytab sur votre machine Linux.

Activer l'authentification Active Directory

Pour activer l'authentification Active Directory dans AlloyDB Omni, suivez ces étapes, qui incluent la configuration de l'interface de programmation d'application Generic Security Service (GSSAPI), qui est une interface de programmation d'application permettant aux programmes d'accéder aux services de sécurité.

  1. Ajoutez les entrées suivantes au fichier /var/lib/postgresql/data/pg_hba.conf, avant l'entrée
    host all all all scram-sha-256.

    1. Exécutez la commande Docker suivante pour ajouter gss dans le conteneur :

      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. Exécutez la commande Docker suivante pour vérifier que le fichier pg_hba.conf se trouve dans le conteneur :

      docker exec CONTAINER_NAME cat /var/lib/postgresql/data/pg_hba.conf
      
    3. Vérifiez que l'entrée suivante figure dans le fichier :

      hostgssenc all all 0.0.0.0/0 gss map=gssmap
      

      Pour en savoir plus, consultez le fichier pg_hba.conf.

  2. Copiez le fichier keytab dans le répertoire de données de l'image 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
    

    Le fichier keytab est généré par Kerberos pour le serveur PostgreSQL. Pour en savoir plus sur l'authentification, consultez Authentification GSSAPI.

  3. Ajoutez une entrée pour le fichier keytab au fichier /var/lib/postgresql/data/DATA_DIR/postgresql.conf.

    1. Exécutez la commande Docker suivante pour ajouter l'entrée dans le conteneur :

      docker exec CONTAINER_NAME sed -i '$akrb_server_keyfile='"'"'/var/lib/postgresql/data/alloydb.keytab'"'" /var/lib/postgresql/data/postgresql.conf
      
    2. Exécutez la commande Docker suivante pour vérifier le fichier postgresql.conf à l'intérieur du conteneur :

      docker exec CONTAINER_NAME tail  /var/lib/postgresql/data/postgresql.conf
      
    3. Assurez-vous que l'entrée suivante figure dans le fichier :

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

      Pour en savoir plus, consultez krb_server_keyfile.

  4. Facultatif : Ajoutez des entrées au fichier /var/lib/postgresql/data/DATA_DIR/pg_ident.conf.

    Lorsque vous utilisez un système d'authentification externe tel que GSSAPI, le nom de l'utilisateur du système d'exploitation qui a initié la connexion peut ne pas être le même que celui de l'utilisateur (rôle) de la base de données que vous souhaitez utiliser.

    Dans ce cas, spécifiez le mappage entre l'utilisateur système et l'utilisateur PostgreSQL dans le fichier /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
    

    Pour implémenter le mappage des noms d'utilisateur, spécifiez map=gssmap dans le champ des options du fichier pg_hba.conf.

    Pour en savoir plus sur l'authentification basée sur l'identité, consultez Cartes d'identité.

  5. Rechargez les configurations PostgreSQL à l'aide de la commande suivante :

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

Tester l'authentification Active Directory

Pour vérifier que l'authentification Active Directory fonctionne, procédez comme suit :

  1. Connectez-vous à Active Directory à l'aide de kinit.
  2. Exécutez la commande psql suivante à partir de la machine sur laquelle vous exécutez habituellement 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=#
    

Désactiver l'authentification Active Directory

Pour désactiver l'authentification Active Directory dans AlloyDB Omni, procédez comme suit pour désactiver GSSAPI :

  1. Supprimez les entrées du fichier pg_hba.conf qui pointent vers la méthode d'authentification 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. Rechargez les configurations PostgreSQL à l'aide de la commande suivante :

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

Étapes suivantes