Il plug-in Cloud Storage di Dataproc Ranger, disponibile con le versioni dell'immagine Dataproc 1.5 e 2.0, attiva un servizio di autorizzazione su ogni VM del cluster Dataproc. Il servizio di autorizzazione valuta le richieste del connettore Cloud Storage in base ai criteri di Ranger e, se la richiesta è consentita, restituisce un token di accesso per l'account di servizio della VM del cluster.
Il plug-in Cloud Storage di Ranger 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 vengono archiviati in un MySQL database sul nodo master del cluster. La password di root per il database viene specificata tramite le proprietà del cluster quando crei il cluster Dataproc.
Prima di iniziare
Concedi il ruolo Creatore token account di servizio e il ruolo Amministratore ruoli IAM all' account di servizio della VM Dataproc nel tuo progetto.
Installare il plug-in Cloud Storage di Ranger
Esegui i seguenti comandi in una finestra del terminale locale o in Cloud Shell per installare il plug-in Cloud Storage di Ranger quando crei un cluster Dataproc.
Impostare 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: vedi Configurare la password della principale di root Kerberos.
- RANGER_ADMIN_PASSWORD_KMS_KEY_URI e RANGER_ADMIN_PASSWORD_GCS_URI: vedi Configurare la password di 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 la password di amministratore di Ranger.
Creare un cluster Dataproc
Esegui il comando seguente 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 dell'immagine 1.5: se stai creando un cluster con la versione dell'immagine 1.5 (vedi
Selezione delle versioni),
aggiungi il flag
--metadata=GCS_CONNECTOR_VERSION="2.2.6" or higherper installare la versione del connettore richiesta.
Verificare l'installazione del plug-in Cloud Storage di Ranger
Al termine della 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 ha i seguenti criteri:
Criteri per la lettura e la scrittura nei bucket temporanei e di gestione temporanea del cluster Dataproc
Un criterio
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 (Hadoop Compatible Filesystem) .
Consigli per l'utilizzo
Accesso delle app alle cartelle dei bucket
Per ospitare 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 sotto-percorsi del percorso specificato.
Misure di protezione
Per evitare l'elusione del plug-in:
Concedi all' account di servizio della VM l'accesso alle risorse nei bucket Cloud Storage per consentirgli di concedere l'accesso a queste risorse con token di accesso con ambito ridotto (vedi Autorizzazioni IAM per Cloud Storage). Inoltre, rimuovi l'accesso degli utenti alle risorse dei bucket per evitare l'accesso diretto ai bucket da parte degli utenti.
Disattiva
sudoe altri mezzi di accesso root sulle VM del cluster, incluso l'aggiornamento del filesudoer, per impedire lo spoofing o le modifiche alle impostazioni di autenticazione e autorizzazione. Per ulteriori informazioni, consulta le istruzioni di Linux per aggiungere/rimuovere i 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 alle credenziali o al token di accesso dell'account di servizio della VM utilizzati 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 di autenticazione utente sensibili e ridurre il carico sul KDC (Key Distribution Center), il driver Spark non distribuisce le credenziali Kerberos agli executor. Il driver Spark ottiene invece un token di delega dal plug-in Cloud Storage di Ranger e lo distribuisce agli executor. Gli executor utilizzano il token di delega per autenticarsi al plug-in Cloud Storage di Ranger, 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 del job Spark
Un job di conteggio parole Spark non riesce a essere eseguito da una finestra del terminale su una VM del cluster Dataproc su 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 di errore:
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 a Kerberos.
Output di errore:
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 degli utenti che dispongono di List Objects e di altre autorizzazioni per i bucket temp.
L'esecuzione del job genera un nuovo errore.
Output di errore:
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 wordcount.text
Cloud Storage.
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