Quando crei un cluster Managed Service for Apache Spark, puoi abilitare la modalità protetta di Hadoop tramite Kerberos per fornire la multi-tenancy tramite l'autenticazione, l'isolamento e la crittografia degli utenti all'interno di un cluster Managed Service for Apache Spark.
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 Google Cloud , come Cloud Storage, continuano a essere autenticate come account di servizio per il cluster.
Abilita la modalità protetta di Hadoop utilizzando Kerberos
L'abilitazione 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 utilizzarla per l'autenticazione.
L'attivazione di Kerberos crea un Key Distribution Center (KDC) sul cluster, che contiene le entità di servizio e un'entità root. L'entità root è l'account con autorizzazioni di amministratore per il KDC sul cluster. Può anche contenere entità utente standard o essere connesso tramite trust tra realm a un altro KDC contenente le entità utente.
Crea un cluster Kerberos
Configura la password del principal root Kerberos, quindi crea un cluster.
Configura la password dell'entità radice Kerberos
L'entità root Kerberos è l'account con autorizzazioni di amministratore per il KDC sul cluster. Per fornire in modo sicuro la password per l'entità root Kerberos, gli utenti possono criptarla con una chiave di Key Management Service (KMS) e poi archiviarla 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 ruolo IAM cloudkms.cryptoKeyDecrypter.
Concedi il ruolo Cloud KMS CryptoKey Encrypter/Decrypter al service account del cluster:
gcloud projects add-iam-policy-binding project-id \ --member serviceAccount:project-number-compute@ \ --role roles/cloudkms.cryptoKeyDecrypter
Crea chiavi automatizzate:
gcloud kms keyrings create my-keyring --location global
Crea una chiave nelle chiavi automatizzate:
gcloud kms keys create my-key \ --location global \ --keyring my-keyring \ --purpose encryption
Cripta la password dell'entità root 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 Google Cloud CLI, l'API Dataproc o la consoleGoogle Cloud per abilitare Kerberos sui cluster che utilizzano Managed Service for Apache Spark versione immagine 1.3e versioni successive.
ConsoleGoogle Cloud
- Apri la pagina Crea cluster.
- Fai clic su Configurazione aggiuntiva per espandere la sezione.
- Modifica Sicurezza.
- Nel riquadro che si apre, in Kerberos, seleziona Abilita, quindi fornisci la password e le informazioni sulla chiave (per ulteriori informazioni, consulta le sezioni seguenti).
Comando gcloud CLI
Per creare un cluster Managed Service for Apache Spark 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 (consulta Certificati SSL, Impostazioni Kerberos aggiuntive e Trust tra realm 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
gcloudper 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. Managed Service for Apache Spark elimina la forma decriptata della password dopo aver aggiunto l'entità root 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, nonché di rimuovere il service account dal ruolo kmsKeyDecrypter. Non farlo se prevedi di fare lo scale up del cluster, che richiede il file e la chiave della password e il ruolo del account di servizio.
API REST
I cluster Kerberos possono essere creati tramite
ClusterConfig.SecurityConfig.KerberosConfig
come parte di una richiesta
clusters.create. Imposta enableKerberos su true e imposta i campi rootPrincipalPasswordUri e kmsKeyUri.
OS Login
La gestione del KDC sul 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 di super utente.
Certificati SSL
Nell'ambito dell'attivazione della modalità Hadoop Secure, Managed Service for Apache Spark crea un certificato autofirmato per attivare 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: la posizione in Cloud Storage del file criptato con KMS contenente la password del file dell'archivio chiavi.ssl:key_password_uri: la posizione in Cloud Storage del file criptato con KMS contenente la password della chiave nel file dell'archivio chiavi.ssl:keystore_uri: la posizione in Cloud Storage del file dell'archivio chiavi contenente il certificato con carattere jolly e la chiave privata utilizzata dai nodi del cluster.ssl:truststore_password_uri: la 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 dell'archivio di attendibilità 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 Kerberos:
realm: il nome del realm Kerberos on-cluster.
Se questa proprietà non è impostata, il dominio dei nomi host (in lettere maiuscole) sarà il realm.
Per specificare la chiave master del database KDC, crea un cluster Kerberos con la seguente proprietà aggiunta nel file di configurazione 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, Managed Service for Apache Spark genererà la chiave master.
Per specificare la durata massima del ticket granting ticket (in ore), crea un cluster Kerberos con la seguente proprietà aggiunta nel file di configurazione di Kerberos:
tgt_lifetime_hours: durata massima del Ticket Granting Ticket (TGT) in ore.
Se questa proprietà non è impostata, Managed Service for Apache Spark imposterà la durata del ticket di concessione del ticket su 10 ore.
Trust tra realm
Inizialmente, il KDC sul cluster contiene solo l'entità amministratore root e le entità di servizio. Puoi aggiungere entità utente manualmente o stabilire un trust tra realm con un KDC esterno o un server di directory Active Directory contenente le entità utente. Per connettersi a un KDC/Active Directory on-premise, è consigliato l'utilizzo di Cloud VPN o Cloud Interconnect.
Per creare un cluster Kerberos che supporti il trust tra realm, 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 il account di servizio 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 per un KDC remoto, segui questi passaggi:
Aggiungi quanto segue al file
/etc/krb5.confnel 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 ai contenuti del file delle password condivise criptato
Per abilitare il trust tra realm con Active Directory, esegui questi comandi in PowerShell come amministratore:
Crea una definizione KDC in Active Directory.
ksetup /addkdc DATAPROC.REALM DATAPROC-CLUSTER-MASTER-NAME-OR-ADDRESS
Crea un trust in Active Directory.
La password deve corrispondere ai contenuti del file della password condivisa criptato.netdom trust DATAPROC.REALM /Domain AD.REALM /add /realm /passwordt:TRUST-PASSWORD
dataproc entità
Quando invii un job utilizzando l'API dei job di Managed Service for Apache Spark a un cluster Kerberos di Managed Service for Apache Spark, viene eseguito come entità Kerberos dataproc dal realm Kerberos del cluster.
La multi-tenancy è supportata all'interno di un cluster Kerberos di Managed Service for Apache Spark se invii un job direttamente al cluster, ad esempio utilizzando SSH. Tuttavia, se il job legge o scrive in altri servizi Google Cloud , come Cloud Storage, agisce come service account del cluster.
Proprietà del cluster predefinite e personalizzate
La modalità protetta di Hadoop è configurata con proprietà nei file di configurazione. Managed Service for Apache Spark imposta i valori predefiniti per queste proprietà.
Puoi eseguire l'override delle 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 affidabilità
In modalità ad alta affidabilità (HA), un cluster Kerberos avrà tre KDC: uno su ogni master. Il KDC in esecuzione sul "primo" master ($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 principale non è attivo. Per eseguire un failover manuale:
- Su tutte le macchine KDC, in
/etc/krb5.conf, cambiaadmin_servercon l'FQDN (nome di dominio completo) del nuovo master. Rimuovi il vecchio master dall'elenco KDC. - Sul nuovo KDC master, configura un cron job 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 worker 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 affidabilità, assicurati che le regole firewall VPC consentano il traffico TCP in entrata sulla porta 754 dei master per consentire la propagazione delle modifiche apportate al KDC master. Kerberos richiede che il DNS inverso sia configurato correttamente. Inoltre, per la canonicalizzazione dell'entità servizio basata su host, assicurati che il DNS inverso sia configurato correttamente per la rete del cluster.
Passaggi successivi
- Consulta la documentazione relativa a Kerberos MIT.