Il plug-in Cloud Storage di Dataproc Ranger, disponibile con le versioni 1.5 e 2.0 delle immagini Dataproc, attiva un servizio di autorizzazione su ogni VM del cluster Dataproc. Il servizio di autorizzazione valuta le richieste provenienti dal connettore Cloud Storage in base ai criteri Ranger e, se la richiesta è consentita, restituisce un token di accesso per l'account di servizio VM del cluster.
Il plug-in Ranger Cloud Storage si basa su Kerberos per l'autenticazione e si integra con il supporto del connettore Cloud Storage per i token di delega. I token di delega sono archiviati in un database MySQL sul nodo master del cluster. La password root del database viene specificata tramite le proprietà del cluster quando crei il cluster Dataproc.
Prima di iniziare
Concedi i ruoli Creatore token account di servizio e il ruolo Amministratore ruolo IAM per l'account di servizio VM Dataproc nel progetto.
Installa il plug-in Ranger Cloud Storage
Esegui i comandi seguenti in una finestra del terminale locale o in Cloud Shell per installare il plug-in Cloud Storage di Ranger quando crei un cluster Dataproc.
Imposta le variabili di ambiente
export CLUSTER_NAME=new-cluster-name \ export REGION=region \ export KERBEROS_KMS_KEY_URI=Kerberos-KMS-key-URI \ export KERBEROS_PASSWORD_URI=Kerberos-password-URI \ export RANGER_ADMIN_PASSWORD_KMS_KEY_URI=Ranger-admin-password-KMS-key-URI \ export RANGER_ADMIN_PASSWORD_GCS_URI=Ranger-admin-password-GCS-URI \ export RANGER_GCS_PLUGIN_MYSQL_KMS_KEY_URI=MySQL-root-password-KMS-key-URI \ export RANGER_GCS_PLUGIN_MYSQL_PASSWORD_URI=MySQL-root-password-GCS-URI
Note:
- CLUSTER_NAME: il nome del nuovo cluster.
- REGIONE: la regione in cui verrà creato il cluster, ad esempio
us-west1
. - KERBEROS_KMS_KEY_URI e KERBEROS_PASSWORD_URI: consulta Configurare la password dell'entità root Kerberos.
- RANGER_ADMIN_PASSWORD_KMS_KEY_URI e RANGER_ADMIN_PASSWORD_GCS_URI: consulta l'articolo Configurare la password amministratore di Ranger.
- RANGER_GCS_PLUGIN_MYSQL_KMS_KEY_URI e RANGER_GCS_PLUGIN_MYSQL_PASSWORD_URI: configura una password MySQL seguendo la stessa procedura utilizzata per configurare una password amministratore di Ranger.
Crea un cluster Dataproc
Esegui questo comando per creare un cluster Dataproc e installare il plug-in Cloud Storage di Ranger sul cluster.
gcloud dataproc clusters create ${CLUSTER_NAME} \ --region=${REGION} \ --scopes cloud-platform \ --enable-component-gateway \ --optional-components=SOLR,RANGER \ --kerberos-kms-key=${KERBEROS_KMS_KEY_URI} \ --kerberos-root-principal-password-uri=${KERBEROS_PASSWORD_URI} \ --properties="dataproc:ranger.gcs.plugin.enable=true, \ dataproc:ranger.kms.key.uri=${RANGER_ADMIN_PASSWORD_KMS_KEY_URI}, \ dataproc:ranger.admin.password.uri=${RANGER_ADMIN_PASSWORD_GCS_URI}, \ dataproc:ranger.gcs.plugin.mysql.kms.key.uri=${RANGER_GCS_PLUGIN_MYSQL_KMS_KEY_URI}, \ dataproc:ranger.gcs.plugin.mysql.password.uri=${RANGER_GCS_PLUGIN_MYSQL_PASSWORD_URI}"
Note:
- Versione immagine 1.5: se stai creando un cluster con versione immagine 1.5 (vedi Selezione delle versioni), aggiungi il flag
--metadata=GCS_CONNECTOR_VERSION="2.2.6" or higher
per installare la versione del connettore richiesta.
Verificare l'installazione del plug-in Ranger Cloud Storage
Una volta completata la creazione del cluster, nell'interfaccia web di amministrazione di Ranger viene visualizzato un tipo di servizio GCS
, denominatogcs-dataproc
.
Criteri predefiniti del plug-in Cloud Storage di Ranger
Il servizio gcs-dataproc
predefinito prevede i seguenti criteri:
Criteri da leggere e scrivere nei bucket temporanei e temporanei del cluster Dataproc
Un criterio
all - bucket, object-path
, che consente a tutti gli utenti di accedere ai metadati per tutti gli oggetti. Questo accesso è necessario per consentire al connettore Cloud Storage di eseguire operazioni HCFS (file system compatibile con Hadoop).
Consigli per l'utilizzo
Accesso delle app alle cartelle dei bucket
Per supportare le app che creano file intermedi nel bucket Cloud Storage, puoi concedere le autorizzazioni Modify Objects
, List Objects
e Delete Objects
nel percorso del bucket Cloud Storage, quindi selezionare la modalità recursive
per estendere le autorizzazioni ai percorsi secondari sul percorso specificato.
Misure di protezione
Per evitare l'elusione del plug-in:
Concedi all'account di servizio VM l'accesso alle risorse nei tuoi bucket Cloud Storage per consentirgli di accedere alle risorse con token di accesso a livello inferiore (consulta Autorizzazioni IAM per Cloud Storage). Inoltre, rimuovi l'accesso da parte degli utenti alle risorse del bucket per evitare che gli utenti accedano direttamente al bucket.
Disabilita
sudo
e altri mezzi di accesso root sulle VM del cluster, compreso l'aggiornamento del filesudoer
, per evitare il furto d'identità o modifiche alle impostazioni di autenticazione e autorizzazione. Per maggiori informazioni, consulta le istruzioni di Linux per aggiungere/rimuovere i privilegi utente disudo
.Utilizza
iptable
per bloccare le richieste di accesso diretto a Cloud Storage dalle VM del cluster. Ad esempio, puoi bloccare l'accesso al server di metadati della VM per impedire l'accesso alle credenziali dell'account di servizio della VM o al token di accesso utilizzato per autenticare e autorizzare l'accesso a Cloud Storage (consultablock_vm_metadata_server.sh
, uno script di inizializzazione che utilizza le regoleiptable
per bloccare l'accesso al server di metadati della VM).
Job Spark, Hive-on-MapReduce e Hive-on-Tez
Per proteggere i dettagli sensibili dell'autenticazione utente e per ridurre il carico sul Key Distribution Center (KDC), il driver Spark non distribuisce le credenziali Kerberos agli esecutori. Il driver Spark ottiene invece un token di delega dal plug-in Cloud Storage di Ranger, quindi distribuisce il token di delega agli esecutori. Gli esecutori utilizzano il token di delega per l'autenticazione nel plug-in Cloud Storage di Ranger, scambiandolo con un token di accesso di Google che consente l'accesso a Cloud Storage.
Anche i job Hive-on-MapReduce e Hive-on-Tez utilizzano i token per accedere a Cloud Storage. Utilizza le proprietà seguenti per ottenere token per accedere a bucket Cloud Storage specificati quando invii i seguenti tipi di job:
Job Spark:
--conf spark.yarn.access.hadoopFileSystems=gs://bucket-name,gs://bucket-name,...
Job Hive-on-MapReduce:
--hiveconf "mapreduce.job.hdfs-servers=gs://bucket-name,gs://bucket-name,..."
Job Hive-on-Tez:
--hiveconf "tez.job.fs-servers=gs://bucket-name,gs://bucket-name,..."
Scenario job Spark
Un job di conteggio parole Spark non riesce se viene eseguito da una finestra di terminale su una VM del cluster Dataproc in cui è installato il plug-in Cloud Storage di Ranger.
spark-submit \ --conf spark.yarn.access.hadoopFileSystems=gs://${FILE_BUCKET} \ --class org.apache.spark.examples.JavaWordCount \ /usr/lib/spark/examples/jars/spark-examples.jar \ gs://bucket-name/wordcount.txt
Note:
- FILE_BUCKET: bucket Cloud Storage per l'accesso a Spark.
Output errori:
Caused by: com.google.gcs.ranger.client.shaded.io.grpc.StatusRuntimeException: PERMISSION_DENIED: Access denied by Ranger policy: User: '<USER>', Bucket: '<dataproc_temp_bucket>', Object Path: 'a97127cf-f543-40c3-9851-32f172acc53b/spark-job-history/', Action: 'LIST_OBJECTS'
Note:
spark.yarn.access.hadoopFileSystems=gs://${FILE_BUCKET}
è obbligatorio in un ambiente abilitato per Kerberos.
Output errori:
Caused by: java.lang.RuntimeException: Failed creating a SPNEGO token. Make sure that you have run `kinit` and that your Kerberos configuration is correct. See the full Kerberos error message: No valid credentials provided (Mechanism level: No valid credentials provided)
Un criterio viene modificato utilizzando Access Manager nell'interfaccia web di amministrazione di Ranger per aggiungere username
all'elenco di utenti che hanno List Objects
e altre autorizzazioni per il bucket temp
.
L'esecuzione del job genera un nuovo errore.
Output errori:
com.google.gcs.ranger.client.shaded.io.grpc.StatusRuntimeException: PERMISSION_DENIED: Access denied by Ranger policy: User: <USER>, Bucket: '<file-bucket>', Object Path: 'wordcount.txt', Action: 'READ_OBJECTS'
Viene aggiunto un criterio per concedere all'utente l'accesso in lettura al percorso Cloud Storage wordcount.text
.
Il job viene eseguito e completato correttamente.
INFO com.google.cloud.hadoop.fs.gcs.auth.GcsDelegationTokens: Using delegation token RangerGCSAuthorizationServerSessionToken owner=<USER>, renewer=yarn, realUser=, issueDate=1654116824281, maxDate=0, sequenceNumber=0, masterKeyId=0 this: 1 is: 1 a: 1 text: 1 file: 1 22/06/01 20:54:13 INFO org.sparkproject.jetty.server.AbstractConnector: Stopped