Configurazione di sicurezza Dataproc

Quando crei un cluster Dataproc, puoi abilitare la modalità protetta di Hadoop tramite Kerberos per fornire il multitenancy 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 Google Cloud, come Cloud Storage, continueranno a essere autenticate come account di servizio per il cluster.

Attivazione della modalità protetta di Hadoop tramite Kerberos

L'abilitazione della modalità protetta di Kerberos e Hadoop per un cluster includerà il parametro Distribuzione MIT di Kerberos e configura Apache Hadoop YARN, HDFS Hive, Spark e componenti correlati per utilizzarlo per l'autenticazione.

L'attivazione di Kerberos crea un centro di distribuzione chiavi (KDC) on-cluster che contiene entità di servizio e un'entità radice. Il principale principale è l'account con autorizzazioni di amministratore per il KDC nel cluster. Può contenere anche a entità utente standard o tramite attendibilità cross-realm a un altro KDC contenente l'utente tra cui scegliere.

Crea un cluster Kerberos

Puoi utilizzare Google Cloud CLI, l'API Dataproc o la console Google Cloud per attivare Kerberos sui cluster che utilizzano la versione dell'immagine 1.3 di Dataproc e versioni successive.

Comando g-cloud

Per configurare automaticamente un nuovo cluster Dataproc Kerberos (versione immagine) 1.3 e versioni successive), utilizza il comando gcloud dataproc clusters create.

gcloud dataproc clusters create cluster-name \
    --image-version=2.0 \
    --enable-kerberos

