Wenn Sie einen Managed Service for Apache Spark-Cluster erstellen, können Sie den sicheren Hadoop-Modus über Kerberos aktivieren, um Mandantenfähigkeit über Nutzerauthentifizierung, ‑isolierung und ‑verschlüsselung innerhalb eines Managed Service for Apache Spark-Clusters bereitzustellen.
Nutzerauthentifizierung und andere Google Cloud Platform-Dienste. Die Nutzerauthentifizierung mit Kerberos gilt nur innerhalb des Clusters. Interaktionen mit anderen Google Cloud -Diensten wie Cloud Storage werden weiterhin als Dienstkonto für den Cluster authentifiziert.
Sicheren Hadoop-Modus mit Kerberos aktivieren
Die Aktivierung von Kerberos und Hadoop Secure Mode für einen Cluster umfasst die MIT-Distribution von Kerberos und die Konfiguration von Apache Hadoop YARN, HDFS, Hive, Spark und zugehöriger Komponenten für die Authentifizierung.
Durch die Aktivierung von Kerberos wird ein zentrales Key Management Center (KDC) erstellt, das Hauptkonten und ein Root-Hauptkonto enthält. Das Root-Hauptkonto ist das Konto mit Administratorberechtigungen für das KDC auf dem Cluster. Es kann auch Hauptkonten von Standardnutzern enthalten oder über eine bereichsübergreifende Vertrauensstellung mit anderen KDCs verbunden sein, die die Hauptkonten der Nutzer enthalten.
Kerberos-Cluster erstellen
Richten Sie das Passwort für den Kerberos-Root-Principal ein und erstellen Sie dann einen Cluster.
Kerberos-Root-Hauptkonto-Passwort einrichten
Das Kerberos-Root-Hauptkonto ist das Konto mit Administratorberechtigungen für das KDC auf dem Cluster. Um das Passwort für das Kerberos-Root-Hauptkonto sicher bereitzustellen, können Nutzer es mit einem Key Management Service (KMS)-Schlüssel verschlüsseln und dann in einem Google Cloud Storage-Bucket, auf den das Dienstkonto des Clusters zugreifen kann. Dem Cluster-Dienstkonto muss die IAM-Rolle cloudkms.cryptoKeyDecrypter zugewiesen werden.
Weisen Sie dem Clusterdienstkonto die Rolle "Cloud KMS CryptoKey-Verschlüsseler/Entschlüsseler" zu:
gcloud projects add-iam-policy-binding project-id \ --member serviceAccount:project-number-compute@ \ --role roles/cloudkms.cryptoKeyDecrypter
Schlüsselbund erstellen
gcloud kms keyrings create my-keyring --location global
Erstellen Sie einen Schlüssel im Schlüsselbund.
gcloud kms keys create my-key \ --location global \ --keyring my-keyring \ --purpose encryption
Verschlüsseln Sie das Passwort für das Kerberos-Root-Hauptkonto:
echo "my-password" | \ gcloud kms encrypt \ --location=global \ --keyring=my-keyring \ --key=my-key \ --plaintext-file=- \ --ciphertext-file=kerberos-root-principal-password.encrypted
- Laden Sie das verschlüsselte Passwort in einen Cloud Storage-Bucket in Ihrem Projekt hoch.
- Beispiel:
gcloud storage cp kerberos-root-principal-password.encrypted gs://my-bucket
- Beispiel:
- Laden Sie das verschlüsselte Passwort in einen Cloud Storage-Bucket in Ihrem Projekt hoch.
Cluster erstellen
Sie können die Google Cloud CLI, die Dataproc API oder dieGoogle Cloud Console verwenden, um Kerberos auf Clustern zu aktivieren, die die Image-Version 1.3 und höher von Managed Service for Apache Spark verwenden.
Google Cloud Console
- Öffnen Sie die Seite Cluster erstellen.
- Klicken Sie auf Zusätzliche Konfiguration, um den Bereich zu maximieren.
- Bearbeiten Sie die Sicherheit.
- Wählen Sie im daraufhin geöffneten Bereich unter Kerberos die Option Aktivieren aus und geben Sie das Passwort und die Schlüsselinformationen an (weitere Informationen finden Sie in den folgenden Abschnitten).
gcloud CLI-Befehl
Verwenden Sie den Befehl gcloud dataproc clusters create, um einen Kerberos-Managed Service for Apache Spark-Cluster (Image-Version 1.3 und höher) zu erstellen.
gcloud dataproc clusters create cluster-name \ --region=region \ --image-version=2.0 \ --kerberos-root-principal-password-uri=gs://my-bucket/kerberos-root-principal-password.encrypted \ --kerberos-kms-key=projects/project-id/locations/global/keyRings/my-keyring/cryptoKeys/my-key
Verwenden Sie eine YAML- oder JSON-Konfigurationsdatei. Anstatt wie oben gezeigt kerberos-*-Flags an den Befehl gcloud zu übergeben, können Sie Kerberos-Einstellungen in einer YAML- oder JSON-Konfigurationsdatei platzieren und dann auf die Konfigurationsdatei verweisen, um den Kerberos-Cluster zu erstellen.
- Erstellen Sie eine Konfigurationsdatei. Unter SSL-Zertifikate, Zusätzliche Kerberos-Einstellungen und Bereichsübergreifende Vertrauensstellung finden Sie weitere Konfigurationseinstellungen, die in die Datei aufgenommen werden können:
root_principal_password_uri: gs://my-bucket/kerberos-root-principal-password.encrypted kms_key_uri: projects/project-id/locations/global/keyRings/mykeyring/cryptoKeys/my-key
- Verwenden Sie den folgenden
gcloud-Befehl, um den Kerberos-Cluster zu erstellen:gcloud dataproc clusters create cluster-name \ --region=region \ --kerberos-config-file=local path to config-file \ --image-version=2.0
Sicherheitsaspekte Managed Service for Apache Spark verwirft die entschlüsselte Form des Passworts, nachdem das Root-Hauptkonto dem KDC hinzugefügt wurde.
Aus Sicherheitsgründen können Sie nach dem Erstellen des Clusters die Passwortdatei und den Schlüssel zum Entschlüsseln des Secrets löschen und das Dienstkonto aus der Rolle kmsKeyDecrypter entfernen. Tun Sie dies nicht, wenn Sie den Cluster hochskalieren möchten. Dafür sind die Passwortdatei und der Schlüssel sowie die Dienstkontorolle erforderlich.
REST API
Kerberos-Cluster können über ClusterConfig.SecurityConfig.KerberosConfig als Teil einer clusters.create-Anfrage erstellt werden. Setzen Sie enableKerberos auf „true“ und legen Sie die Felder rootPrincipalPasswordUri und kmsKeyUri fest.
OS Login
Die KDC-Verwaltung auf einem Cluster kann mit dem kadmin-Befehl mithilfe des Root-Kerberos-Nutzerhauptkontos oder mithilfe von sudo kadmin.local durchgeführt werden.
Aktivieren Sie OS Login und legen Sie damit fest, wer Superuser-Befehle ausführen kann.
SSL-Zertifikate
Im Rahmen der Aktivierung des sicheren Hadoop-Modus erstellt Managed Service for Apache Spark ein selbst signiertes Zertifikat, um die SSL-Verschlüsselung des Clusters zu aktivieren. Alternativ können Sie für die SSL-Verschlüsselung des Clusters ein Zertifikat bereitstellen. Fügen Sie dafür die folgenden Einstellungen der Konfigurationsdatei hinzu, wenn Sie Kerberos-Cluster erstellen:
ssl:keystore_password_uri: Speicherort der KMS-verschlüsselten Datei in Cloud Storage, die das Passwort für die Schlüsselspeicherdatei enthält.ssl:key_password_uri: Speicherort der KMS-verschlüsselten Datei in Cloud Storage, die das Passwort für den Schlüssel in der Schlüsselspeicherdatei enthält.ssl:keystore_uri: Speicherort in Cloud Storage der Schlüsselspeicherdatei, die das Platzhalterzertifikat und den von Clusterknoten verwendeten privaten Schlüssel enthält.ssl:truststore_password_uri: Speicherort in Cloud Storage der KMS-verschlüsselten Datei, die das Passwort für die Truststore-Datei enthält.ssl:truststore_uri: Speicherort in Cloud Storage der Trust Store-Datei, die vertrauenswürdige Zertifikate enthält.
Beispielkonfigurationsdatei:
root_principal_password_uri: gs://my-bucket/kerberos-root-principal-password.encrypted kms_key_uri: projects/project-id/locations/global/keyRings/mykeyring/cryptoKeys/my-key ssl: key_password_uri: gs://bucket/key_password.encrypted keystore_password_uri: gs://bucket/keystore_password.encrypted keystore_uri: gs://bucket/keystore.jks truststore_password_uri: gs://bucket/truststore_password.encrypted truststore_uri: gs://bucket/truststore.jks
Zusätzliche Kerberos-Einstellungen
Zur Angabe eines Kerberos-Bereichs erstellen Sie einen Kerberos-Cluster mit dem folgenden Attribut, das in der Kerberos-Konfigurationsdatei hinzugefügt wurde:
realm: der Name des Kerberos-Bereichs auf dem Cluster.
Wenn dieses Attribut nicht festgelegt ist, ist die Domain der Hostnamen (in Großbuchstaben) der Bereich.
Um den Masterschlüssel der KDC-Datenbank anzugeben, erstellen Sie einen Kerberos-Cluster mit dem folgenden Attribut, das in der Kerberos-Konfigurationsdatei hinzugefügt wurde:
kdc_db_key_uri: Speicherort in Cloud Storage der KMS-verschlüsselten Datei mit dem Masterschlüssel der KDC-Datenbank.
Wenn dieses Attribut nicht festgelegt ist, generiert Managed Service for Apache Spark den Masterschlüssel.
Um die maximale Lebensdauer des Tickets (in Stunden) anzugeben, erstellen Sie einen Kerberos-Cluster mit dem folgenden Attribut, das in der Kerberos-Konfigurationsdatei hinzugefügt wurde:
tgt_lifetime_hours: Maximale Lebensdauer des Ticket Granting Tickets in Stunden.
Wenn dieses Attribut nicht festgelegt ist, setzt Managed Service for Apache Spark die Lebensdauer des Ticket Granting Tickets auf 10 Stunden.
Bereichsübergreifende Vertrauensstellung
Das KDC im Cluster enthält anfangs nur die Hauptkonten des Root-Administrators und des Dienstes. Sie können Nutzerprinzipale manuell hinzufügen oder eine bereichsübergreifende Vertrauensstellung mit einem externen KDC oder Active Directory-Verzeichnisserver einrichten, der Nutzerprinzipale enthält. Für die Herstellung einer Verbindung zu einem lokalen KDC-/Active Directory-Server wird die Verwendung von Cloud VPN oder Cloud Interconnect empfohlen.
Wenn Sie einen Kerberos-Cluster erstellen möchten, der realmübergreifendes Vertrauen unterstützt, fügen Sie der Kerberos-Konfigurationsdatei die folgenden Einstellungen hinzu, wenn Sie einen Kerberos-Cluster erstellen. Verschlüsseln Sie das freigegebene Passwort mit KMS und speichern Sie es in einem Cloud Storage-Bucket, auf den das Clusterdienstkonto zugreifen kann.
cross_realm_trust:admin_server: Hostname oder Adresse des Remote-Administratorserverscross_realm_trust:kdc: Hostname oder Adresse des Remote-KDCcross_realm_trust:realm: Name des Remote-Bereichs, dem vertraut werden sollcross_realm_trust:shared_password_uri: Speicherort des KMS-verschlüsselten freigegebenen Passworts in Cloud Storage
Beispielkonfigurationsdatei:
root_principal_password_uri: gs://my-bucket/kerberos-root-principal-password.encrypted kms_key_uri: projects/project-id/locations/global/keyRings/mykeyring/cryptoKeys/my-key cross_realm_trust: admin_server: admin.remote.realm kdc: kdc.remote.realm realm: REMOTE.REALM shared_password_uri: gs://bucket/shared_password.encrypted
So aktivieren Sie die bereichsübergreifende Vertrauensstellung zu einem Remote-KDC:
Fügen Sie Folgendes in die Datei
/etc/krb5.confim Remote-KDC ein:[realms] DATAPROC.REALM = { kdc = MASTER-NAME-OR-ADDRESS admin_server = MASTER-NAME-OR-ADDRESS }
Erstellen Sie den Vertrauensnutzer:
kadmin -q "addprinc krbtgt/DATAPROC.REALM@REMOTE.REALM"
Geben Sie das Passwort den Nutzers ein, wenn Sie dazu aufgefordert werden. Das Passwort muss mit dem Inhalt der verschlüsselten freigegebenen Passwortdatei übereinstimmen.
Führen Sie die folgenden Befehle als Administrator in PowerShell aus, um die bereichsübergreifende Vertrauensstellung mit Active Directory zu aktivieren:
Erstellen Sie eine KDC-Definition in Active Directory:
ksetup /addkdc DATAPROC.REALM DATAPROC-CLUSTER-MASTER-NAME-OR-ADDRESS
Erstellen Sie eine Vertrauensstellung in Active Directory:
Das Passwort sollte mit dem Inhalt der verschlüsselten Datei mit dem gemeinsamen Passwort übereinstimmen.netdom trust DATAPROC.REALM /Domain AD.REALM /add /realm /passwordt:TRUST-PASSWORD
dataproc Hauptkonto
Wenn Sie einen Job mit der Jobs API von Managed Service for Apache Spark an einen Kerberos-Cluster von Managed Service for Apache Spark senden, wird er als Kerberos-Principal dataproc aus dem Kerberos-Realm des Clusters ausgeführt.
Die Mehrmandantenfähigkeit wird in einem Managed Service for Apache Spark-Kerberos-Cluster unterstützt, wenn Sie einen Job direkt an den Cluster senden, z. B. über SSH. Wenn der Job jedoch Daten aus anderen Google Cloud -Diensten wie Cloud Storage liest oder in diese schreibt, fungiert der Job als Dienstkonto des Clusters.
Standard- und benutzerdefinierte Clusterattribute
Der sichere Modus von Hadoop wird mit Attributen in den Konfigurationsdateien eingerichtet. Managed Service for Apache Spark legt Standardwerte für diese Attribute fest.
Sie können die Standardattribute überschreiben, wenn Sie den Cluster mit dem Flag gcloud dataproc clusters create --properties erstellen oder die API clusters.create aufrufen und SoftwareConfig-Attribute festlegen (siehe Beispiele für Clusterattribute).
Hochverfügbarkeitsmodus
Im Hochverfügbarkeitsmodus (High Availability, HA) hat ein Kerberos-Cluster drei KDCs: eins auf jedem Master. Der KDC, der auf dem „ersten“ Master ($CLUSTER_NAME-m-0) ausgeführt wird, ist der Master-KDC und dient auch als Admin-Server.
Die Datenbank des Master-KDC wird über einen Cronjob in 5-Minuten-Intervallen mit den beiden Replikat-KDCs synchronisiert. Die drei KDCs verarbeiten den Lesetraffic.
Kerberos unterstützt keine Echtzeitreplikation und kein automatisches Failover, wenn der Master-KDC ausfällt. So führen Sie ein manuelles Failover durch:
- Ändern Sie auf allen KDC-Maschinen in
/etc/krb5.confden Wertadmin_serverin den voll qualifizierten Domainnamen (FQDN) des neuen Masters. Entfernen Sie den alten Master aus der KDC-Liste. - Richten Sie auf dem neuen Master-KDC einen Cronjob ein, um die Datenbank zu übertragen.
- Starten Sie auf dem neuen Master-KDC den Prozess „admin_server“ (
krb5-admin-server) neu. - Starten Sie auf allen KDC-Computern den KDC-Prozess (
krb5-kdc) neu.
Netzwerkkonfiguration
Damit Worker-Knoten mit dem KDC und dem Kerberos-Administratorserver kommunizieren können, die auf dem Master ausgeführt werden, müssen die VPC-Firewallregeln eingehenden TCP- und UDP-Traffic auf Port 88 und eingehenden TCP-Traffic auf Port 749 auf dem Master zulassen. Stellen Sie im Hochverfügbarkeitsmodus sicher, dass VPC-Firewallregeln eingehenden TCP-Traffic auf Port 754 auf den Mastern zulassen, um die Weitergabe von Änderungen am Master-KDC zuzulassen. Kerberos erfordert eine ordnungsgemäße Einrichtung von Reverse-DNS. Achten Sie außerdem darauf, dass für die hostbasierte Kanonisierung von Diensthauptkonten der Reverse-DNS für das Netzwerk des Clusters richtig eingerichtet ist.
Nächste Schritte
- Weitere Informationen finden Sie in der MIT Kerberos-Dokumentation.