Configura Kerberos per le condivisioni SMB/CIFS in una distribuzione AI Data Engine multi-node
Esegui la scansione delle condivisioni SMB/CIFS da una distribuzione multi-node di AI Data Engine (AIDE) utilizzando l'autenticazione Kerberos, in modo che nessuna password venga memorizzata nell'origine dati. Ogni nodo utilizza la stessa configurazione Kerberos e AI Data Engine aggiorna automaticamente il ticket Kerberos.
Se hai una distribuzione a nodo singolo, fai riferimento a "Configura Kerberos per le condivisioni SMB/CIFS su una distribuzione di AI Data Engine a nodo singolo".
Prima di iniziare
-
Hai i privilegi di amministratore di AI Data Engine.
-
Hai access root a ogni nodo e all'admin host. L'admin host è l'host su cui monti l'export NFS e crei il keytab. Può essere uno qualsiasi dei nodi.
-
Hai
kubectlaccesso con privilegi cluster-admin al tuo cluster Kubernetes dall'admin host. Se utilizzi un file kubeconfig, imposta la `KUBECONFIG`variabile d'ambiente sul relativo percorso.
-
Hai esaminato "requisiti di rete" e "Requisiti di Kerberos e Active Directory", inclusi la sincronizzazione dell'ora e il DNS.
-
Hai verificato che ogni nodo può raggiungere il server NFS sulla porta TCP 2049, il KDC sulla porta 88, il file server sulla porta 445 e il tuo DNS server sulla porta 53.
-
Hai verificato che NTP sia attivo su ogni nodo e che ogni orologio sia sincronizzato con i domain controller. Per verificare, esegui
timedatectl.
-
Hai un account del servizio di scansione in Active Directory con accesso in lettura alle SMB/CIFS share che vuoi analizzare. L'account deve supportare la crittografia AES256.
-
Hai a disposizione le seguenti informazioni:
Articolo Descrizione Esempio Indirizzo IP del KDC
Indirizzo IP del domain controller che funge da centro di distribuzione delle chiavi Kerberos (KDC)
10.0.1.50FQDN del KDC
domain name pienamente qualificato (FQDN) dello stesso domain controller
dc.corp.example.comDominio
Dominio di Active Directory, in minuscolo
corp.example.comRealm
realm Kerberos, che è il dominio in maiuscolo
CORP.EXAMPLE.COMUtente di scansione
Account di servizio con accesso in lettura alla condivisione
svc-aideScansiona la password
Password dell'utente di scansione. La inserisci solo quando crei il file keytab.
Non applicabile
FQDN del file server
Nome di dominio pienamente qualificato (FQDN) del file server che ospita la condivisione. Non usare un indirizzo IP.
filer.corp.example.comNome condiviso
Nome della SMB/CIFS share
sharename
File Kerberos utilizzati da AI Data Engine
Crei i seguenti file nell'esportazione NFS che contiene la configurazione di AI Data Engine. Nella tabella seguente, <export> è la radice di tale esportazione.
| File | Posizione sull'export |
|---|---|
Configurazione Kerberos |
|
Keytab |
|
File principale |
|
Directory della cache dei ticket |
|
Installa i pacchetti necessari
La scansione Kerberos di una CIFS share non riesce su qualsiasi nodo che non dispone di cifs-utils. Il mount SMB/CIFS viene eseguito all'interno di AI Data Engine, ma il sistema operativo del nodo chiama un cifs-utils componente per configurare la sessione Kerberos. Installare il pacchetto solo sull'admin host non basta.
| Pacchetto | admin host | Ogni nodo |
|---|---|---|
|
Richiesto |
Non richiesto |
|
Richiesto |
Richiesto |
Gli strumenti client Kerberos forniscono i comandi ktutil, kinit e klist che utilizzi per creare e testare il keytab.
-
Sull'admin host, installa gli strumenti client Kerberos e
cifs-utils.-
Su Ubuntu o Debian, esegui i seguenti comandi.
apt-get update -qq apt-get install -y krb5-user cifs-utils -
Su RHEL, CentOS o Rocky Linux, esegui il seguente comando.
dnf -y install krb5-workstation cifs-utils
-
-
Su ogni altro nodo, installa
cifs-utils.-
Su Ubuntu o Debian, esegui i seguenti comandi.
apt-get update -qq apt-get install -y cifs-utils -
Su RHEL, CentOS o Rocky Linux, esegui il seguente comando.
dnf -y install cifs-utils
-
-
Su ogni nodo, verifica l'installazione.
which cifs.upcall
Monta l'export NFS sull'admin host
Ottieni l'accesso all'esportazione della configurazione condivisa dall'admin host in modo da poter creare i file Kerberos che ogni nodo potrà leggere.
-
Imposta lo spazio dei nomi in cui viene eseguito AI Data Engine e verifica che la richiesta di volume di configurazione sia associata. Lo spazio dei nomi predefinito è
aide.export NAMESPACE="<namespace>" kubectl -n "${NAMESPACE}" get pvc aide-config-pvcLo stato deve essere
Bound. -
Recupera il server NFS e il percorso di esportazione del volume di configurazione. Hai specificato questi valori quando hai distribuito AI Data Engine.
kubectl get pv aide-config-pv -o jsonpath='NFS server: {.spec.nfs.server}{"\n"}Export path: {.spec.nfs.path}{"\n"}' -
Monta l'esportazione. Sostituisci
<nfs_server>e<export_path>con i valori del passaggio precedente. I comandi utilizzano/mnt/aide-configcome punto di montaggio. Puoi utilizzare qualsiasi directory vuota.mkdir -p /mnt/aide-config mount -t nfs <nfs_server>:<export_path> /mnt/aide-config -
Crea le directory Kerberos.
export AIDE_CONFIG_ROOT="/mnt/aide-config" mkdir -p "${AIDE_CONFIG_ROOT}/kerberos/kerberos_refresher" mkdir -p "${AIDE_CONFIG_ROOT}/kerberos/kerberos_ccache"
Crea i file Kerberos
Fornisci ad AI Data Engine la configurazione e le credenziali necessarie per ottenere i ticket Kerberos per l'account del servizio di scansione. Esegui i seguenti passaggi sull'admin host.
-
Imposta le variabili utilizzate dai seguenti comandi. Sostituisci ogni valore tra parentesi angolari con il tuo valore e non includere le parentesi angolari. Inserisci il realm in maiuscolo e il dominio in minuscolo.
export KDC_IP="<kdc_ip>" export KDC_FQDN="<kdc_fqdn>" export AD_DOMAIN="<domain>" export REALM="<REALM>" export SCAN_USER="<scan_user>" export FILE_SERVER_FQDN="<file_server_fqdn>" export SHARE_NAME="<share_name>" export KRB5_CONF_SOURCE="${AIDE_CONFIG_ROOT}/kerberos/krb5.conf" export KRB5_KEYTAB="${AIDE_CONFIG_ROOT}/kerberos/kerberos_refresher/datasense.keytab" export KRB5_CREDS="${AIDE_CONFIG_ROOT}/kerberos/kerberos_refresher/kerberos_creds.env"-
Verifica che le variabili siano impostate.
echo "NAMESPACE=[${NAMESPACE}] AIDE_CONFIG_ROOT=[${AIDE_CONFIG_ROOT}] KDC_IP=[${KDC_IP}] REALM=[${REALM}] SCAN_USER=[${SCAN_USER}]"Le variabili esistono solo nella sessione corrente della shell. Se apri una nuova shell, dovrai impostarle nuovamente.
-
-
Crea il file di configurazione Kerberos sull'esportazione NFS. AI Data Engine legge questo file dall'esportazione. Non crearlo in
/etc/krb5.confsui nodi.tee "${KRB5_CONF_SOURCE}" >/dev/null <<EOF [libdefaults] default_realm = ${REALM} dns_lookup_realm = false dns_lookup_kdc = false rdns = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true [realms] ${REALM} = { kdc = ${KDC_IP}:88 admin_server = ${KDC_IP}:749 } [domain_realm] .${AD_DOMAIN} = ${REALM} ${AD_DOMAIN} = ${REALM} EOF chmod 644 "${KRB5_CONF_SOURCE}"Il file utilizza l'indirizzo IP del KDC in modo che l'autenticazione Kerberos non dipenda dal DNS.
-
Crea un file keytab per l'account del servizio di scansione.
-
Esegui
ktutil. -
Al
ktutil`prompt, inserisci il seguente comando. Sostituisci `<scan_user>e<REALM>con i tuoi valori. Il `ktutil`prompt non utilizza le variabili di shell.addent -password -p <scan_user>@<REALM> -k 1 -e aes256-cts-hmac-sha1-96 -
Quando `ktutil`ti chiede una password, inserisci la password dell'utente di scansione.
-
Al
ktutilprompt, inserisci i seguenti comandi.wkt /tmp/krb5.keytab quit
-
-
Verifica il file keytab. La
KRB5_CONFIGvariabile indirizza gli strumenti Kerberos al file nell'export.export KRB5_CONFIG="${KRB5_CONF_SOURCE}" klist -kt /tmp/krb5.keytab kinit -kt /tmp/krb5.keytab "${SCAN_USER}@${REALM}" klist kdestroyIl secondo
klistcomando deve mostrare un ticket valido per l'utente di scansione. Un ticket conferma che il keytab e la connessione al KDC funzionano. Sekinitnon riesce, fai riferimento a Risoluzione dei problemi di autenticazione Kerberos. -
Installa il file keytab, quindi elimina la copia temporanea.
install -m 640 -g 4321 /tmp/krb5.keytab "${KRB5_KEYTAB}" rm -f /tmp/krb5.keytab -
Rendi la directory della cache dei ticket scrivibile per il sistema di aggiornamento dei ticket.
chown root:4321 "${AIDE_CONFIG_ROOT}/kerberos/kerberos_ccache" chmod 770 "${AIDE_CONFIG_ROOT}/kerberos/kerberos_ccache"Il programma di aggiornamento dei ticket viene eseguito come utente root con ID di gruppo 4321. Deve poter leggere il file keytab e il file principal, e deve poter scrivere nella directory della cache dei ticket.
-
Crea il file principal. Il
KRB5_RENEW_INTERVAL_Hvalore corrisponde all'intervallo di rinnovo del ticket in ore.tee "${KRB5_CREDS}" >/dev/null <<EOF KRB5_USER=${SCAN_USER} KRB5_REALM=${REALM} KRB5_RENEW_INTERVAL_H=3 EOF chmod 640 "${KRB5_CREDS}" chgrp 4321 "${KRB5_CREDS}" -
Verifica che i file siano nella posizione corretta.
ls -l "${KRB5_CONF_SOURCE}" "${KRB5_KEYTAB}" "${KRB5_CREDS}"
Verifica la risoluzione dei nomi
AI Data Engine risolve il file server e il KDC utilizzando le impostazioni DNS di ciascun nodo. Verifica prima la risoluzione dei nomi e modifica le impostazioni DNS solo se un nome non si risolve su un nodo.
-
Su ogni nodo, verifica che il file server e il KDC vengano risolti tramite FQDN. Sostituisci i valori con l'FQDN del tuo file server e l'FQDN del tuo KDC.
nslookup <file_server_fqdn> nslookup <kdc_fqdn> -
Verifica il risultato.
-
Se entrambi i nomi si risolvono negli indirizzi IP corretti su ogni nodo, continua con Avvia il primo aggiornamento del ticket.
-
Se un nome non viene risolto su alcun nodo, completa Correggi la risoluzione dei nomi, quindi torna a questa procedura.
-
Avvia il primo aggiornamento del ticket
AI Data Engine aggiorna il ticket Kerberos per l'account del servizio di scansione ogni tre ore. Avvia il primo aggiornamento per poter iniziare subito la scansione delle condivisioni.
|
|
Non aggiungere una kinit voce al crontab dell'host. AI Data Engine aggiorna automaticamente i ticket.
|
-
Sull'admin host, avvia un job di refresh, attendi che venga completato e visualizzane il log.
JOB="kerberos-refresh-$(date +%s)" kubectl -n "${NAMESPACE}" create job "${JOB}" --from=cronjob/ds-krb5-ticket-refresher kubectl -n "${NAMESPACE}" wait --for=condition=complete "job/${JOB}" --timeout=120s kubectl -n "${NAMESPACE}" logs "job/${JOB}" -
Verifica che la cache condivisa dei ticket esista e abbia un timestamp recente.
ls -l "${AIDE_CONFIG_ROOT}/kerberos/kerberos_ccache/krb5cc_shared"
Il log del job mostra che è stato acquisito un ticket per l'utente di scansione.
Verifica la configurazione di Kerberos
Prima di aggiungere la condivisione, verifica che AI Data Engine possa utilizzare i file Kerberos e risolvere i nomi. Poiché il servizio di montaggio può essere eseguito su più nodi, ripeti i controlli per un pod su ciascun nodo. Se hai aperto una nuova shell, imposta nuovamente le variabili NAMESPACE, FILE_SERVER_FQDN e SHARE_NAME.
-
Elenca i pod del servizio di mount e i nodi su cui vengono eseguiti.
kubectl -n "${NAMESPACE}" get pods -l app.kubernetes.io/name=ds-mount-server -o wide -
Per ogni pod, esegui i seguenti comandi. Sostituisci
<pod_name>con il nome del pod.POD=<pod_name> kubectl -n "${NAMESPACE}" exec "${POD}" -- nslookup "${FILE_SERVER_FQDN}" kubectl -n "${NAMESPACE}" exec "${POD}" -- klist kubectl -n "${NAMESPACE}" exec "${POD}" -- cat /etc/krb5.conf -
(Facoltativo) Verifica il montaggio della condivisione utilizzando Kerberos.
kubectl -n "${NAMESPACE}" exec "${POD}" -- sh -c "mount -t cifs -o sec=krb5,multiuser //${FILE_SERVER_FQDN}/${SHARE_NAME} /mnt && ls -l /mnt && umount /mnt"
Su ogni nodo, il file server risolve l'indirizzo IP corretto, klist mostra un ticket per l'utente di scansione e /etc/krb5.conf mostra il contenuto del file di configurazione Kerberos.
Aggiungi un'origine dati SMB/CIFS che utilizza Kerberos
Aggiungi la condivisione come origine dati e avvia le scansioni in modo che AI Data Engine possa iniziare ad analizzare i dati.
-
Dall'interfaccia di AI Data Engine, seleziona Configurazione.
-
Nella scheda Sistemi scansionati, seleziona Aggiungi sistema.
-
Seleziona File shares group.
-
Inserisci un nome per il gruppo.
-
Inserisci il percorso di condivisione nel formato
<file_server_fqdn>/<share_name>. Sostituisci i segnaposto con i tuoi valori. Non usare un indirizzo IP. -
Per il metodo di autenticazione, seleziona Kerberos. Lascia vuoti i campi nome utente e password.
-
Rivedi le tue selezioni e seleziona Conferma.
-
Seleziona Attiva scansioni per il nuovo sistema.
Per ulteriori informazioni su come collegare le origini dati, consulta "Collega un'origine dati ad AI Data Engine".
Correggi la risoluzione dei nomi
Completa questa procedura solo se, su un nodo, il file server o il KDC non si risolvono tramite FQDN. Imposta il tuo DNS server Active Directory come unico name server su ogni nodo.
|
|
Rendi il tuo DNS server Active Directory l'unico name server su ogni nodo. Il cluster sceglie casualmente uno dei name server elencati, quindi un name server che non riesce a risolvere i nomi di Active Directory causa errori intermittenti. |
-
Verifica che il tuo DNS server di Active Directory risolva anche i nomi esterni.
-
Esegui il seguente comando. Sostituisci
<external_fqdn>con un nome esterno al tuo dominio che AI Data Engine deve raggiungere. Ad esempio, usa un endpoint elencato in "Accesso Internet outbound".nslookup <external_fqdn> "${KDC_IP}" -
Se il comando non riesce, chiedi all'amministratore di Active Directory di abilitare l'inoltro DNS e poi ripeti questo passaggio.
-
-
Su ogni nodo, esegui il backup
/etc/resolv.confe imposta il tuo DNS server di Active Directory come unico name server. Se apri una nuova shell su un nodo, imposta di nuovo la variabileKDC_IP.export KDC_IP="<kdc_ip>" cp /etc/resolv.conf /etc/resolv.conf.bak ORIG_SEARCH=$(grep '^search' /etc/resolv.conf.bak | head -1 | cut -d' ' -f2-) printf 'search %s\nnameserver %s\n' "${ORIG_SEARCH}" "${KDC_IP}" > /etc/resolv.conf -
Su ogni nodo, impedisci al gestore di rete di sovrascrivere le impostazioni DNS dopo un riavvio.
-
Su RHEL con NetworkManager, esegui i seguenti comandi.
mkdir -p /etc/NetworkManager/conf.d printf '[main]\ndns=none\n' > /etc/NetworkManager/conf.d/90-dns-none.conf systemctl reload NetworkManager -
Su Ubuntu con systemd-resolved, esegui i seguenti comandi. Sostituisci
<domain>con il tuo dominio.export AD_DOMAIN="<domain>" mkdir -p /etc/systemd/resolved.conf.d printf '[Resolve]\nDNS=%s\nDomains=%s\n' "${KDC_IP}" "${AD_DOMAIN}" > /etc/systemd/resolved.conf.d/ad-dns.conf systemctl restart systemd-resolved
-
-
Dall'admin host, riavvia CoreDNS in modo che AI Data Engine utilizzi le nuove impostazioni DNS. Esegui questo passaggio una sola volta per il cluster. CoreDNS inoltra le query per i nomi esterni al cluster ai name server nel
/etc/resolv.conffile del nodo, quindi deve essere riavviato per recepire la modifica.-
Individua l'implementazione di CoreDNS.
kubectl -n kube-system get deployments | grep -i coredns -
Riavvia la distribuzione. Sostituisci
<coredns_deployment>con il nome del comando precedente.kubectl -n kube-system rollout restart deployment <coredns_deployment> kubectl -n kube-system rollout status deployment <coredns_deployment> --timeout=120s
-
-
Verifica nuovamente la risoluzione dei nomi. Fai riferimento a Verifica la risoluzione dei nomi.
Aggiorna il file di configurazione di Kerberos
Se sostituisci krb5.conf nell'esportazione NFS dopo la configurazione, ad esempio copiandovi sopra un nuovo file, AI Data Engine continua a usare il file precedente finché non riavvii i servizi interessati.
-
Sull'admin host, riavvia il servizio di montaggio ed elimina i precedenti processi di aggiornamento dei ticket.
kubectl -n "${NAMESPACE}" rollout restart daemonset ds-mount-server kubectl -n "${NAMESPACE}" delete job -l app.kubernetes.io/name=ds-krb5-ticket-refresher --ignore-not-found -
Avvia un nuovo aggiornamento del ticket. Fai riferimento a Avvia il primo aggiornamento del ticket.
Risoluzione dei problemi di autenticazione Kerberos
Individua la causa di un errore Kerberos e ripristina la scansione delle tue condivisioni SMB/CIFS.
| Sintomo | Possibile causa | Risoluzione |
|---|---|---|
L'errore IP non consentito con Kerberos compare quando aggiungi una condivisione. |
Il percorso di condivisione utilizza un indirizzo IP. |
Inserisci il percorso di condivisione come FQDN. |
|
La password o il realm non sono corretti, il realm non è in maiuscolo, l'account di scansione non supporta la crittografia AES256, l'admin host o un nodo non riesce a raggiungere il KDC sulla porta 88 oppure l'orologio di un nodo differisce da quello del KDC di una quantità superiore allo scarto consentito. |
Verifica la password e il realm e conferma che l'account supporti la crittografia AES256. Apri la porta 88 verso il KDC e verifica che NTP sia attivo su ogni nodo. Quindi crea nuovamente il keytab. |
L'operazione di aggiornamento del ticket non riesce oppure non viene creata alcuna cache dei ticket. |
Il file keytab, il file principal o |
Verifica che i file esistano nelle posizioni elencate in File Kerberos utilizzati da AI Data Engine. Verifica che il file keytab e il file del principal abbiano i permessi 640 e il gruppo 4321. Verifica che la directory della cache dei ticket sia di proprietà di |
A volte i nomi non vengono risolti, oppure vengono risolti su un nodo ma non all'interno di AI Data Engine. |
Un nodo elenca più di un name server e uno di essi non riesce a risolvere i nomi di Active Directory oppure CoreDNS non è stato riavviato dopo che hai modificato |
Rimuovi tutti i name server tranne il tuo DNS server Active Directory su ogni nodo e riavvia CoreDNS. Fai riferimento a Correggi la risoluzione dei nomi. |
I nomi esterni non vengono risolti all'interno di AI Data Engine dopo che hai impostato il tuo Active Directory DNS server. |
Il DNS server Active Directory non inoltra le query esterne. |
Verifica che |
La scansione Kerberos funziona da un nodo ma non dagli altri. Viene visualizzato l'errore mount error(2) e |
|
Installa |
Compare l'errore mount error(126). |
AI Data Engine non riesce a leggere |
Verifica che |
Le modifiche a |
Il file è stato sostituito dopo l'installazione e AI Data Engine continua a utilizzare il file precedente. |
Fai riferimento a Aggiorna il file di configurazione di Kerberos. |
Il comando |
Gli strumenti client Kerberos non sono installati sull'admin host. |
Installa gli strumenti client Kerberos. Fai riferimento a Installa i pacchetti necessari. |
Il |
Il gestore di rete sovrascrive il file. |
Impedisci al gestore di rete di sovrascrivere le impostazioni DNS. Fai riferimento a Correggi la risoluzione dei nomi. |
Rimuovi la configurazione Kerberos
Se non esegui più la scansione delle condivisioni SMB/CIFS con Kerberos, rimuovi l'origine dati e i file Kerberos.
-
Dall'interfaccia utente di AI Data Engine, elimina l'origine dati SMB/CIFS che utilizza Kerberos.
-
Sull'admin host, con l'esportazione NFS montata in
/mnt/aide-config, elimina i file Kerberos.rm -f /mnt/aide-config/kerberos/kerberos_refresher/datasense.keytab rm -f /mnt/aide-config/kerberos/kerberos_refresher/kerberos_creds.env rm -f /mnt/aide-config/kerberos/krb5.conf rm -f /mnt/aide-config/kerberos/kerberos_ccache/krb5cc_shared umount /mnt/aide-config -
Se hai modificato le impostazioni DNS, ripristina le impostazioni originali.
-
Su ogni nodo, ripristina il backup di
/etc/resolv.conf.cp /etc/resolv.conf.bak /etc/resolv.conf -
Sui nodi RHEL in cui hai aggiunto una configurazione di NetworkManager, rimuovila.
rm -f /etc/NetworkManager/conf.d/90-dns-none.conf systemctl reload NetworkManager -
Sui nodi Ubuntu in cui hai aggiunto una configurazione systemd-resolved, rimuovila.
rm -f /etc/systemd/resolved.conf.d/ad-dns.conf systemctl restart systemd-resolved -
Dall'admin host, riavvia CoreDNS. Sostituisci
<coredns_deployment>con il nome del deployment di CoreDNS.kubectl -n kube-system rollout restart deployment <coredns_deployment>
-