Configura gli endpoint Thrift di Kerberos per Dataproc Metastore

In questa pagina viene spiegato come configurare Kerberos per Servizio Dataproc Metastore che utilizza il protocollo degli endpoint Thrift. Se il servizio Dataproc Metastore utilizza il protocollo dell'endpoint gRPC, consulta Configurare Kerberos per gli endpoint gRPC.

Prima di iniziare

  • Comprendere le nozioni di base Kerberos.

    In queste istruzioni, utilizzi un cluster Dataproc per creare i seguenti asset Kerberos:

    • Un file keytab.
    • Un file krb5.conf.
    • Un'entità Kerberos.

    Per ulteriori informazioni su come funzionano queste risorse Kerberos con un servizio Dataproc Metastore, consulta Informazioni su Kerberos.

  • Crea e ospita il tuo KDC Kerberos o scopri come utilizzare il KDC locale di un cluster Dataproc.

  • Crea un bucket Cloud Storage o ottieni l'accesso a uno esistente. Tu devi archiviare il tuo file krb5.conf in questo bucket.

Considerazioni sulla rete

Prima di configurare Kerberos, considera la seguente rete impostazioni:

  • Configura una connessione IP tra la tua rete VPC e il KDC. Devi eseguire questa operazione per di autenticare il file KDC con il servizio Dataproc Metastore.

  • Configura le regole firewall necessarie nel tuo KDC. Queste regole sono necessarie per consentire il traffico da Dataproc Metastore. Per ulteriori informazioni, consulta Regole firewall per i tuoi servizi.

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

  • Decidi quale rete di peering VPC vuoi utilizzare. Devi configurare il cluster Dataproc e il servizio Dataproc Metastore con la stessa rete di peering VPC.

Ruoli obbligatori

Per ottenere l'autorizzazione necessaria per creare un Dataproc Metastore con Kerberos, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto, in base al principio del privilegio minimo:

Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

Questo ruolo predefinito contiene metastore.services.create autorizzazione, che è obbligatorio crea un Dataproc Metastore con Kerberos.

Potresti anche ottenere questa autorizzazione con ruoli personalizzati o altri ruoli predefiniti.

Per ulteriori informazioni su ruoli e autorizzazioni specifici di Dataproc Metastore, consulta Gestire l'accesso con IAM.

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

Abilita Kerberos per Dataproc Metastore

Le istruzioni riportate di seguito mostrano come configurare Kerberos per un servizio Dataproc Metastore collegato a un cluster Dataproc.

Crea un cluster Dataproc e abilita Kerberos

gcloud

Per configurare un cluster Dataproc con Kerberos, esegui il seguente comando gcloud dataproc clusters create:

gcloud dataproc clusters create CLUSTER_NAME \
    --image-version=2.0 \
    --enable-kerberos \
    --scopes 'https://www.googleapis.com/auth/cloud-platform'

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del cluster Dataproc.

Configura il cluster Dataproc per Kerberos

Le seguenti istruzioni mostrano come utilizzare SSH per connettersi a un progetto Dataproc principale associato al servizio Dataproc Metastore.

Dopodiché, modifica il file hive-site.xml e configura Kerberos per il tuo servizio.

  1. Nella console Google Cloud, vai alla pagina Istanze VM.
  2. Nell'elenco delle istanze della macchina virtuale, fai clic su SSH nella riga del node principale Dataproc (your-cluster-name-m).

    Sul nodo si apre una finestra del browser nella home directory.

  3. Apri il file /etc/hive/conf/hive-site.xml.

    sudo vim /etc/hive/conf/hive-site.xml
    

    Viene visualizzato un output simile al seguente:

    <property>
    <name>hive.metastore.kerberos.principal</name>
    <value>PRINCIPAL_NAME</value>
    </property>
    <property>
    <name>hive.metastore.kerberos.keytab.file</name>
    <value>METASTORE_PRINCPAL_KEYTAB</value>
    </property>
    

    Sostituisci:

    • PRINCIPAL_NAME: un nome dell'entità, nel seguente formato primary/instance@REALM. Ad esempio: hive/test@C.MY-PROJECT.INTERNAL.
    • METASTORE_PRINCIPAL_KEYTAB: la posizione del tuo File keytab di Hive Metastore. Utilizza il seguente valore /etc/security/keytab/metastore.service.keytab.

Crea un file keytab

Le istruzioni riportate di seguito mostrano come creare un file keytab.

Un file keytab contiene una coppia di entità Kerberos e una coppia di chiavi criptate. Questo è utilizzato per autenticare un'entità servizio con un KDC Kerberos.

Per creare un file keytab

  1. Nella sessione SSH di Dataproc, crea la keytab e il principale.

    sudo kadmin.local -q "addprinc -randkey PRINCIPAL_NAME"
    sudo kadmin.local -q "ktadd -k /etc/security/keytab/metastore.service.keytab PRINCIPAL_NAME"
    
  2. Nella sessione SSH di Dataproc, crea e carica il file keytab in Secret Manager.

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

    Sostituisci quanto segue:

    • SECRET_NAME: il nome del secret.

