DéveloppeurWeb.Com
    DéveloppeurWeb.Com
    • Agile Zone
    • AI Zone
    • Cloud Zone
    • Database Zone
    • DevOps Zone
    • Integration Zone
    • Web Dev Zone
    DéveloppeurWeb.Com
    Home»Database Zone»Configuration de CockroachDB avec Active Directory
    Database Zone

    Configuration de CockroachDB avec Active Directory

    novembre 24, 2021
    Configuration de CockroachDB avec Active Directory
    Share
    Facebook Twitter Pinterest Reddit WhatsApp Email

    Aujourd’hui, je vais aborder l’intégration de CockroachDB Active Directory. Sous les couvertures, Cockroach utilise GSSAPI. Aujourd’hui, Cockroach ne prend en charge que la cartographie des utilisateurs. Il ne prend pas en charge la synchronisation des utilisateurs entre l’unité d’organisation AD et un rôle de cafard.

    Mon environnement de laboratoire se compose d’un contrôleur AD exécutant Windows Server 2016 en tant que VM VirtualBox et d’une VM Vagrant avec CentOS 7 hébergeant CockroachDB. Les machines virtuelles partagent un réseau hôte uniquement. Cela était essentiel dans ma configuration afin que mon nœud Cockroach puisse interagir avec AD sur le port 88.

    Conditions:

    1. Contrôleur de domaine Active Directory
    2. OS Linux, dans mon cas RHEL7 et CockroachDB 20.1.1.

    Conditions préalables:

    • J’utilise une évaluation de Windows Server 2016. Vous pouvez trouver un essai de 180 jours ici.
    • J’ai suivi ce tutoriel pour installer Windows Server dans VirtualBox dans le cadre d’une installation personnalisée.
    • Installez VirtualBox Guest Additions en suivant ce didacticiel.
    • Partagez un répertoire avec AD et l’hôte. Vous en aurez besoin pour copier les keytabs sur les nœuds Cockroach.
    • Remplacez le nom d’hôte de la machine AD par un nom convivial. j’utilise serveur publicitaire comme mon nom d’hôte.
    • L’heure, la date et le fuseau horaire doivent être synchronisés sur le serveur AD et les nœuds Cockroach. Cela va sans dire puisque nous travaillons avec Kerberos, mais cela vaut toujours la peine d’être mentionné.
    • Remplacez l’IP Windows par le même sous-réseau que le(s) nœud(s) CockroachDB.
    • Ajoutez les nœuds Cockroach au fichier des hôtes Windows (facultatif).
    • Installez le contrôleur de domaine Active Directory en suivant ce didacticiel.

    Je fournis les images suivantes comme points de référence, les didacticiels ci-dessus devraient vous amener au résultat souhaité.

    Installation du serveur Windows

    Installation du serveur Windows

    Modification du nom d’hôte Windows

    Modification du nom d'hôte Windows

    Vérifiez que le nouveau nom d’hôte est en vigueur

    Vérifiez que le nouveau nom d'hôte est en vigueur

    Synchroniser l’heure, la date, le fuseau horaire

    Synchroniser l'heure, la date, le fuseau horaire

    Modifier le sous-réseau AD pour qu’il corresponde à CockroachDB

    Modifier le sous-réseau AD pour qu'il corresponde à CockroachDB

    En option, ajoutez des hôtes CockroachDB au fichier d’hôtes du serveur AD :

    En option, ajoutez des hôtes CockroachDB au fichier d'hôtes du serveur AD :

    À ce stade, vous devriez pouvoir envoyer un ping à l’hôte CentOS.

    À ce stade, vous devriez pouvoir envoyer un ping à l'hôte CentOS.

    Il en va de même depuis la machine CentOS, une fois le fichier /etc/hosts renseigné.

    127.0.0.1       node.example.com        node
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.33.15   adserver.example.com    adserver
    [vagrant@node ~]$ ping adserver.example.com
    PING adserver.example.com (192.168.33.15) 56(84) bytes of data.
    64 bytes from adserver.example.com (192.168.33.15): icmp_seq=1 ttl=128 time=0.369 ms
    64 bytes from adserver.example.com (192.168.33.15): icmp_seq=2 ttl=128 time=0.511 ms
    64 bytes from adserver.example.com (192.168.33.15): icmp_seq=3 ttl=128 time=0.430 ms

    Pour vérifier l’intégrité, assurons-nous que nous avons une connectivité au serveur AD sur le port 88. Nous aurons besoin d’un package telnet installé.

    sudo yum install -y telnet
    telnet adserver.example.com 88
    Trying 192.168.33.15...
    Connected to adserver.example.com.
    Escape character is '^]'.

    Nous pouvons maintenant nous concentrer sur l’ajout d’un principal de service dans AD. Générez un keytab et configurez le fichier krb5.conf sur la machine CentOS.

    Sur la machine AD Controller, accédez à la console Utilisateurs et ordinateurs Active Directory.

    Ajoutez un nouvel utilisateur en cliquant avec le bouton droit sur les utilisateurs sous votre domaine ; dans mon cas, .

    ajouter un nouvel utilisateur en cliquant avec le bouton droit sur les utilisateurs sous votre domaine

    Enfin, sélectionnez vos préférences de mot de passe et cliquez sur Terminer.

    Sélectionnez vos préférences de mot de passe et cliquez sur Terminer

    sélectionnez vos préférences de mot de passe et cliquez sur Terminer terminé

    Il est également important de vérifier les deux propriétés spécifiques à Kerberos suivantes pour l’utilisateur. J’ai été confus par l’interface utilisateur de Windows Server sur l’emplacement de ces propriétés. Vous pouvez les trouver sur la page des propriétés de l’utilisateur, sous l’onglet Compte. Vous devrez peut-être faire défiler jusqu’en bas dans la zone de case à cocher pour trouver ces propriétés répertoriées.

    propriétés pguser

    Cliquez sur Appliquer pour terminer cette étape.

    À ce stade, nous pouvons associer le nom du principal du service et générer un keytab. Nous pouvons utiliser le shell CMD ou PowerShell pour la tâche. ktpass l’utilitaire dans AD nous aidera avec cela.

    ktpass -out node.keytab -princ postgres/node.example.com@EXAMPLE.COM -mapUser pguser@EXAMPLE.COM -mapOp set -pType KRB5_NT_PRINCIPAL -crypto AES256-SHA1 -pass CRDB123?

    Cette commande génère un fichier keytab appelé node.keytab, associant le nom du principal de service postgres à un FQDN du nœud Cockroach node.example.com@EXAMPLE.COM, et mapper l’utilisateur AD pguser au SPN. nous précisons AES256-SHA1 crypto et enfin, nous passons le mot de passe au SPN nouvellement créé.

    Générer Keytab et associer un SPN à un principal

    Générer Keytab et associer un SPN à un principal

    On peut aussi valider le SPN avec la commande suivante :

    setspn -l pguser

    Valider le SPN

    À ce stade, nous avons un keytab que nous pouvons utiliser pour nous connecter à l’AD à partir de notre machine CentOS. Copiez le keytab sur les hôtes Cockroach.

    Maintenant, sur les hôtes CentOS, nous devons effectuer quelques étapes préliminaires pour intégrer AD. Pour commencer, nous devons nous assurer que l’heure, la date et le fuseau horaire sont exacts.

    timedatectl
    timedatectl list-timezones | grep New_York
    [vagrant@node ~]$ timedatectl
          Local time: Wed 2020-06-03 17:00:01 UTC
      Universal time: Wed 2020-06-03 17:00:01 UTC
            RTC time: Wed 2020-06-03 16:59:59
           Time zone: UTC (UTC, +0000)
         NTP enabled: yes
    NTP synchronized: yes
     RTC in local TZ: no
          DST active: n/a
    [vagrant@node ~]$ timedatectl list-timezones | grep New_York
    America/New_York
    [vagrant@node ~]$ sudo timedatectl set-timezone America/New_York
    [vagrant@node ~]$ timedatectl
          Local time: Wed 2020-06-03 13:01:06 EDT
      Universal time: Wed 2020-06-03 17:01:06 UTC
            RTC time: Wed 2020-06-03 17:01:05
           Time zone: America/New_York (EDT, -0400)
         NTP enabled: yes
    NTP synchronized: yes
     RTC in local TZ: no
          DST active: yes
     Last DST change: DST began at
                      Sun 2020-03-08 01:59:59 EST
                      Sun 2020-03-08 03:00:00 EDT
     Next DST change: DST ends (the clock jumps one hour backwards) at
                      Sun 2020-11-01 01:59:59 EDT
                      Sun 2020-11-01 01:00:00 EST

    Installer krb5-workstation package et remplissez avec les propriétés spécifiques à AD.

    yum install -y krb5-workstation

    Configurer /etc/krb5.conf fichier avec les propriétés suivantes :

    [logging]
     default = FILE:/var/log/krb5libs.log
     kdc = FILE:/var/log/krb5kdc.log
     admin_server = FILE:/var/log/kadmind.log
    
    [libdefaults]
     default_realm = EXAMPLE.COM
    
    [realms]
     EXAMPLE.COM = {
      kdc = adserver.example.com
      admin_server = adserver.example.com
      default_domain = example.com
     }
    
    [domain_realm]
     .example.com = EXAMPLE.COM
     example.com = EXAMPLE.COM

    Modifiez les autorisations sur le keytab.

    chmod 600 node.keytab

    Met le KRB5_KTNAME variable à l’emplacement du keytab.

    export KRB5_KTNAME=node.keytab

    À ce stade, nous devrions être en mesure de nous authentifier auprès d’AD en tant que pguser.

    [vagrant@node ~]$ kinit pguser
    Password for pguser@EXAMPLE.COM:
    [vagrant@node ~]$ klist
    Ticket cache: FILE:/tmp/krb5cc_1000
    Default principal: pguser@EXAMPLE.COM
    
    Valid starting       Expires              Service principal
    06/03/2020 13:23:06  06/03/2020 23:23:06  krbtgt/EXAMPLE.COM@EXAMPLE.COM
            renew until 06/04/2020 13:23:06

    Vérifions quelques autres choses à propos de notre keytab, car ces choses peuvent vous éviter de nombreuses heures de douleur. Croyez-moi, je sais!

    Kerberos exige que KVNO nombre pour un principal sur un système basé sur Unix soit supérieur ou égal à 3. Nous pouvons le confirmer avec la commande suivante :

    kvno pguser@EXAMPLE.COM
    pguser@EXAMPLE.COM: kvno = 3

    Vérifions si le SPN KVNO correspond au principal.

    kvno postgres/node.example.com@EXAMPLE.COM
    [vagrant@node ~]$ kvno postgres/node.example.com@EXAMPLE.COM
    postgres/node.example.com@EXAMPLE.COM: kvno = 3

    Nous pouvons également valider que notre entrée keytab correspond à ce qui précède :

    [vagrant@node ~]$ klist -kt node.keytab
    Keytab name: FILE:node.keytab
    KVNO Timestamp           Principal
    ---- ------------------- ------------------------------------------------------
       3 12/31/1969 19:00:00 postgres/node.example.com@EXAMPLE.COM

    Nous pouvons également utiliser ktutil pour confirmer la même chose :

    [vagrant@node ~]$ ktutil
    ktutil:  read_kt node.keytab
    ktutil:  list
    slot KVNO Principal
    ---- ---- ---------------------------------------------------------------------
       1    3    postgres/node.example.com@EXAMPLE.COM

    Même si nous avons déjà vérifié les deux KVNO, soyons absolument sûrs et vérifions la même chose sur notre serveur AD.

    Dans PowerShell, exécutez la commande ci-dessous pour obtenir la valeur KVNO.

    Get-ADUser pguser -property msDS-KeyVersionNumber

    Obtenir-ADUser

    Comme ils correspondent tous, nous pouvons procéder à la configuration de GSSAPI avec Cockroach.

    Installez CockroachDB.

    COCKROACH_VERSION=v21.2.0
    wget -qO- https://binaries.cockroachdb.com/cockroach-$COCKROACH_VERSION.linux-amd64.tgz | tar  xvz
    sudo cp -i cockroach-$COCKROACH_VERSION.linux-amd64/cockroach /usr/local/bin/
    cockroach version
    Build Tag:    v21.2.0
    Build Time:   2021/11/15 14:00:58
    Distribution: CCL
    Platform:     linux amd64 (x86_64-unknown-linux-gnu)
    Go Version:   go1.16.6
    C Compiler:   Clang 10.0.0
    Build SHA-1:  6123c0c73ff0eea223cfd25e1e557648413126f8
    Build Type:   release

    Démarrez un cluster sécurisé.

    Générer des certificats : cette étape n’est pas différente de celle des documents. Je ne fais que passer des noms DNS supplémentaires à la commande certs.

    HOSTNAME="node.example.com node 192.168.33.10"
    mkdir certs my-safe-directory
    cockroach cert create-ca --certs-dir=certs --ca-key=my-safe-directory/ca.key
    cockroach cert create-node $HOSTNAME --certs-dir=certs --ca-key=my-safe-directory/ca.key
    openssl x509 -in certs/node.crt -text | grep "Subject Alternative Name" -A 1
    cockroach cert create-client root --certs-dir=certs --ca-key=my-safe-directory/ca.key
    [vagrant@node ~]$ openssl x509 -in certs/node.crt -text | grep "Subject Alternative Name" -A 1
                X509v3 Subject Alternative Name:
                    DNS:node.example.com, DNS:node, IP Address:192.168.33.10

    Démarrez le cafard en mode sécurisé.

    cockroach start --certs-dir=certs --store=node1 --listen-addr=node.example.com:26257 --http-addr=node.example.com:8080 --join=node.example.com:26257,node.example.com:26258,node.example.com:26259 --background
    cockroach start --certs-dir=certs --store=node2 --listen-addr=node.example.com:26258 --http-addr=node.example.com:8081 --join=node.example.com:26257,node.example.com:26258,node.example.com:26259 --background
    cockroach start --certs-dir=certs --store=node3 --listen-addr=node.example.com:26259 --http-addr=node.example.com:8082 --join=node.example.com:26257,node.example.com:26258,node.example.com:26259 --background

    Initialisez le cluster.

    [vagrant@node ~]$ cockroach init --certs-dir=certs --host=node.example.com:26257
    Cluster successfully initialized

    Connectez-vous à la base de données.

    cockroach sql --certs-dir=certs --host=node.example.com

    Activer la licence d’entreprise. GSSAPI est une fonctionnalité d’entreprise au moment de la rédaction de cet article.

    SET CLUSTER SETTING cluster.organization = 'Acme Company';
    SET CLUSTER SETTING enterprise.license="xxxxxxxxxxxx";

    Activez GSSAPI. Cela activera GSSAPI pour tout le monde sauf l’utilisateur root. L’utilisateur racine s’appuiera toujours sur le certificat racine pour se connecter.

    SET cluster setting server.host_based_authentication.configuration = 'host all all all gss include_realm=0';

    Créez un utilisateur normal et accordez des privilèges.

    CREATE USER pguser;
    GRANT ALL ON DATABASE defaultdb TO pguser;
    q

    Il ne reste plus qu’à kinit comme pguser. N’oubliez pas que nous l’avons déjà fait, mais reprenons cette étape pour être complet.

    kdestroy -A
    kinit pguser
    klist

    Enfin, nous devons installer psql client en tant que cockroach.CLI ne prend pas en charge GSSAPI.

    J’aimerais utiliser la version 9.5 du client psql car c’est le protocole filaire actuellement pris en charge pour CockroachDB. Malheureusement, CentOS 7 est livré avec la version 9.2 prête à l’emploi, et nous allons suivre les étapes de ce lien pour installer la bonne version.

    Désactiver postgresq dans le [base] et [updates] sections du fichier /etc/yum.repos.d/CentOS-Base.repo avec…

    Share. Facebook Twitter Pinterest LinkedIn WhatsApp Reddit Email
    Add A Comment

    Leave A Reply Cancel Reply

    Catégories

    • Politique de cookies
    • Politique de confidentialité
    • CONTACT
    • Politique du DMCA
    • CONDITIONS D’UTILISATION
    • Avertissement
    © 2023 DéveloppeurWeb.Com.

    Type above and press Enter to search. Press Esc to cancel.