Configurazione sicurezza Dataproc

Quando crei un cluster Dataproc, puoi abilitare la modalità sicura di Hadoop tramite Kerberos per fornire la multitenancy tramite autenticazione utente, 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, continuano ad 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 include la distribuzione MIT di Kerberos e configura Apache Hadoop YARN, HDFS, Hive, Spark e i componenti correlati per utilizzarlo per l'autenticazione.

L'abilitazione di Kerberos crea un Key Distribution Center (KDC) su cluster, contenente le entità servizio e un'entità radice. L'entità radice è l'account con autorizzazioni di amministratore per il KDC sul cluster. Può anche contenere entità utente standard o essere connesso tramite trust cross-realm a un altro KDC contenente le entità utente.

Crea un cluster Kerberos

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

Comando g-cloud

Per configurare automaticamente un nuovo cluster Kerberos Dataproc (immagine versione 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 sopra, puoi configurare automaticamente Kerberos passando il flag --properties "dataproc:kerberos.beta.automatic-config.enable=true" al comando di creazione cluster (vedi Proprietà del servizio Dataproc).

API REST

I cluster Kerberos possono essere creati tramite ClusterConfig.SecurityConfig.KerberosConfig come parte di una richiesta clusters.create. Devi impostare enableKerberos su true.

Console

Puoi configurare automaticamente Kerberos su un nuovo cluster selezionando "Abilita" dalla sezione Modalità protetta di Kerberos e Hadoop del riquadro Gestisci sicurezza nella pagina Crea un cluster di Dataproc della console Google Cloud.

Crea un cluster Kerberos con la tua password dell'entità radice

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

Configura la password dell'entità radice Kerberos

L'entità radice Kerberos è l'account con autorizzazioni di amministratore per il KDC su cluster. Per fornire in modo sicuro la password per l'entità radice Kerberos, gli utenti possono criptarla con una chiave Key Management Service (KMS), quindi archiviarla in un bucket Google Cloud Storage a cui può accedere l'account di servizio del cluster. È necessario concedere all'account di servizio del cluster il ruolo IAM cloudkms.cryptoKeyDecrypter.

  1. Concedi il ruolo Autore crittografia/decrittografia CryptoKey Cloud KMS all'account di servizio del 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:
        gsutil cp kerberos-root-principal-password.encrypted gs://my-bucket
        

Crea il cluster

Puoi utilizzare il comando gcloud o l'API Dataproc per abilitare Kerberos sui cluster con la password dell'entità root.

Comando g-cloud

Per creare un cluster Kerberos Dataproc (immagine versione 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

Usa un file di configurazione YAML (o JSON). Invece di 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.

  1. Crea un file di configurazione. Per ulteriori impostazioni di configurazione che possono essere incluse nel file, consulta le pagine relative a certificati SSL, impostazioni Kerberos aggiuntive e attendibilità tra aree di autenticazione:
    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. Usa 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 motivi di sicurezza, 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 fare lo scale up del cluster, che richiede il file e la chiave delle password e il ruolo dell'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.

Console

Quando crei un cluster con un'immagine versione 1.3 o successive, seleziona "Abilita" dalla sezione Modalità protetta di Kerberos e Hadoop del riquadro Gestisci sicurezza nella pagina Crea un cluster di Dataproc, quindi completa le opzioni di sicurezza (discusse 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. Abilita OS Login per stabilire chi può eseguire i comandi come super user.

Certificati SSL

Nell'ambito dell'abilitazione 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 KMS contenente la password del file dell'archivio chiavi.
  • ssl:key_password_uri: posizione in Cloud Storage del file criptato KMS contenente la password della chiave nel file dell'archivio chiavi.
  • ssl:keystore_uri: posizione in Cloud Storage del file di archivio chiavi 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 KMS contenente la password del file dell'archivio attendibilità.
  • ssl:truststore_uri: posizione in Cloud Storage del file dell'archivio di attendibilità contenente certificati attendibili.

Esempio di file di configurazione:

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 la seguente proprietà aggiunta nel file di configurazione Kerberos:

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

Se questa proprietà non è impostata, il dominio dei nomi host (in maiuscolo) sarà l'area di autenticazione.

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 KMS contenente la chiave master del database KDC.

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

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

  • tgt_lifetime_hours: durata massima in ore del biglietto per la concessione del biglietto.

Se questa proprietà non è impostata, Dataproc imposterà il ticket che concede il tempo di vita del ticket su 10 ore.

Fiducia tra i regni

Il KDC sul cluster contiene inizialmente solo l'entità amministratore principale e le entità servizio. Puoi aggiungere entità utente manualmente o stabilire un trust tra le aree di autenticazione con un server KDC o Active Directory esterno che contenga le entità utente. Ti consigliamo di utilizzare Cloud VPN o Cloud Interconnect per la connessione a un KDC/Active Directory on-premise.

Per creare un cluster kerberos che supporti l'attendibilità tra i realm, aggiungi le impostazioni elencate di seguito al file di configurazione Kerberos quando crei un cluster kerberos. Cripta la password condivisa con KMS e archiviala 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: nome dell'area di autenticazione remota di cui considerare attendibili.
  • cross_realm_trust:shared_password_uri: posizione in Cloud Storage della password condivisa criptata con KMS.

Esempio di file di configurazione:

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 le aree di autenticazione 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 ai contenuti del file di password condivisa criptata

Per abilitare l'attendibilità tra aree di autenticazione e Active Directory, esegui questi comandi in PowerShell come amministratore:

  1. Creare una definizione KDC in Active Directory.

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

  2. Crea trust 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 entità kerberos dataproc dall'area di autenticazione kerberos del cluster.

La multitenancy è supportata all'interno di un cluster kerberos Dataproc se invii direttamente un job al cluster, ad esempio tramite SSH. Tuttavia, se il job legge o scrive in altri servizi Google Cloud, come Cloud Storage, funge da 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 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à alta disponibilità

In modalità ad alta disponibilità, un cluster kerberos avrà 3 KDC, uno per 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 3 KDC serviranno 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, cambia admin_server nel nome di dominio completo (Fully Certified Domain Name) del nuovo master. Rimuovi il master precedente dall'elenco KDC.
  2. Sul nuovo KDC master, configura un cron job per la propagazione del 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

Per assicurarti 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 TCP e UDP in entrata sulla porta 88 e sul traffico TCP in entrata sulla porta 749 sui master. In modalità ad 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 la corretta configurazione del DNS inverso. Inoltre, per la canonicalizzazione dell'entità di servizio basata su host, assicurati che il DNS inverso sia configurato correttamente per la rete del cluster.

Per ulteriori informazioni

Consulta la documentazione relativa a Kerberos MIT.