Configura Kerberos per Dataproc Metastore

Kerberos è un protocollo di autenticazione di rete progettato per fornire un'autenticazione efficace per le applicazioni client/server utilizzando la crittografia della chiave segreta. È comunemente usato tra gli stack di Hadoop per l'autenticazione nell'intero ecosistema software.

Dataproc Metastore supporta Kerberos tramite un Key Distribution Center (KDC) ospitato dal cliente. I requisiti API per supportare Kerberos sono un file keytab, un'entità e un file krb5.conf.

Questa pagina spiega come abilitare e configurare Kerberos per il servizio di metastore Dataproc Metastore.

Prima di iniziare

  • Se vuoi abilitare Kerberos per la tua istanza del metastore Hive, devi configurare quanto segue:

    • Il tuo KDC Kerberos ospitato.

      Il KDC è un'applicazione che emette ticket Kerberos. È responsabile dell'autenticazione degli utenti quando viene utilizzato Kerberos.

    • Connettività IP tra la rete VPC e il tuo KDC per eseguire l'autenticazione iniziale.

    • Regole firewall sul tuo KDC per consentire il traffico da Dataproc Metastore. Vedi anche Regole firewall per i servizi.

    • Un secret di Google Cloud Secret Manager con il contenuto di un file keytab. Per ulteriori informazioni su come creare un secret di Secret Manager, vedi Abilitare le chiavi di crittografia gestite dal cliente (CMEK) per Secret Manager.

      Un file keytab contiene coppie di entità Kerberos e chiavi criptate, che possono essere utilizzate per autenticare un'entità di servizio con un KDC Kerberos. Devi generare un file keytab con il KDC su cluster di Dataproc e utilizzarlo per configurare il servizio Dataproc Metastore.

      Questo file keytab deve contenere la voce dell'entità del servizio creata per un metastore Hive. Il secret di Secret Manager fornito deve essere bloccato in una versione specifica del secret. La versione più recente non è supportata.

    • Un'entità che si trova sia nel KDC che nel file keytab.

      Per avviare il metastore Hive sono necessari un file e un'entità chiave Kerberos validi. L'entità è presente sia nel KDC che nella scheda chiave. Il principio deve contenere tre parti: primary/instance@REALM. L'istanza \_HOST non è supportata.

    • Un file krb5.conf in un bucket Cloud Storage.

      Un file krb5.conf valido contiene informazioni di configurazione Kerberos, come l'input utente come l'IP KDC, la porta e il nome dell'area di autenticazione. Devi specificare l'IP KDC e non il FQDN KDC.

      Dataproc Metastore prende l'intero krb5.conf come oggetto di Cloud Storage. Devi fornire l'URI Cloud Storage che specifica il percorso del file krb5.conf durante la creazione del servizio. Un URI tipico è nel formato gs://{bucket_name}/path/to/krb5.conf.

    • Per ottenere i risultati migliori, utilizza i bucket Cloud Storage che si trovano nella stessa regione del servizio Dataproc Metastore. Sebbene Dataproc Metastore non applichi restrizioni per l'area geografica, le risorse in co-location hanno un rendimento migliore. Ad esempio, un bucket multiregione UE non funziona bene con un servizio us-central1. L'accesso a più aree geografiche comporta una maggiore latenza, la mancanza di isolamento degli errori a livello di area geografica e costi per la larghezza di banda di rete tra aree geografiche.

Controllo dell'accesso

  • Per creare un servizio, devi richiedere un ruolo IAM contenente l'autorizzazione IAM metastore.services.create. I ruoli specifici di Dataproc Metastore roles/metastore.admin e roles/metastore.editor includono l'autorizzazione di creazione.

  • Puoi concedere l'autorizzazione di creazione a utenti o gruppi utilizzando i ruoli precedenti di roles/owner e roles/editor.

  • Se utilizzi i controlli di servizio VPC, il secret di Secret Manager e l'oggetto Cloud Storage di krb5.conf devono appartenere a un progetto che si trova nello stesso perimetro di servizio del servizio Metastore Dataproc.

Per ulteriori informazioni, consulta Dataproc Metastore IAM e controllo dell'accesso.

Abilita Kerberos per un servizio

