Kerberos für Dataproc Metastore Thrift-Endpunkte konfigurieren

Auf dieser Seite wird erläutert, wie Sie Kerberos für Ihren Dataproc Metastore-Dienst konfigurieren, der das Thrift-Endpunktprotokoll verwendet. Wenn Ihr Dataproc Metastore-Dienst das gRPC-Endpunktprotokoll verwendet, lesen Sie den Abschnitt Kerberos für gRPC-Endpunkte konfigurieren.

Hinweise

  • Sie sollten die Grundlagen von Kerberos kennen.

    In dieser Anleitung verwenden Sie einen Dataproc-Cluster, um die folgenden Kerberos-Assets zu erstellen:

    • Eine Keytab-Datei.
    • Eine krb5.conf-Datei
    • Ein Kerberos-Hauptkonto.

    Weitere Informationen zur Verwendung dieser Kerberos-Assets mit einem Dataproc Metastore-Dienst finden Sie unter Kerberos.

  • Erstellen und hosten Sie Ihr eigenes Kerberos-KDC oder erfahren Sie, wie Sie das lokale KDC eines Dataproc-Clusters verwenden.

  • Erstellen Sie einen Cloud Storage-Bucket oder greifen Sie auf einen vorhandenen zu. Sie müssen die Datei krb5.conf in diesem Bucket speichern.

Überlegungen zum Netzwerk

Berücksichtigen Sie vor dem Konfigurieren von Kerberos die folgenden Netzwerkeinstellungen:

  • Richten Sie eine IP-Verbindung zwischen Ihrem VPC-Netzwerk und dem KDC ein. Dies ist erforderlich, um Ihre KDC-Datei beim Dataproc Metastore-Dienst zu authentifizieren.

  • Richten Sie alle erforderlichen Firewallregeln für Ihr KDC ein. Diese Regeln sind erforderlich, um Traffic aus dem Dataproc Metastore zuzulassen. Weitere Informationen finden Sie unter Firewallregeln für Ihre Dienste.

  • Wenn Sie VPC Service Controls verwenden, müssen das Secret Manager-Secret und das Cloud Storage-Objekt krb5.conf zu einem Projekt gehören, das sich im selben Dienstperimeter wie der Dataproc Metastore-Dienst befindet.

  • Entscheiden Sie, welches VPC-Peering-Netzwerk Sie verwenden möchten. Sie müssen Ihren Dataproc-Cluster und Ihren Dataproc Metastore-Dienst mit demselben VPC-Peering-Netzwerk konfigurieren.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Projekt zuzuweisen, um die Berechtigung zu erhalten, die Sie zum Erstellen eines Dataproc Metastore mit Kerberos benötigen. Dabei gilt das Prinzip der geringsten Berechtigung:

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Diese vordefinierte Rolle enthält die Berechtigung metastore.services.create, die zum Erstellen eines Dataproc Metastore mit Kerberos erforderlich ist.

Sie können diese Berechtigung auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.

Weitere Informationen zu bestimmten Dataproc Metastore-Rollen und -Berechtigungen finden Sie unter Zugriff mit IAM verwalten.

Weitere Informationen finden Sie unter Dataproc Metastore-IAM und -Zugriffssteuerung.

Kerberos für Dataproc Metastore aktivieren

In der folgenden Anleitung wird gezeigt, wie Sie Kerberos für einen Dataproc Metastore-Dienst konfigurieren, der an einen Dataproc-Cluster angehängt ist.

Dataproc-Cluster erstellen und Kerberos aktivieren

gcloud

Führen Sie den folgenden gcloud dataproc clusters create-Befehl aus, um einen Dataproc-Cluster mit Kerberos einzurichten:

gcloud dataproc clusters create CLUSTER_NAME \
    --image-version=2.0 \
    --enable-kerberos \
    --scopes 'https://www.googleapis.com/auth/cloud-platform'

Ersetzen Sie Folgendes:

  • CLUSTER_NAME: Der Name Ihres Dataproc-Clusters.

Dataproc-Cluster für Kerberos konfigurieren

In der folgenden Anleitung wird gezeigt, wie Sie eine SSH-Verbindung zu einem primären Dataproc-Cluster herstellen, der mit Ihrem Dataproc Metastore-Dienst verknüpft ist.