Aggiorna il file krb5.conf

Successivamente, devi aggiornare il file krb5.conf per associarlo al tuo cluster Dataproc.

  1. Determina l'indirizzo IP interno principale di Dataproc all'istanza principale del cluster.

    gcloud compute instances list
    

    Ad esempio, l'esecuzione di questo comando produce un output simile:

    ~$ gcloud compute instances list --project kerberos-project
    NAME                                                 ZONE           MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP    EXTERNAL_IP     STATUS
    cluster-236-m                                        us-central1-c  n2-standard-4               192.0.2.2      *.*.*.*         RUNNING
    ...
    

    In questo caso, l'indirizzo IP interno del cluster è 192.0.2.2.

  2. Apri il file krb5.conf.

    sudo vim /etc/krb5.conf
    
  3. Nel file, sostituisci il parametro KDC e il parametro admin_server esistenti con l'indirizzo IP interno del cluster Dataproc.

    Ad esempio, l'utilizzo del valore dell'indirizzo IP dei passaggi precedenti è simile a questo output.

    [realms]
    US-CENTRAL1-A.C.MY-PROJECT.INTERNAL = {
       kdc = 192.0.2.2
       admin_server = 192.0.2.2
    }
    
  4. Carica il file /etc/krb5.conf dalla VM Dataproc principale nel bucket Cloud Storage.

    gcloud storage cp /etc/krb5.conf gs://PATH_TO_KRB5
    

    Sostituisci:

    • PATH_TO_KRB5: l'URI Cloud Storage che contiene il tuo file krb5.conf.

    Al termine del caricamento, copia il relativo percorso. Devi utilizzarlo quando crei il tuo servizio Dataproc Metastore.

Concedi ruoli e autorizzazioni IAM

  1. Fornisci l'autorizzazione all'account di servizio Dataproc Metastore per accedere al file keytab. Questo account è gestito da Google ed è elencato nella pagina della UI delle autorizzazioni IAM selezionando Includi concessioni dei ruoli fornite da Google.

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

  2. Fornisci l'account di servizio Dataproc Metastore con 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

Creare un servizio Dataproc Metastore con Kerberos

Creare un nuovo servizio Dataproc Metastore configurato con il tuo Kerberos.

Assicurati di creare il tuo servizio nella rete VPC come Dataproc in un cluster Kubernetes.

gcloud metastore services create SERVICE \
   --location=LOCATION \
   --instance-size=medium \
   --network=VPC_NETWORK \
   --kerberos-principal=KERBEROS_PRINCIPAL \
   --krb5-config=KRB5_CONFIG \
   --keytab=CLOUD_SECRET

Sostituisci quanto segue:

  • SERVICE: il nome del servizio Dataproc Metastore.
  • LOCATION: la località del servizio Dataproc Metastore.
  • VPC_NETWORK: il nome della rete VPC. Usa lo stesso configurata nel cluster Dataproc.
  • KERBEROS_PRINCIPAL: il nome dell'entità Kerberos che hai creato in precedenza.
  • KRB5_CONFIG: la posizione del file krb5.config. Utilizza l'URI dell'oggetto Cloud Storage che punta al tuo file.
  • CLOUD_SECRET: il nome della risorsa relativa di una versione del segreto Secret Manager.

Dopo aver creato il cluster, Dataproc Metastore tenta di connettersi con le tue credenziali di Kerberos utilizzando l'entità, la keytab e krb5.conf forniti . Se la connessione non riesce, anche la creazione di Dataproc Metastore non va a buon fine.

Dopo aver creato il servizio Dataproc Metastore, individua l'URI dell'endpoint Thrift e la directory del magazzino.

  1. Accedi con SSH all'istanza principale del tuo cluster Dataproc.

  2. Nella sessione SSH, apri il file /etc/hive/conf/hive-site.xml.

    sudo vim /etc/hive/conf/hive-site.xml
    
  3. Modifica /etc/hive/conf/hive-site.xml sul 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>
    
  4. Riavvia HiveServer2:

    sudo systemctl restart hive-server2.service
    

Configura Dataproc prima di inviare i job

Per eseguire i job di Dataproc, devi aggiungere l'utente hive alla proprietà allowed.system.users in File container-executor.cfg Hadoop. Ciò consente agli utenti di eseguire query per accedere ai dati, ad esempio select * from.

  1. Nella sessione SSH, apri il file container-executor.cfg di Hadoop.

    sudo vim /etc/hadoop/conf/container-executor.cfg
    

    Aggiungi la seguente riga su ogni nodo Dataproc.

    allowed.system.users=hive
    

Acquistare un biglietto kerberos

  1. Ottieni il ticket kerberos prima di connetterti a Dataproc Metastore in esecuzione in un'istanza Compute Engine.

    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.
    sudo hive
    

    Sostituisci quanto segue:

    • PRINCIPAL_NAME: il nome dell'entità.

Passaggi successivi