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 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 accedi a uno esistente. Devi memorizzare il file
krb5.conf
in questo bucket.
Considerazioni sulla rete
Prima di configurare Kerberos, tieni presente le seguenti impostazioni di rete:
Configura una connessione IP tra la tua 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 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 di 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.Scegli la rete di peering VPC che 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:
-
Concede il controllo completo delle risorse Dataproc Metastore (
roles/metastore.editor
) -
Concedere l'accesso completo a tutte le risorse Dataproc Metastore, inclusa l'amministrazione dei criteri IAM (
roles/metastore.admin
)
Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.
Questo ruolo predefinito contiene l'autorizzazione
metastore.services.create
necessaria per
creare 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 Controllo dell'accesso e IAM di Dataproc Metastore.
Attiva 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 tuo cluster Dataproc.
Configura il cluster Dataproc per Kerberos
Le istruzioni riportate di seguito mostrano come utilizzare SSH per connettersi a un cluster Dataproc primario associato al servizio Dataproc Metastore.
Dopodiché, modifica il file hive-site.xml
e configura Kerberos per il tuo servizio.
- Nella console Google Cloud, vai alla pagina Istanze VM.
Nell'elenco delle istanze della macchina virtuale, fai clic su SSH nella riga del node principale Dataproc (
your-cluster-name-m
).Viene aperta una finestra del browser nella home directory del nodo.
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 principale nel seguente formatoprimary/instance@REALM
. Ad esempio,hive/test@C.MY-PROJECT.INTERNAL
.METASTORE_PRINCIPAL_KEYTAB
: la posizione del file keytab 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. Viene utilizzato per autenticare un'entità di servizio con un KDC Kerberos.
Per creare un file keytab
Nella sessione SSH di Dataproc, crea il file 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"
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.
Determina l'indirizzo IP interno principale dell'istanza principale del cluster Dataproc.
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
.Apri il file
krb5.conf
.sudo vim /etc/krb5.conf
Nel file, sostituisci i parametri
KDC
eadmin_server
esistenti con l'indirizzo IP interno del tuo 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 }
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 contenente il tuo filekrb5.conf
.
Al termine del caricamento, copia il percorso del caricamento. Devi utilizzarlo quando crei il servizio Dataproc Metastore.
Concedi ruoli e autorizzazioni IAM
Fornisci all'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 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
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 cluster Dataproc.
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 posizione del servizio Dataproc Metastore.VPC_NETWORK
:il nome della rete VPC. Utilizza la stessa rete configurata nel cluster Dataproc.KERBEROS_PRINCIPAL
: il nome dell'entità Kerberos che hai creato in precedenza.KRB5_CONFIG
: la posizione del filekrb5.config
. Utilizza l'URI dell'oggetto Cloud Storage che punta al 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 Kerberos utilizzando l'entità principale, il file keytab e il file krb5.conf
fornito. Se la connessione non riesce, anche la creazione di Dataproc Metastore non riesce.
Collega il cluster Dataproc a Dataproc Metastore
Dopo aver creato il servizio Dataproc Metastore, individua l'URI dell'endpoint Thrift e la directory del magazzino.
Accedi con SSH all'istanza principale del tuo cluster Dataproc.
Nella sessione SSH, apri il file
/etc/hive/conf/hive-site.xml
.sudo vim /etc/hive/conf/hive-site.xml
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>
Riavvia HiveServer2:
sudo systemctl restart hive-server2.service
Configura Dataproc prima di inviare i job
Per eseguire i job Dataproc,
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, come select * from
.
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
Ottenere una richiesta di Kerberos
Ottieni 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. sudo hive
Sostituisci quanto segue:
PRINCIPAL_NAME
: il nome dell'entità.