Anschließend bearbeiten Sie die Datei hive-site.xml und konfigurieren Kerberos für Ihren Dienst.

  1. Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.
  2. Klicken Sie in der Liste der VM-Instanzen in der Zeile des primären Dataproc-Knotens (your-cluster-name-m) auf SSH.

    Im Stammverzeichnis des Knotens wird ein Browserfenster geöffnet.

  3. Öffnen Sie die Datei /etc/hive/conf/hive-site.xml.

    sudo vim /etc/hive/conf/hive-site.xml
    

    Die Ausgabe sollte in etwa so aussehen:

    <property>
    <name>hive.metastore.kerberos.principal</name>
    <value>PRINCIPAL_NAME</value>
    </property>
    <property>
    <name>hive.metastore.kerberos.keytab.file</name>
    <value>METASTORE_PRINCPAL_KEYTAB</value>
    </property>
    

    Ersetzen Sie:

    • PRINCIPAL_NAME: Ein Prinzipalname im folgenden Format: primary/instance@REALM. Beispiel: hive/test@C.MY-PROJECT.INTERNAL.
    • METASTORE_PRINCIPAL_KEYTAB: Der Speicherort Ihrer Hive Metastore-Keytab-Datei. Verwenden Sie den folgenden Wert: /etc/security/keytab/metastore.service.keytab.

Keytab-Datei erstellen

In der folgenden Anleitung erfahren Sie, wie Sie eine Keytab-Datei erstellen.

Eine Keytab-Datei enthält ein Paar aus Kerberos-Hauptkonten und ein Paar aus verschlüsselten Schlüsseln. Damit wird ein Dienstprinzipal bei einem Kerberos-KDC authentifiziert.

Keytab-Datei erstellen

  1. Erstellen Sie in der Dataproc-SSH-Sitzung den Keytab und das Hauptkonto.

    sudo kadmin.local -q "addprinc -randkey PRINCIPAL_NAME"
    sudo kadmin.local -q "ktadd -k /etc/security/keytab/metastore.service.keytab PRINCIPAL_NAME"
    
  2. Erstellen Sie in der Dataproc-SSH-Sitzung die Keytab-Datei und laden Sie sie in Secret Manager hoch.

    gcloud secrets create SECRET_NAME --replication-policy automatic
    sudo gcloud secrets versions add SECRET_NAME --data-file /etc/security/keytab/metastore.service.keytab

    Ersetzen Sie Folgendes:

    • SECRET_NAME: der Name Ihres Secrets.

Datei „krb5.conf“ aktualisieren

Als Nächstes müssen Sie die Datei krb5.conf aktualisieren, um sie mit Ihrem Dataproc-Cluster zu verknüpfen.

  1. Ermitteln Sie die primäre interne IP-Adresse der primären Instanz des Dataproc-Clusters.

    gcloud compute instances list
    

    Wenn Sie diesen Befehl ausführen, erhalten Sie beispielsweise eine ähnliche Ausgabe:

    ~$ gcloud compute instances list --project kerberos-project
    NAME                                                 ZONE           MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP    EXTERNAL_IP     STATUS
    cluster-236-m                                        us-central1-c  n2-standard-4               192.0.2.2      *.*.*.*         RUNNING
    ...
    

    In diesem Fall lautet die interne IP-Adresse des Clusters 192.0.2.2.

  2. Öffnen Sie die Datei krb5.conf.

    sudo vim /etc/krb5.conf
    
  3. Ersetzen Sie in der Datei den vorhandenen Parameter KDC und den Parameter admin_server durch die interne IP-Adresse Ihres Dataproc-Clusters.

    Wenn Sie beispielsweise den IP-Adresswert aus den vorherigen Schritten verwenden, sieht die Ausgabe so aus.

    [realms]
    US-CENTRAL1-A.C.MY-PROJECT.INTERNAL = {
       kdc = 192.0.2.2
       admin_server = 192.0.2.2
    }
    
  4. Laden Sie die Datei /etc/krb5.conf von der primären Dataproc-VM in Ihren Cloud Storage-Bucket hoch.

    gcloud storage cp /etc/krb5.conf gs://PATH_TO_KRB5
    

    Ersetzen Sie:

    • PATH_TO_KRB5: Der Cloud Storage-URI, der Ihre krb5.conf-Datei enthält.

    Kopieren Sie nach Abschluss des Uploads den Pfad des Uploads. Sie müssen sie verwenden, wenn Sie Ihren Dataproc Metastore-Dienst erstellen.