Proprietà del cluster: invece di utilizzare il flag --enable-kerberos come mostrato sopra, puoi configurare automaticamente Kerberos passando il flag --properties "dataproc:kerberos.beta.automatic-config.enable=true" al comando create clusters (vedi Proprietà dei servizi 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 Modalità protetta di Kerberos e Hadoop del riquadro Gestisci la sicurezza nella pagina Dataproc Crea un cluster della console Google Cloud.

Creare un cluster Kerberos con la password dell'entità principale radice

Segui i passaggi riportati di seguito per configurare un cluster Kerberos che utilizza la password dell'entità radice.

Configura la password dell'entità principale Kerberos

L'entità radice Kerberos è l'account con autorizzazioni di amministratore per il KDC su cluster. Per fornire in modo sicuro la password per il principale 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 l'account di servizio del cluster. All'account di servizio del cluster deve essere concesso il ruolo IAM cloudkms.cryptoKeyDecrypter.

  1. Concedi il ruolo Autore crittografia/decrittografia CryptoKey Cloud KMS al account di servizio cluster:

    gcloud projects add-iam-policy-binding project-id \
        --member serviceAccount:project-number-compute@developer.gserviceaccount.com \
        --role roles/cloudkms.cryptoKeyDecrypter
    

  2. Crea un keyring:

    gcloud kms keyrings create my-keyring --location global
    

  3. Crea una chiave nel keyring:

    gcloud kms keys create my-key \
        --location global \
        --keyring my-keyring \
        --purpose encryption
    

  4. 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
    

    1. Carica la password criptata in un bucket Cloud Storage nel tuo progetto.
      1. Esempio:
        gcloud storage cp kerberos-root-principal-password.encrypted gs://my-bucket
        

Crea il cluster

Puoi utilizzare il comando gcloud o l'API Dataproc per attivare Kerberos nei cluster con la tua password dell'entità principale di root.

Comando g-cloud

Per creare un cluster Dataproc Kerberos (versione dell'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 di Kerberos in un file di configurazione YAML (o JSON), quindi fare riferimento alla configurazione per creare il cluster Kerberos.

  1. Crea un file di configurazione (vedi Certificati SSL, Impostazioni Kerberos aggiuntive e Fiducia tra regni 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
  2. 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 ignora la forma decriptata della password dopo aver aggiunto l'entità radice al KDC. Per la sicurezza ai fini della decrittografia, dopo aver creato il cluster puoi decidere di eliminare il file delle password e la chiave utilizzata per decriptare il secret e rimuovere l'account di servizio dal ruolo kmsKeyDecrypter. Non farlo se prevedi di eseguire lo scaling del 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 un clusters.create richiesta. Imposta enableKerberos su true e imposta il rootPrincipalPasswordUri e kmsKeyUri.

Console

Quando crei un cluster con la versione dell'immagine 1.3 o successiva, seleziona "Abilita" nella sezione Modalità protetta di Kerberos e Hadoop del riquadro Gestisci la sicurezza nella pagina Dataproc Crea un cluster della console Google Cloud, quindi completa le opzioni di sicurezza (discusse nelle sezioni seguenti).

OS Login

La gestione KDC su cluster può essere eseguita con il comando kadmin utilizzando l'entità utente Kerberos radice o sudo kadmin.local. Attiva accesso al sistema operativo per controllare chi può eseguire comandi di superutente.

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 alla 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 del file dell'archivio chiavi in Cloud Storage contenente il certificato con caratteri jolly e la chiave privata utilizzata 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 della raccolta delle autorizzazioni 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'area di autenticazione Kerberos, crea un cluster Kerberos con quanto segue aggiunta nel file di configurazione di Kerberos:

  • realm: il nome dell'area di autenticazione Kerberos su cluster.

Se questa proprietà non è impostata, il dominio degli host name (in maiuscolo) sarà il realm.

Per specificare la chiave master del database KDC, crea un cluster Kerberos con quanto segue aggiunta nel file di configurazione di Kerberos:

  • kdc_db_key_uri: posizione in Cloud Storage del file criptato KMS contenente la chiave master del database KDC.

Se questa proprietà non viene impostata, Dataproc genererà la chiave master.

Per specificare la durata massima del ticket che concede il ticket (in ore), crea un cluster Kerberos con quanto segue aggiunta nel file di configurazione di Kerberos:

  • tgt_lifetime_hours: durata massima del ticket che concede il ticket, espressa in ore.

Se questa proprietà non è impostata, Dataproc imposterà la durata del ticket di assegnazione del ticket su 10 ore.

Trust tra aree di autenticazione

Il KDC nel cluster contiene inizialmente solo l'entità principale dell'amministratore di sistema e le entità principali dei servizi. Puoi aggiungere le entità utente manualmente o stabilire un trust tra i realm con un KDC o un server Active Directory esterno 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 la fiducia tra domini, aggiungere le impostazioni elencate di seguito al file di configurazione di Kerberos quando crei un cluster Kerberos. Crittografa la password condivisa con KMS e memorizzala in un bucket Cloud Storage a cui può accedere l'account di servizio del cluster.

  • cross_realm_trust:admin_server: nome host/indirizzo del server di amministrazione remoto.
  • cross_realm_trust:kdc: nome host/indirizzo del KDC remoto.
  • cross_realm_trust:realm: il nome del realm remoto da considerare attendibile.
  • cross_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 l'attendibilità tra realm a un KDC remoto:

  1. Aggiungi quanto segue nel file /etc/krb5.conf nel KDC remoto:

    [realms]
    DATAPROC.REALM = {
      kdc = MASTER-NAME-OR-ADDRESS
      admin_server = MASTER-NAME-OR-ADDRESS
    }

  2. Crea l'utente attendibile:

    kadmin -q "addprinc krbtgt/DATAPROC.REALM@REMOTE.REALM"
    

  3. Quando richiesto, inserisci la password dell'utente. La password deve corrispondere i contenuti del file criptato delle password condivise

Per attivare la fiducia tra i realm con Active Directory, esegui i seguenti comandi in PowerShell come amministratore:

  1. Crea una definizione KDC in Active Directory.

    ksetup /addkdc DATAPROC.REALM DATAPROC-CLUSTER-MASTER-NAME-OR-ADDRESS
    

  2. Crea attendibilità in Active Directory.

    netdom trust DATAPROC.REALM /Domain AD.REALM /add /realm /passwordt:TRUST-PASSWORD
    
    La password deve corrispondere ai contenuti del file criptato delle password condivise.

dataproc entità

Quando invii un job tramite l'API jobs di Dataproc a un cluster Kerberos Dataproc, viene eseguito come principale Kerberos dataproc dell'ambito Kerberos del cluster.

La multitenancy è supportata all'interno di un cluster kerberos Dataproc se invii un job direttamente al cluster, ad esempio tramite SSH. Tuttavia, se il job legge o scrive su da altri servizi Google Cloud, come Cloud Storage, il job agisce come dell'account di servizio del cluster.

Proprietà cluster predefinite e personalizzate

La modalità protetta di Hadoop è configurata con proprietà nei file di configurazione. Dataproc imposta i valori predefiniti per queste proprietà.

Puoi sostituire 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à 3 KDC: uno su ciascun master. Il KDC in esecuzione il "primo" principale ($CLUSTER_NAME-m-0) sarà il KDC master e fungerà anche da server di amministrazione. Il database del KDC principale 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 è attivo. Per eseguire un failover manuale:

  1. Su tutte le macchine KDC, in /etc/krb5.conf, sostituisci admin_server con il FQDN (nome di dominio completo) del nuovo master. Rimuovi il vecchio master dall'elenco KDC.
  2. Nel nuovo KDC master, configura un cron job per propagare il database.
  3. Sul nuovo KDC master, riavvia il processo admin_server (krb5-admin-server).
  4. Su tutte le macchine KDC, riavvia il processo KDC (krb5-kdc).

Configurazione di rete

Assicurarsi che i nodi worker possano comunicare con il server di amministrazione KDC e Kerberos in esecuzione sui master, verifica che le regole firewall VPC consentano il traffico in entrata Traffico TCP e UDP sulla porta 88 e traffico TCP in entrata sulla porta 749 sul master. In modalità di alta disponibilità, assicurati che le regole firewall VPC consentano il traffico TCP in entrata sulla porta 754 sui 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 principale del servizio basato sull'host, assicurati che il DNS inverso sia configurato correttamente per la rete del cluster.

Per ulteriori informazioni

Consulta le Documentazione MIT Kerberos.