Plug-in Ranger Cloud Storage

Il plug-in Dataproc Ranger Cloud Storage, disponibile con le versioni delle immagini Dataproc 1.5 e 2.0, attiva un servizio di autorizzazione su ogni VM del cluster Dataproc. Il servizio di autorizzazione valuta Richieste dal connettore Cloud Storage rispetto ai criteri dei ranger e, se la richiesta è consentita, restituisce un token di accesso per il cluster Account di servizio VM.

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 vengono archiviati in un database MySQL sul nodo principale del cluster. La password root del database è vengono specificate tramite le proprietà del cluster crea il cluster Dataproc.

Prima di iniziare

Concedi il ruolo Creatore token account di servizio e il ruolo Amministratore dei ruoli IAM al service account VM Dataproc nel tuo progetto.

Installa il plug-in Ranger Cloud Storage

Esegui questi comandi in una finestra del terminale locale o Cloud Shell per installare il ranger Plug-in di Cloud Storage durante la creazione di 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:

Crea 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 immagine 1.5: se stai creando un cluster di versioni 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.

Verifica l'installazione del plug-in Cloud Storage di Ranger

Al termine della creazione del cluster, un tipo di servizio GCS, denominato gcs-dataproc, appare nell'interfaccia web dell'amministratore del ranger.

Criteri predefiniti del plug-in Ranger Cloud Storage

Il servizio gcs-dataproc predefinito ha i seguenti criteri:

Consigli per l'utilizzo

Accesso delle 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 la circonvenzione del plug-in:

  • Concedi Account di servizio VM alle risorse in Cloud Storage bucket per consentire l'accesso a queste risorse con token di accesso con ambito ridotto (vedi Autorizzazioni IAM per Cloud Storage). Inoltre, rimuovere l'accesso degli utenti alle risorse del bucket per evitare l'accesso diretto al bucket da parte degli utenti.

  • Disabilita sudo e altri mezzi di accesso root sulle VM del cluster, incluso l'aggiornamento il file sudoer, per impedire la rappresentazione o le modifiche all'autenticazione e autorizzazioni. Per ulteriori informazioni, consulta le istruzioni per Linux per aggiungere/rimuovere i privilegi utente sudo.

  • Usa iptable per 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 dell'account di servizio della VM o al token di accesso utilizzato per autenticare e autorizzare l'accesso a Cloud Storage (consulta block_vm_metadata_server.sh, un script di inizializzazione che utilizza le regole iptable per 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 centro di distribuzione delle chiavi (KDC), il driver Spark non distribuisce le credenziali Kerberos agli esecutori. Il driver Spark ottiene invece una delega dal plug-in Ranger Cloud Storage, quindi distribuisce la delega agli esecutori. Gli esecutori usano il token di delega per eseguire l'autenticazione il plug-in Ranger Cloud Storage, scambiandolo con un token di accesso di Google permette di accedere a Cloud Storage.

Anche i job Hive-on-MapReduce e Hive-on-Tez utilizzano token per accedere a Cloud Storage. Utilizza le seguenti proprietà per ottenere token per accedere ai bucket Cloud Storage specificati quando invii i seguenti tipi di job:

  • Offerte di lavoro di 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,..."
    
  • Lavori di Hive-on-Tez:

    --hiveconf "tez.job.fs-servers=gs://bucket-name,gs://bucket-name,..."
    

Scenario job Spark

Un job di conteggio parole Spark non va a buon fine se viene eseguito da una finestra di terminale su una VM del cluster Dataproc su 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: 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:

  • È necessario specificare spark.yarn.access.hadoopFileSystems=gs://${FILE_BUCKET} in un Kerberos in un ambiente completamente abilitato.

Output dell'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 di utenti che dispongono delle autorizzazioni per i bucket List Objects e altri temp.

L'esecuzione del job genera un nuovo errore.

Output dell'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 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