IAM-Rollen und ‑Berechtigungen zuweisen

  1. Geben Sie dem Dataproc Metastore-Dienstkonto die Berechtigung für den Zugriff auf die Keytab-Datei. Dieses Konto wird von Google verwaltet und auf der UI-Seite für IAM-Berechtigungen durch Auswahl von Von Google bereitgestellte Rollenzuweisungen einschließen aufgeführt.

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-metastore.iam.gserviceaccount.com \
          --role roles/secretmanager.secretAccessor

  2. Geben Sie dem Dataproc Metastore-Dienstkonto die Berechtigung für den Zugriff auf die Datei krb5.conf.

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-metastore.iam.gserviceaccount.com \
          --role roles/storage.objectViewer

Dataproc Metastore-Dienst mit Kerberos erstellen

Erstellen Sie einen neuen Dataproc Metastore-Dienst, der mit Ihren Kerberos-Dateien konfiguriert ist.

Achten Sie darauf, dass Sie Ihren Dienst im VPC-Netzwerk als Dataproc-Cluster erstellen.

gcloud metastore services create SERVICE \
   --location=LOCATION \
   --instance-size=medium \
   --network=VPC_NETWORK \
   --kerberos-principal=KERBEROS_PRINCIPAL \
   --krb5-config=KRB5_CONFIG \
   --keytab=CLOUD_SECRET

Ersetzen Sie Folgendes:

  • SERVICE: der Name Ihres Dataproc Metastore-Dienstes.
  • LOCATION: Der Standort Ihres Dataproc Metastore-Dienstes.
  • VPC_NETWORK:der Name des VPC-Netzwerk. Verwenden Sie dasselbe Netzwerk, das in Ihrem Dataproc-Cluster konfiguriert ist.
  • KERBEROS_PRINCIPAL: der Name des Kerberos-Principals, den Sie zuvor erstellt haben.
  • KRB5_CONFIG: Der Speicherort der Datei krb5.config. Verwenden Sie den Cloud Storage-Objekt-URI, der auf Ihre Datei verweist.
  • CLOUD_SECRET: Der relative Ressourcenname einer Secret Manager-Secret-Version.

Nachdem Sie den Cluster erstellt haben, versucht Dataproc Metastore, mit Ihren Kerberos-Anmeldedaten eine Verbindung herzustellen. Dazu werden das bereitgestellte Hauptkonto, die Keytab-Datei und die krb5.conf-Datei verwendet. Wenn die Verbindung fehlschlägt, schlägt auch die Erstellung des Dataproc Metastore fehl.

Nachdem der Dataproc Metastore-Dienst erstellt wurde, suchen Sie den Thrift-Endpunkt-URI und das Warehouse-Verzeichnis.

  1. SSH-Verbindung zur primären Instanz Ihres Dataproc-Clusters herstellen

  2. Öffnen Sie in der SSH-Sitzung die Datei /etc/hive/conf/hive-site.xml.

    sudo vim /etc/hive/conf/hive-site.xml
    
  3. Ändern Sie /etc/hive/conf/hive-site.xml im Dataproc-Cluster.

    <property>
    <name>hive.metastore.uris</name>
    <!-- Update this value. -->
    <value>ENDPOINT_URI</value>
    </property>
    <!-- Add this property entry. -->
    <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>WAREHOUSE_DIR</value>
    </property>
    
  4. Starten Sie HiveServer2 neu:

    sudo systemctl restart hive-server2.service
    

Dataproc vor dem Senden von Jobs konfigurieren

Damit Sie Ihre Dataproc-Jobs ausführen können, müssen Sie den Nutzer hive der Eigenschaft allowed.system.users in der Hadoop-Datei container-executor.cfg hinzufügen. So können Nutzer Abfragen ausführen, um auf Daten wie select * from zuzugreifen.

  1. Öffnen Sie in der SSH-Sitzung die Hadoop-Datei container-executor.cfg.

    sudo vim /etc/hadoop/conf/container-executor.cfg
    

    Fügen Sie die folgende Zeile auf jedem Dataproc-Knoten hinzu.

    allowed.system.users=hive
    

Kerberos-Ticket abrufen

  1. Rufen Sie das Kerberos-Ticket ab, bevor Sie eine Verbindung zur Dataproc Metastore-Instanz herstellen.

    sudo klist -kte /etc/security/keytab/metastore.service.keytab
    sudo kinit -kt /etc/security/keytab/metastore.service.keytab PRINCIPAL_NAME
    sudo klist # gets the ticket information.
    sudo hive
    

    Ersetzen Sie Folgendes:

    • PRINCIPAL_NAME: der Name des Principals.

Nächste Schritte