Quando crei un cluster Dataproc, puoi abilitare la modalità protetta di Hadoop tramite Kerberos per fornire multi-tenancy tramite autenticazione degli utenti, isolamento e crittografia all'interno di un cluster Dataproc.
Autenticazione utente e altri servizi della piattaforma Google Cloud. L'autenticazione per utente tramite Kerberos si applica solo all'interno del cluster. Le interazioni con altri servizi, come Cloud Storage, continuano a essere autenticate come l'account di servizio per il cluster. Google Cloud
Abilita la modalità protetta di Hadoop utilizzando Kerberos
L'attivazione della modalità protetta di Kerberos e Hadoop per un cluster includerà la distribuzione MIT di Kerberos e configurerà Apache Hadoop YARN, HDFS, Hive, Spark e i componenti correlati per utilizzarlo per l'autenticazione.
L'attivazione di Kerberos crea un Key Distribution Center (KDC) on-cluster, che contiene entità di servizio e un'entità radice. L'entità principale root è l'account con autorizzazioni di amministratore per il KDC on-cluster. Può anche contenere entità utente standard o essere connesso tramite trust tra i realm a un altro KDC che contiene le entità utente.
Crea un cluster Kerberos
Puoi utilizzare Google Cloud CLI, l'API Dataproc o la consoleGoogle Cloud per attivare Kerberos sui cluster che utilizzano la versione 1.3 e successive dell'immagine Dataproc .
Comando g-cloud
Per configurare automaticamente un nuovo cluster Dataproc Kerberos (versione immagine
1.3 e successive), utilizza il comando gcloud dataproc clusters create
.
gcloud dataproc clusters create cluster-name \ --image-version=2.0 \ --enable-kerberos
Proprietà del cluster: anziché utilizzare il flag --enable-kerberos
come mostrato nell'esempio precedente, puoi configurare automaticamente Kerberos passando il flag --properties "dataproc:kerberos.beta.automatic-config.enable=true"
al comando di creazione dei cluster (vedi Proprietà del servizio Dataproc).
API REST
I cluster Kerberos possono essere creati tramite
ClusterConfig.SecurityConfig.KerberosConfig
nell'ambito di una richiesta
clusters.create. Devi impostare enableKerberos
su true
.
Console
Puoi configurare automaticamente Kerberos su un nuovo cluster selezionando "Attiva" nella sezione Kerberos e modalità protetta di Hadoop del pannello Gestisci sicurezza nella pagina Crea un cluster della console Google Cloud .
Crea un cluster Kerberos con la tua password dell'entità radice
Configura la password dell'entità radice Kerberos, quindi crea un cluster.
Configurare la password dell'entità principale root Kerberos
L'entità principale root Kerberos è l'account
con autorizzazioni di amministratore per il KDC on-cluster. Per fornire in modo sicuro la
password per l'entità principale root Kerberos, gli utenti possono criptarla con una
chiave Key Management Service (KMS) e poi
memorizzarla in un bucket Google Cloud Storage a cui
può accedere il service account
del cluster. Al account di servizio del cluster deve essere concesso il
cloudkms.cryptoKeyDecrypter
ruolo IAM.
Concedi il ruolo Autore crittografia/decrittografia CryptoKey Cloud KMS al service account del cluster:
gcloud projects add-iam-policy-binding project-id \ --member serviceAccount:project-number[email protected] \ --role roles/cloudkms.cryptoKeyDecrypter
Crea chiavi automatizzate:
gcloud kms keyrings create my-keyring --location global
Crea una chiave nel keyring:
gcloud kms keys create my-key \ --location global \ --keyring my-keyring \ --purpose encryption
Cripta la password dell'entità radice Kerberos:
echo "my-password" | \ gcloud kms encrypt \ --location=global \ --keyring=my-keyring \ --key=my-key \ --plaintext-file=- \ --ciphertext-file=kerberos-root-principal-password.encrypted
- Carica la password criptata in un
bucket Cloud Storage nel tuo progetto.
- Esempio:
gcloud storage cp kerberos-root-principal-password.encrypted gs://my-bucket
- Esempio:
- Carica la password criptata in un
bucket Cloud Storage nel tuo progetto.
Crea il cluster
Puoi utilizzare il comando gcloud
o l'API Dataproc per
attivare Kerberos sui cluster con la tua password principale root.
Comando g-cloud
Per creare un cluster Dataproc Kerberos (versione immagine
1.3 e successive), utilizza il comando gcloud dataproc clusters create
.
gcloud dataproc clusters create cluster-name \ --region=region \ --image-version=2.0 \ --kerberos-root-principal-password-uri=gs://my-bucket/kerberos-root-principal-password.encrypted \ --kerberos-kms-key=projects/project-id/locations/global/keyRings/my-keyring/cryptoKeys/my-key
Utilizza un file di configurazione YAML (o JSON). Anziché passare i flag kerberos-*
al comando gcloud
come mostrato sopra, puoi inserire le impostazioni Kerberos in un file di configurazione YAML (o JSON), quindi fare riferimento al file di configurazione per creare il cluster Kerberos.
- Crea un file di configurazione (vedi
Certificati SSL,
Impostazioni Kerberos aggiuntive e
Trust tra domini
per ulteriori impostazioni di configurazione che possono essere incluse nel file):
root_principal_password_uri: gs://my-bucket/kerberos-root-principal-password.encrypted kms_key_uri: projects/project-id/locations/global/keyRings/mykeyring/cryptoKeys/my-key
- Utilizza il seguente comando
gcloud
per creare il cluster Kerberos:gcloud dataproc clusters create cluster-name \ --region=region \ --kerberos-config-file=local path to config-file \ --image-version=2.0
Considerazioni sulla sicurezza. Dataproc elimina
la forma decrittografata della password dopo aver aggiunto l'entità radice al KDC.
Per motivi di sicurezza, dopo aver creato il cluster puoi decidere di eliminare il file della password e la chiave utilizzata per decriptare il secret e rimuovere l'account di servizio dal ruolo kmsKeyDecrypter
. Non farlo se prevedi
di scalare il cluster, il che richiede il file della password e la chiave, nonché
il ruolo dell'account di servizio.
API REST
I cluster Kerberos possono essere creati tramite
ClusterConfig.SecurityConfig.KerberosConfig
nell'ambito di una richiesta
clusters.create. Imposta enableKerberos
su true e imposta i campi rootPrincipalPasswordUri
e kmsKeyUri
.
Console
Quando crei un cluster con la versione dell'immagine 1.3 o successive, seleziona "Attiva" nella sezione Kerberos e modalità protetta di Hadoop del pannello Gestisci sicurezza nella pagina Crea un cluster di Dataproc della console Google Cloud , poi completa le opzioni di sicurezza (descritte nelle sezioni seguenti).
OS Login
La gestione KDC nel cluster può essere eseguita con il comando kadmin
utilizzando l'entità utente Kerberos root o sudo kadmin.local
.
Attiva OS Login
per controllare chi può eseguire i comandi superuser.
Certificati SSL
Nell'ambito dell'attivazione della modalità protetta di Hadoop, Dataproc crea un certificato autofirmato per abilitare la crittografia SSL del cluster. In alternativa, puoi fornire un certificato per la crittografia SSL del cluster aggiungendo le seguenti impostazioni al file di configurazione quando crei un cluster Kerberos:
ssl:keystore_password_uri
: posizione in Cloud Storage del file criptato con KMS contenente la password del file archivio chiavi.ssl:key_password_uri
: posizione in Cloud Storage del file criptato con KMS contenente la password della chiave nel file archivio chiavi.ssl:keystore_uri
: posizione in Cloud Storage del file dell'archivio chiavi contenente il certificato con caratteri jolly e la chiave privata usata dai nodi del cluster.ssl:truststore_password_uri
: posizione in Cloud Storage del file criptato con KMS contenente la password del file dell'archivio attendibilità.ssl:truststore_uri
: posizione in Cloud Storage del file truststore contenente i certificati attendibili.
File di configurazione di esempio:
root_principal_password_uri: gs://my-bucket/kerberos-root-principal-password.encrypted kms_key_uri: projects/project-id/locations/global/keyRings/mykeyring/cryptoKeys/my-key ssl: key_password_uri: gs://bucket/key_password.encrypted keystore_password_uri: gs://bucket/keystore_password.encrypted keystore_uri: gs://bucket/keystore.jks truststore_password_uri: gs://bucket/truststore_password.encrypted truststore_uri: gs://bucket/truststore.jks
Impostazioni Kerberos aggiuntive
Per specificare un realm Kerberos, crea un cluster Kerberos con la seguente proprietà aggiunta nel file di configurazione di Kerberos:
realm
: il nome del realm Kerberos sul cluster.
Se questa proprietà non è impostata, il dominio dei nomi host (in maiuscolo) sarà il realm.
Per specificare la chiave master del database KDC, crea un cluster Kerberos con la seguente proprietà aggiunta nel file di configurazione di Kerberos:
kdc_db_key_uri
: posizione in Cloud Storage del file criptato con KMS contenente la chiave master del database KDC.
Se questa proprietà non è impostata, Dataproc genererà la chiave master.
Per specificare la durata massima (in ore) del ticket di concessione dei ticket, crea un cluster Kerberos con la seguente proprietà aggiunta nel file di configurazione di Kerberos:
tgt_lifetime_hours
: durata massima del Ticket Granting Ticket in ore.
Se questa proprietà non è impostata, Dataproc imposterà la durata del ticket di concessione del ticket su 10 ore.
Trust tra aree di autenticazione
Il KDC sul cluster inizialmente contiene solo l'entità amministratore root e le entità servizio. Puoi aggiungere entità utente manualmente o stabilire un trust tra i realm con un KDC esterno o un server Active Directory contenente le entità utente. Ti consigliamo di usare Cloud VPN o Cloud Interconnect per connetterti a un KDC/Active Directory on-premise.
Per creare un cluster Kerberos che supporti l'attendibilità tra domini, aggiungi le seguenti impostazioni al file di configurazione di Kerberos quando crei un cluster Kerberos. Cripta la password condivisa con KMS e archiviala in un bucket Cloud Storage a cui può accedere iaccount di serviziont del cluster.
cross_realm_trust:admin_server
: nome host o indirizzo del server di amministrazione remotocross_realm_trust:kdc
: nome host o indirizzo del KDC remotocross_realm_trust:realm
: il nome del realm remoto da considerare attendibilecross_realm_trust:shared_password_uri
: posizione in Cloud Storage della password condivisa criptata con KMS
File di configurazione di esempio:
root_principal_password_uri: gs://my-bucket/kerberos-root-principal-password.encrypted kms_key_uri: projects/project-id/locations/global/keyRings/mykeyring/cryptoKeys/my-key cross_realm_trust: admin_server: admin.remote.realm kdc: kdc.remote.realm realm: REMOTE.REALM shared_password_uri: gs://bucket/shared_password.encrypted
Per abilitare il trust tra realm in un KDC remoto:
Aggiungi quanto segue al file
/etc/krb5.conf
nel KDC remoto:[realms] DATAPROC.REALM = { kdc = MASTER-NAME-OR-ADDRESS admin_server = MASTER-NAME-OR-ADDRESS }
Crea l'utente trust:
kadmin -q "addprinc krbtgt/DATAPROC.REALM@REMOTE.REALM"
Quando richiesto, inserisci la password dell'utente. La password deve corrispondere al contenuto del file della password condivisa criptata
Per abilitare l'attendibilità tra domini con Active Directory, esegui i seguenti comandi in PowerShell come amministratore:
Crea una definizione KDC in Active Directory.
ksetup /addkdc DATAPROC.REALM DATAPROC-CLUSTER-MASTER-NAME-OR-ADDRESS
Crea una relazione di trust in Active Directory.
La password deve corrispondere ai contenuti del file della password condivisa criptata.netdom trust DATAPROC.REALM /Domain AD.REALM /add /realm /passwordt:TRUST-PASSWORD
dataproc
entità
Quando invii un job utilizzando l'API jobs di Dataproc a un cluster Dataproc Kerberos, questo viene eseguito come principal Kerberos dataproc
dal realm Kerberos del cluster.
La multi-tenancy è supportata all'interno di un cluster Kerberos Dataproc se invii un job direttamente al cluster, ad esempio utilizzando SSH. Tuttavia, se il job legge o scrive in altri Google Cloud servizi, come Cloud Storage, il job funge da service account del cluster.
Proprietà del cluster predefinite e personalizzate
La modalità protetta di Hadoop è configurata con le proprietà nei file di configurazione. Dataproc imposta i valori predefiniti per queste proprietà.
Puoi ignorare le proprietà predefinite quando crei il cluster con il
flag gcloud dataproc clusters create
--properties
o chiamando l'API clusters.create e impostando
le proprietà SoftwareConfig (vedi
esempi di proprietà del cluster).
Modalità ad alta disponibilità
In modalità ad alta disponibilità (HA),
un cluster Kerberos avrà tre KDC: uno su ogni master. Il KDC in esecuzione sul
master "primo" ($CLUSTER_NAME-m-0
) sarà il KDC master e fungerà anche da server di amministrazione.
Il database del KDC master verrà sincronizzato con i due KDC di replica a intervalli di 5 minuti tramite un cron job e i tre KDC gestiranno il traffico di lettura.
Kerberos non supporta in modo nativo la replica in tempo reale o il failover automatico se il KDC master non è disponibile. Per eseguire un failover manuale:
- Su tutti i computer KDC, in
/etc/krb5.conf
, modificaadmin_server
con il nuovo FQDN (Fully Qualified Domain Name) del master. Rimuovi il vecchio master dall'elenco KDC. - Sul nuovo KDC master, configura un job cron per propagare il database.
- Sul nuovo KDC master, riavvia il processo admin_server (
krb5-admin-server
). - Su tutte le macchine KDC, riavvia il processo KDC (
krb5-kdc
).
Configurazione di rete
Per assicurarti che i nodi di lavoro possano comunicare con il KDC e il server di amministrazione Kerberos in esecuzione sul master, verifica che le regole firewall VPC consentano il traffico TCP e UDP in entrata sulla porta 88 e il traffico TCP in entrata sulla porta 749 sul master. In modalità ad alta disponibilità, assicurati che le regole firewall VPC consentano il traffico TCP in entrata sulla porta 754 sui nodi master per consentire la propagazione delle modifiche apportate al KDC master. Kerberos richiede che il DNS inverso sia configurato correttamente. Inoltre, per la canonizzazione del service principal basata sull'host, assicurati che il DNS inverso sia configurato correttamente per la rete del cluster.
Passaggi successivi
- Consulta la documentazione di MIT Kerberos.