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 Artikel Kerberos für gRPC-Endpunkte konfigurieren.
Hinweis
Grundlagen von Kerberos
In dieser Anleitung verwenden Sie einen Managed Service for Apache Spark-Cluster, um die folgenden Kerberos-Assets zu erstellen:
- Eine Keytab-Datei
- Eine
krb5.conf-Datei - Einen Kerberos-Principal
Weitere Informationen zur Verwendung dieser Kerberos-Assets mit einem Dataproc Metastore-Dienst finden Sie unter Informationen zu Kerberos.
Erstellen und hosten Sie Ihr eigenes Kerberos-KDC oder erfahren Sie, wie Sie das lokale KDC eines Managed Service for Apache Spark-Clusters verwenden.
Erstellen Sie einen Cloud Storage-Bucket oder erhalten Sie Zugriff auf einen vorhandenen Bucket. Sie müssen die Datei
krb5.confin diesem Bucket speichern.
Netzwerküberlegungen
Berücksichtigen Sie vor der Konfiguration von Kerberos die folgenden Netzwerkeinstellungen:
Richten Sie eine IP-Verbindung zwischen Ihrem VPC-Netzwerk und dem KDC ein. Sie müssen dies tun, um Ihre KDC-Datei mit dem Dataproc Metastore-Dienst zu authentifizieren.
Richten Sie alle erforderlichen Firewallregeln in Ihrem KDC ein. Diese Regeln sind erforderlich, um Traffic aus Dataproc Metastore zuzulassen. Weitere Informationen finden Sie unter Firewallregeln für Ihre Dienste.
Wenn Sie VPC Service Controls verwenden, dann müssen das Secret Manager-Secret und das
krb5.confCloud Storage-Objekt 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 Managed Service for Apache Spark-Cluster und den 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 zum Erstellen eines Dataproc Metastore mit Kerberos zu erhalten. Dabei gilt das Prinzip der geringsten Berechtigung:
- Vollständige Kontrolle über Dataproc Metastore-Ressourcen gewähren (
roles/metastore.editor) - Vollständigen Zugriff auf alle Dataproc Metastore-Ressourcen gewähren, einschließlich der IAM-Richtlinienverwaltung (
roles/metastore.admin)
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Diese vordefinierte Rolle enthält die
metastore.services.create
Berechtigung,
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 Managed Service for Apache Spark-Cluster angehängt ist.
Managed Service for Apache Spark-Cluster erstellen und Kerberos aktivieren
gcloud
Führen Sie den folgenden gcloud dataproc clusters create
Befehl aus, um einen Managed Service for Apache Spark-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 Managed Service for Apache Spark-Clusters.
Managed Service for Apache Spark-Cluster für Kerberos konfigurieren
In der folgenden Anleitung wird gezeigt, wie Sie eine SSH-Verbindung zu einem primären Managed Service for Apache Spark-Cluster herstellen, der mit Ihrem Dataproc Metastore-Dienst verknüpft ist.
Anschließend ändern Sie die Datei hive-site.xml und konfigurieren Kerberos für Ihren Dienst.
- Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.
Klicken Sie in der Liste der virtuellen Maschineninstanzen in der Zeile des primären Managed Service for Apache Spark-Knotens (
your-cluster-name-m) auf SSH.Ein Browserfenster wird in Ihrem Home-Verzeichnis auf dem Knoten geöffnet.
Öffnen Sie die Datei
/etc/hive/conf/hive-site.xml.sudo vim /etc/hive/conf/hive-site.xmlDie Ausgabe sieht in etwa so aus:
<property> <name>hive.metastore.kerberos.principal</name> <value>PRINCIPAL_NAME</value> </property> <property> <name>hive.metastore.kerberos.keytab.file</name> <value>METASTORE_PRINCIPAL_KEYTAB</value> </property>Ersetzen Sie:
PRINCIPAL_NAME: Ein Principal-Name 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 wird gezeigt, wie Sie eine Keytab-Datei erstellen.
Eine Keytab-Datei enthält ein Paar aus Kerberos-Principals und ein Paar aus verschlüsselten Schlüsseln. Damit wird ein Dienst-Principal mit einem Kerberos-KDC authentifiziert.
Keytab-Datei erstellen
Erstellen Sie in der Managed Service for Apache Spark-SSH-Sitzung den Keytab und den Principal.
sudo kadmin.local -q "addprinc -randkey PRINCIPAL_NAME" sudo kadmin.local -q "ktadd -k /etc/security/keytab/metastore.service.keytab PRINCIPAL_NAME"Erstellen Sie in der Managed Service for Apache Spark-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 Managed Service for Apache Spark-Cluster zu verknüpfen.
Bestimmen Sie die primäre interne IP-Adresse der primären Instanz des Managed Service for Apache Spark-Clusters.
gcloud compute instances listWenn Sie beispielsweise diesen Befehl ausführen, wird eine ähnliche Ausgabe erzeugt:
~$ 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 ist die interne IP-Adresse des Clusters
192.0.2.2.Öffnen Sie die Datei
krb5.conf.sudo vim /etc/krb5.confErsetzen Sie in der Datei den vorhandenen Parameter
KDCund den Parameteradmin_serverdurch die interne IP-Adresse Ihres Managed Service for Apache Spark-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 }Laden Sie die Datei
/etc/krb5.confvon Ihrer primären Managed Service for Apache Spark-VM in Ihren Cloud Storage-Bucket hoch.gcloud storage cp /etc/krb5.conf gs://PATH_TO_KRB5Ersetzen Sie:
PATH_TO_KRB5: Der Cloud Storage-URI, der Ihre Dateikrb5.confenthält.
Kopieren Sie nach Abschluss des Uploads den Pfad des Uploads. Sie benötigen ihn, wenn Sie Ihren Dataproc Metastore-Dienst erstellen.
IAM-Rollen und ‑Berechtigungen zuweisen
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 einbeziehen 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
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 den Dienst im VPC-Netzwerk als Managed Service for Apache Spark-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 Ihres VPC-Netzwerk. Verwenden Sie dasselbe Netzwerk, das in Ihrem Managed Service for Apache Spark-Cluster konfiguriert ist.KERBEROS_PRINCIPAL: der Name des Kerberos-Principals, den Sie zuvor erstellt haben.KRB5_CONFIG: der Speicherort der Dateikrb5.conf. Verwenden Sie den Cloud Storage-Objekt-URI, der auf Ihre Datei verweist.CLOUD_SECRET: der relative Ressourcen name einer Secret Manager Secret-Version.
Nachdem Sie den Cluster erstellt haben, versucht Dataproc Metastore, mit Ihren Kerberos-Anmeldedaten eine Verbindung herzustellen. Dabei werden der angegebene Principal, der Keytab und die Datei krb5.conf verwendet. Wenn die Verbindung fehlschlägt, schlägt auch die Erstellung von Dataproc Metastore fehl.
Managed Service for Apache Spark-Cluster mit Dataproc Metastore verknüpfen
Nachdem der Dataproc Metastore-Dienst erstellt wurde, suchen Sie den Thrift-Endpunkt-URI und das Warehouse-Verzeichnis.
Stellen Sie eine SSH-Verbindung zur primären Instanz Ihres Managed Service for Apache Spark-Clusters her.
Öffnen Sie in der SSH-Sitzung die Datei
/etc/hive/conf/hive-site.xml.sudo vim /etc/hive/conf/hive-site.xmlÄndern Sie
/etc/hive/conf/hive-site.xmlim Managed Service for Apache Spark-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>Starten Sie HiveServer2 neu:
sudo systemctl restart hive-server2.service
Managed Service for Apache Spark vor dem Senden von Jobs konfigurieren
Damit Sie Ihre Managed Service for Apache Spark-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 zuzugreifen, z. B. select * from.
Öffnen Sie in der SSH-Sitzung die Hadoop-Datei
container-executor.cfg.sudo vim /etc/hadoop/conf/container-executor.cfgFügen Sie die folgende Zeile auf jedem Managed Service for Apache Spark-Knoten hinzu.
allowed.system.users=hive
Kerberos-Ticket abrufen
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 hiveErsetzen Sie Folgendes:
PRINCIPAL_NAME: der Name Ihres Principals.