Ranger Cloud Storage-Plug-in

Das Dataproc Ranger Cloud Storage-Plug-in, das mit den Dataproc-Image-Versionen 1.5 und 2.0 verfügbar ist, aktiviert einen Autorisierungsdienst auf jeder Dataproc-Cluster-VM. Der Autorisierungsdienst prüft Anfragen vom Cloud Storage-Connector anhand der Ranger-Richtlinien und gibt bei zulässigen Anfragen ein Zugriffstoken für das VM-Dienstkonto des Clusters zurück.

Das Ranger Cloud Storage-Plug-in nutzt Kerberos für die Authentifizierung und ist mit der Cloud Storage-Connector-Unterstützung für Delegierungstokens kompatibel. Delegierungstokens werden in einer MySQL-Datenbank auf dem Clustermasterknoten gespeichert. Das Root-Passwort für die Datenbank wird über Clustereigenschaften angegeben, wenn Sie den Dataproc-Cluster erstellen.

Hinweise

Weisen Sie dem Dataproc-VM-Dienstkonto in Ihrem Projekt die Rolle Ersteller von Dienstkonto-Tokens und die Rolle IAM-Rollenadministrator zu.

Ranger Cloud Storage-Plug-in installieren

Führen Sie die folgenden Befehle in einem lokalen Terminalfenster oder in Cloud Shell aus, um das Ranger-Cloud Storage-Plug-in zu installieren, wenn Sie einen Dataproc-Cluster erstellen.

Umgebungsvariablen festlegen

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

Hinweise:

Dataproc-Cluster erstellen

Führen Sie den folgenden Befehl aus, um einen Dataproc-Cluster zu erstellen und das Ranger-Cloud Storage-Plug-in auf dem Cluster zu installieren.

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}"

Hinweise:

  • Image-Version 1.5:Wenn Sie einen Cluster mit der Image-Version 1.5 erstellen (siehe Versionen auswählen), fügen Sie das Flag --metadata=GCS_CONNECTOR_VERSION="2.2.6" or higher hinzu, um die erforderliche Connector-Version zu installieren.

Installation des Ranger Cloud Storage-Plug-ins prüfen

Nach Abschluss der Clustererstellung wird in der Ranger-Benutzeroberfläche der Diensttyp GCS mit dem Namen gcs-dataproc angezeigt.

Standardrichtlinien für das Ranger Cloud Storage-Plug-in

Für den Standard-gcs-dataproc-Dienst gelten die folgenden Richtlinien:

  • Richtlinien zum Lesen von und Schreiben in die Staging- und temporären Buckets des Dataproc-Clusters

  • Eine all - bucket, object-path-Richtlinie, die allen Nutzern den Zugriff auf Metadaten für alle Objekte ermöglicht. Dieser Zugriff ist erforderlich, damit der Cloud Storage-Connector HCFS-Vorgänge (Hadoop Compatible File System) ausführen kann.

Tipps zur Nutzung

App-Zugriff auf Bucket-Ordner

Wenn Sie Apps verwenden möchten, die Zwischendateien im Cloud Storage-Bucket erstellen, können Sie Modify Objects-, List Objects- und Delete Objects-Berechtigungen für den Cloud Storage-Bucket-Pfad gewähren und dann den Modus recursive auswählen, um die Berechtigungen auf Unterpfade des angegebenen Pfads auszuweiten.

Schutzmaßnahmen

So verhindern Sie das Umgehen des Plug-ins:

  • Gewähren Sie dem VM-Dienstkonto Zugriff auf die Ressourcen in Ihren Cloud Storage-Buckets, damit es mit Zugriffstokens mit eingeschränktem Umfang Zugriff auf diese Ressourcen gewähren kann (siehe IAM-Berechtigungen für Cloud Storage). Entfernen Sie außerdem den Zugriff von Nutzern auf Bucket-Ressourcen, um direkten Bucket-Zugriff durch Nutzer zu verhindern.

  • Deaktivieren Sie sudo und andere Möglichkeiten für den Root-Zugriff auf Cluster-VMs, einschließlich der Aktualisierung der sudoer-Datei, um Identitätsdiebstahl oder Änderungen an den Authentifizierungs- und Autorisierungseinstellungen zu verhindern. Weitere Informationen finden Sie in der Linux-Anleitung zum Hinzufügen oder Entfernen von sudo-Nutzerberechtigungen.

  • Verwenden Sie iptable, um direkte Zugriffsanfragen auf Cloud Storage von Cluster-VMs zu blockieren. Sie können beispielsweise den Zugriff auf den VM-Metadatenserver blockieren, um den Zugriff auf die Anmeldedaten des VM-Dienstkontos oder das Zugriffstoken zu verhindern, das zur Authentifizierung und Autorisierung des Zugriffs auf Cloud Storage verwendet wird. Weitere Informationen finden Sie unter block_vm_metadata_server.sh, einem Initialisierungsskript, mit dem der Zugriff auf den VM-Metadatenserver mithilfe von iptable-Regeln blockiert wird.

Spark-, Hive-on-MapReduce- und Hive-on-Tez-Jobs

Zum Schutz vertraulicher Details zur Nutzerauthentifizierung und zur Reduzierung der Auslastung des Key Distribution Centers (KDC) verteilt der Spark-Treiber keine Kerberos-Anmeldedaten an Executors. Stattdessen ruft der Spark-Treiber ein Delegierungstoken vom Ranger Cloud Storage-Plug-in ab und verteilt es dann an die Executors. Ausführende verwenden das Delegierungstoken, um sich beim Ranger Cloud Storage-Plug-in zu authentifizieren, und tauschen es gegen ein Google-Zugriffstoken ein, das den Zugriff auf Cloud Storage ermöglicht.

Bei Hive-on-MapReduce- und Hive-on-Tez-Jobs werden ebenfalls Tokens für den Zugriff auf Cloud Storage verwendet. Verwenden Sie die folgenden Properties, um Tokens für den Zugriff auf bestimmte Cloud Storage-Buckets zu erhalten, wenn Sie die folgenden Jobtypen einreichen:

  • Spark-Jobs:

    --conf spark.yarn.access.hadoopFileSystems=gs://bucket-name,gs://bucket-name,...
    
  • Hive-on-MapReduce-Jobs:

    --hiveconf "mapreduce.job.hdfs-servers=gs://bucket-name,gs://bucket-name,..."
    
  • Hive-on-Tez-Jobs:

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

Spark-Job-Szenario

Ein Spark-Wordcount-Job schlägt fehl, wenn er über ein Terminalfenster auf einer Dataproc-Cluster-VM ausgeführt wird, auf der das Ranger Cloud Storage-Plug-in installiert ist.

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

Hinweise:

  • FILE_BUCKET: Cloud Storage-Bucket für den Spark-Zugriff.

Fehlerausgabe:

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'

Hinweise:

  • spark.yarn.access.hadoopFileSystems=gs://${FILE_BUCKET} ist in einer Kerberos-kompatiblen Umgebung erforderlich.

Fehlerausgabe:

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)

Eine Richtlinie wird über den Access Manager in der Ranger-Administratoroberfläche bearbeitet, um username der Liste der Nutzer hinzuzufügen, die List Objects und andere temp-Bucket-Berechtigungen haben.

Beim Ausführen des Jobs wird ein neuer Fehler generiert.

Fehlerausgabe:

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'

Es wird eine Richtlinie hinzugefügt, um dem Nutzer Lesezugriff auf den Cloud Storage-Pfad wordcount.text zu gewähren.

Der Job wird ausgeführt und abgeschlossen.

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