Le seguenti istruzioni spiegano come abilitare Kerberos per un servizio Dataproc Metastore integrato con Dataproc.

  1. Configura un cluster Dataproc con Kerberos abilitato nella stessa rete VPC che verrà sottoposta a peering con il servizio Metastore Dataproc.

    1. Abilita l'accesso al progetto durante la creazione del cluster Dataproc per consentire l'accesso API a tutti i servizi Google Cloud nello stesso progetto. A tal fine, puoi passare --scopes 'https://www.googleapis.com/auth/cloud-platform' nel comando gcloud di creazione del cluster Dataproc.
  2. SSH nell'istanza master del cluster Dataproc. Puoi eseguire questa operazione da un browser o dalla riga di comando. Esegui questi comandi sull'istanza principale:

    1. Modifica /etc/hive/conf/hive-site.xml nel cluster Dataproc. Seleziona un nome entità (nel formato primary/instance@REALM). Cerca hive.metastore.keberos.principal esistente in /etc/hive/conf/hive-site.xml per trovare REALM e sostituire i segmenti principale e di istanza. Un nome entità di esempio è hive/test@C.MY-PROJECT.INTERNAL.

      Prendi nota del nome dell'entità da utilizzare durante la creazione del servizio Metastore Dataproc:

      <property>
        <name>hive.metastore.kerberos.principal</name>
        <!-- Update this value. -->
        <value>PRINCIPAL_NAME</value>
      </property>
      <property>
        <name>hive.metastore.kerberos.keytab.file</name>
        <!-- Update to this value. -->
        <value>/etc/security/keytab/metastore.service.keytab</value>
      </property>
      
    2. Crea la combinazione chiave/tabulazione sulla VM principale del cluster Dataproc:

      sudo kadmin.local -q "addprinc -randkey PRINCIPAL_NAME"
      sudo kadmin.local -q "ktadd -k /etc/security/keytab/metastore.service.keytab PRINCIPAL_NAME"
      
    3. Carica la scheda chiavi sul Secret Manager dalla VM principale del cluster Dataproc. Questo richiede che l'identità che esegue la VM Dataproc abbia il ruolo di amministratore di secret per la creazione dei secret. Prendi nota della versione del secret creata per l'uso durante la creazione del servizio Dataproc Metastore.

        gcloud secrets create SECRET_NAME --replication-policy automatic
        sudo gcloud secrets versions add SECRET_NAME --data-file /etc/security/keytab/metastore.service.keytab
        

    4. Determina l'indirizzo IP interno primario dell'istanza principale del cluster Dataproc (dall'interfaccia utente di Compute Engine o di gcloud compute instances list) e compilalo come kdc e admin_server del realm del cluster in /etc/krb5.conf.

      Ad esempio, supponiamo che l'indirizzo IP interno del primario sia 192.0.2.2:

      [realms]
        US-CENTRAL1-A.C.MY-PROJECT.INTERNAL = {
          kdc = 192.0.2.2
          admin_server = 192.0.2.2
        }
      
    5. Carica il file /etc/krb5.conf dalla VM principale di Dataproc in Cloud Storage. Prendi nota del percorso di Cloud Storage da utilizzare durante la creazione del servizio Dataproc Metastore.

      gsutil cp /etc/krb5.conf gs://bucket-name/path/to/krb5.conf
      
  3. Fornisci l'account di servizio Dataproc Metastore (questo account è gestito da Google ed elencato nella pagina dell'interfaccia utente delle autorizzazioni IAM selezionando Includi concessioni di ruoli fornite da Google) con l'autorizzazione di accedere alla chiave chiave:

       gcloud projects add-iam-policy-binding PROJECT_ID \
           --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-metastore.iam.gserviceaccount.com \
           --role roles/secretmanager.secretAccessor
       

  4. Fornisci all'account di servizio Dataproc Metastore l'autorizzazione per accedere al file krb5.conf.

       gcloud projects add-iam-policy-binding PROJECT_ID \
           --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-metastore.iam.gserviceaccount.com \
           --role roles/storage.objectViewer
       

  5. Assicurati di aver configurato le regole firewall in entrata per il KDC. Queste regole firewall devono essere configurate sulla rete VPC utilizzata per creare il cluster Dataproc in modo da consentire il traffico in entrata dal traffico TCP/UDP.

  6. Crea un nuovo servizio Dataproc Metastore o aggiornane uno esistente con il nome entità riportato sopra, la versione del secret di Secret Manager e krb5.conf URI dell'oggetto Cloud Storage. Assicurati di specificare la stessa rete VPC che hai utilizzato durante la creazione del cluster Dataproc.

    L'operazione di creazione o aggiornamento del servizio Dataproc Metastore proverà che un accesso riuscito avviene utilizzando l'entità, la chiave chiave e il file krb5.conf forniti. Se il test ha esito negativo, l'operazione non andrà a buon fine.

  7. Una volta creato il servizio Dataproc Metastore, prendi nota dell'URI dell'endpoint della Thrift e della directory warehouse. L'URI dell'endpoint dell'usato ha un aspetto simile a thrift://10.1.2.3:9083 e la directory del magazzino ha l'aspetto gs://gcs-bucket-service-name-deadbeef/hive-warehouse. SSH nell'istanza master del cluster Dataproc nuovamente, ed esegui il comando seguente:

    1. Modifica /etc/hive/conf/hive-site.xml nel cluster Dataproc:

      <property>
        <name>hive.metastore.uris</name>
        <!-- Update this value. -->
        <value>ENDPOINT_URI</value>
      </property>
      <!-- Add this property entry. -->
      <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>WAREHOUSE_DIR</value>
      </property>
      
    2. Riavvia HiveServer2:

      sudo systemctl restart hive-server2.service
      
    3. Modifica /etc/hadoop/conf/container-executor.cfg per aggiungere la riga seguente a ogni nodo Dataproc:

       allowed.system.users=hive
      
    4. Acquista il ticket kerberos prima di connetterti all'istanza Dataproc Metastore.

      sudo klist -kte /etc/security/keytab/metastore.service.keytab
      sudo kinit -kt /etc/security/keytab/metastore.service.keytab PRINCIPAL_NAME
      sudo klist # gets the ticket information.
      

Passaggi successivi