Questa pagina spiega come configurare Kerberos per il servizio Dataproc Metastore che utilizza il protocollo dell'endpoint Thrift. Se il servizio Dataproc Metastore utilizza il protocollo dell'endpoint gRPC, consulta Configurare Kerberos per gli endpoint gRPC.
Prima di iniziare
Comprendi le nozioni di base di Kerberos.
In queste istruzioni, utilizzi un cluster Managed Service for Apache Spark per creare le seguenti risorse Kerberos:
- Un file keytab.
- Un file
krb5.conf. - Un'entità Kerberos.
Per saperne di più su come queste risorse Kerberos funzionano 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 Managed Service for Apache Spark.
Crea un bucket Cloud Storage o ottieni l'accesso a uno esistente. Devi archiviare il file
krb5.confin questo bucket.
Considerazioni sulla rete
Prima di configurare Kerberos, tieni presente le seguenti impostazioni di rete:
Configura una connessione IP tra la rete VPC e il KDC. Devi eseguire questa operazione per autenticare il file KDC con il servizio Dataproc Metastore.
Configura le regole firewall necessarie sul KDC. Queste regole sono necessarie per consentire il traffico da Dataproc Metastore. Per saperne di più, consulta Regole firewall per i tuoi servizi.
Se utilizzi Controlli di servizio VPC, allora il secret di Secret Manager e l'oggetto Cloud Storage
krb5.confdevono 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 Managed Service for Apache Spark 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:
- Concedi il controllo completo delle risorse Dataproc Metastore (
roles/metastore.editor) - Concedi l'accesso completo a tutte le risorse Dataproc Metastore, inclusa l'amministrazione delle policy IAM (
roles/metastore.admin)
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Questo ruolo predefinito contiene l'
metastore.services.create
autorizzazione,
necessaria per
creare un Dataproc Metastore con Kerberos.
Potresti anche ottenere questa autorizzazione con ruoli personalizzati o altri ruoli predefiniti.
Per saperne di più sui ruoli e sulle autorizzazioni specifici di Dataproc Metastore, consulta Gestire l'accesso con IAM.Per saperne di più, consulta IAM e controllo dell'accesso di Dataproc Metastore.
Abilitare Kerberos per Dataproc Metastore
Le seguenti istruzioni mostrano come configurare Kerberos per un servizio Dataproc Metastore collegato a un cluster Managed Service for Apache Spark.
Creare un cluster Managed Service for Apache Spark e abilitare Kerberos
gcloud
Per configurare un cluster Managed Service for Apache Spark con Kerberos,
esegui il seguente gcloud dataproc clusters create
comando:
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 Managed Service for Apache Spark.
Configurare il cluster Managed Service for Apache Spark per Kerberos
Le seguenti istruzioni mostrano come utilizzare SSH per connetterti a un cluster primario Managed Service for Apache Spark associato al servizio Dataproc Metastore.
Successivamente, modifica il file hive-site.xml e configura Kerberos per il servizio.
- Nella Google Cloud console, vai alla pagina Istanze VM.
Nell'elenco delle istanze della macchina virtuale, fai clic su SSH nella riga del nodo primario Managed Service for Apache Spark (
your-cluster-name-m).Si apre una finestra del browser nella directory home del nodo.
Apri il file
/etc/hive/conf/hive-site.xml.sudo vim /etc/hive/conf/hive-site.xmlViene 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_PRINCIPAL_KEYTAB</value> </property>Sostituisci:
PRINCIPAL_NAME: un nome principale, nel seguente formatoprimary/instance@REALM. Ad esempio,hive/test@C.MY-PROJECT.INTERNAL.METASTORE_PRINCIPAL_KEYTAB: la posizione del file keytab di Hive Metastore. Utilizza il seguente valore/etc/security/keytab/metastore.service.keytab.
Creare un file keytab
Le seguenti istruzioni mostrano come creare un file keytab.
Un file keytab contiene una coppia di entità Kerberos e una coppia di chiavi criptate. Viene utilizzato per autenticare un'entità servizio con un KDC Kerberos.
Per creare un file keytab
Nella sessione SSH di Managed Service for Apache Spark, crea il keytab e l'entità.
sudo kadmin.local -q "addprinc -randkey PRINCIPAL_NAME" sudo kadmin.local -q "ktadd -k /etc/security/keytab/metastore.service.keytab PRINCIPAL_NAME"Nella sessione SSH di Managed Service for Apache Spark, 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.
Aggiornare il file krb5.conf
Poi, devi aggiornare il file krb5.conf per associarlo al cluster Managed Service for Apache Spark.
Determina l'indirizzo IP interno primario dell'istanza principale del cluster Managed Service for Apache Spark.
gcloud compute instances listAd 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.Apri il file
krb5.conf.sudo vim /etc/krb5.confNel file, sostituisci il parametro
KDCesistente e il parametroadmin_servercon l'indirizzo IP interno del cluster Managed Service for Apache Spark.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 }Carica il file
/etc/krb5.confdalla VM principale Managed Service for Apache Spark al bucket Cloud Storage.gcloud storage cp /etc/krb5.conf gs://PATH_TO_KRB5Sostituisci:
PATH_TO_KRB5: l'URI Cloud Storage che contiene il filekrb5.conf.
Al termine del caricamento, copia il percorso del caricamento. Dovrai utilizzarlo quando crei il servizio Dataproc Metastore.
Concedere ruoli e autorizzazioni IAM
Fornisci al account di servizio Dataproc Metastore l'autorizzazione per accedere al file keytab. Questo account è gestito da Google ed è elencato nella pagina dell'interfaccia utente delle autorizzazioni IAM selezionando Includi concessioni di 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
Fornisci al 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
Creare un servizio Dataproc Metastore con Kerberos
Crea un nuovo servizio Dataproc Metastore configurato con i file Kerberos.
Assicurati di creare il servizio nella rete VPC come il cluster Managed Service for Apache Spark.
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. Utilizza la stessa rete configurata nel cluster Managed Service for Apache Spark.KERBEROS_PRINCIPAL: il nome dell'entità Kerberos creata in precedenza.KRB5_CONFIG: la posizione del filekrb5.conf. Utilizza l'URI dell'oggetto Cloud Storage che punta al file.CLOUD_SECRET: il nome della risorsa relativa di una versione del secret di Secret Manager.
Dopo aver creato il cluster, Dataproc Metastore tenta di connettersi con le credenziali Kerberos utilizzando l'entità, il keytab e il file krb5.conf forniti. Se la connessione non riesce, non riesce anche la creazione di Dataproc Metastore.
Collegare il cluster Managed Service for Apache Spark a Dataproc Metastore
Dopo aver creato il servizio Dataproc Metastore, trova l'URI dell'endpoint Thrift e la directory del warehouse.
Connettiti tramite SSH all'istanza principale del cluster Managed Service for Apache Spark.
Nella sessione SSH, apri il file
/etc/hive/conf/hive-site.xml.sudo vim /etc/hive/conf/hive-site.xmlModifica
/etc/hive/conf/hive-site.xmlnel cluster Managed Service for Apache Spark.<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>Riavvia HiveServer2:
sudo systemctl restart hive-server2.service
Configurare Managed Service for Apache Spark prima di inviare i job
Per eseguire i tuoi job Managed Service for Apache Spark,
devi aggiungere l'utente hive alla proprietà allowed.system.users nel
file container-executor.cfg di Hadoop. In questo modo gli utenti possono eseguire query per accedere ai dati, ad esempio select * from.
Nella sessione SSH, apri il file
container-executor.cfgdi Hadoop.sudo vim /etc/hadoop/conf/container-executor.cfgAggiungi la seguente riga a ogni nodo Managed Service for Apache Spark.
allowed.system.users=hive
Ottenere una richiesta di Kerberos
Ottieni la richiesta di 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. sudo hiveSostituisci quanto segue:
PRINCIPAL_NAME: il nome dell'entità.