Il plug-in Managed Service for Apache Spark Ranger Cloud Storage, disponibile con le versioni immagine 1.5 e 2.0 di Managed Service for Apache Spark, attiva un servizio di autorizzazione su ogni VM del cluster Managed Service for Apache Spark. Il servizio di autorizzazione valuta le richieste provenienti dal connettore Cloud Storage in base alle policy di Ranger e, se la richiesta è consentita, restituisce un token di accesso per il service account 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 Managed Service for Apache Spark.
Prima di iniziare
Concedi il ruolo Creatore token account di servizio e il ruolo Amministratore ruoli IAM all'account di servizio VM di Managed Service for Apache Spark nel tuo progetto.
Installa il plug-in Ranger Cloud Storage
Esegui questi comandi in una finestra del terminale locale o in Cloud Shell per installare il plug-in Ranger Cloud Storage quando crei un cluster Managed Service for Apache Spark.
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.
- REGION: la regione in cui verrà creato il cluster, ad esempio
us-west1. - KERBEROS_KMS_KEY_URI e KERBEROS_PASSWORD_URI: consulta Configura la password dell'entità root Kerberos.
- RANGER_ADMIN_PASSWORD_KMS_KEY_URI e RANGER_ADMIN_PASSWORD_GCS_URI: consulta Configura 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 Managed Service for Apache Spark
Esegui questo comando per creare un cluster Managed Service for Apache Spark e installare il plug-in Ranger Cloud Storage 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 (consulta Selezione delle versioni), aggiungi il flag
--metadata=GCS_CONNECTOR_VERSION="2.2.6" or higherper installare la versione del connettore richiesta.
Verifica l'installazione del plug-in Ranger Cloud Storage
Al termine della creazione del cluster, nell'interfaccia web di amministrazione di Ranger viene visualizzato un tipo di servizio GCS, denominato gcs-dataproc.
Policy predefinite del plug-in Ranger Cloud Storage
Il servizio gcs-dataproc predefinito ha le seguenti policy:
Policy per leggere e scrivere nei bucket temporanei e di staging del cluster Managed Service for Apache Spark
Una policy
all - bucket, object-path, che consente a tutti gli utenti di accedere ai metadati di 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 dell'app alle cartelle del bucket
Per supportare le app che creano file intermedi nel bucket Cloud Storage, puoi concedere le autorizzazioni Modify Objects, List Objects e Delete Objects sul percorso del bucket Cloud Storage, quindi selezionare la modalità recursive per estendere le autorizzazioni ai percorsi secondari nel percorso specificato.
Misure di protezione
Per evitare l'aggiramento del plug-in:
Concedi al service account VM l'accesso alle risorse nei tuoi bucket Cloud Storage per consentirgli di concedere l'accesso a queste risorse con token di accesso con ambito ridotto (consulta Autorizzazioni IAM per Cloud Storage). Inoltre, rimuovi l'accesso degli utenti alle risorse del bucket per evitare l'accesso diretto al bucket da parte degli utenti.
Disattiva
sudoe altri mezzi di accesso root sulle VM del cluster, incluso l'aggiornamento del filesudoer, per impedire la simulazione di identità o le modifiche alle impostazioni di autenticazione e autorizzazione. Per saperne di più, consulta le istruzioni per Linux per l'aggiunta/la rimozione dei privilegi utentesudo.Utilizza
iptableper bloccare le richieste di accesso diretto a Cloud Storage dalle VM del cluster. Ad esempio, puoi bloccare l'accesso al server dei metadati della VM per impedire l'accesso alla credenziale o al token di accesso del account di servizio della VM utilizzato per autenticare e autorizzare l'accesso a Cloud Storage (vediblock_vm_metadata_server.sh, uno script di inizializzazione che utilizza le regoleiptableper bloccare l'accesso al server dei metadati della VM).
Job Spark, Hive-on-MapReduce e Hive-on-Tez
Per proteggere i dettagli sensibili dell'autenticazione utente e 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 Ranger Cloud Storage e lo distribuisce agli esecutori. Gli esecutori utilizzano il token di delega per autenticarsi nel plug-in Ranger Cloud Storage, scambiandolo con un token di accesso 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 seguenti proprietà per ottenere i token per accedere ai 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 di job Spark
Un job di conteggio delle parole Spark non riesce se eseguito da una finestra del terminale su una VM del cluster Managed Service for Apache Spark in cui è installato il plug-in Ranger Cloud Storage.
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: il bucket Cloud Storage per l'accesso a Spark.
Output degli 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 degli 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)
Una policy viene modificata utilizzando Access Manager nell'interfaccia web di amministrazione di Ranger
per aggiungere username all'elenco di utenti che dispongono di List Objects e altre autorizzazioni
per i bucket temp.
L'esecuzione del job genera un nuovo errore.
Output degli 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 aggiunta una policy 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