Wenn Sie einen Dataproc-Cluster erstellen, können Sie den Hadoop Secure Mode über Kerberos aktivieren, um die Mehrmandantenfähigkeit über Nutzerauthentifizierung, -isolation und -verschlüsselung in einem Dataproc-Cluster bereitzustellen.
Nutzerauthentifizierung und andere Google Cloud Platform-Dienste. Die Authentifizierung pro Nutzer über Kerberos gilt nur innerhalb des Clusters. Interaktionen mit anderen Google Cloud-Diensten wie Cloud Storage werden weiterhin als das Dienstkonto für den Cluster authentifiziert.
Sicheren Modus von Hadoop über 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
Sie können die Google Cloud CLI, die Dataproc API oder die Google Cloud Console verwenden, um Kerberos auf Clustern mit der Image-Version 1.3 und höher von Dataproc zu aktivieren.
gcloud-Befehl
Um einen neuen Kerberos-Dataproc-Cluster (Image-Version 1.3 und höher) automatisch zu konfigurieren, verwenden Sie den Befehl gcloud dataproc clusters create.
gcloud dataproc clusters create cluster-name \ --image-version=2.0 \ --enable-kerberos
Clusterattribut: Anstatt das Flag --enable-kerberos
wie oben zu verwenden, können Sie Kerberos automatisch konfigurieren, indem Sie das Flag --properties "dataproc:kerberos.beta.automatic-config.enable=true"
an den Befehl zum Erstellen von Clustern übergeben. Weitere Informationen finden Sie unter Dataproc-Dienstattribute.
REST API
Kerberos-Cluster können über ClusterConfig.SecurityConfig.KerberosConfig als Teil einer clusters.create-Anfrage erstellt werden. Sie müssen enableKerberos
auf true
setzen.
Console
Sie können Kerberos in einem neuen Cluster automatisch konfigurieren. Dazu wählen Sie in der Google Cloud Console auf der Dataproc-Seite Cluster erstellen im Bereich „Sicherheit verwalten“ unter „Kerberos und sicherer Modus von Hadoop“ die Option „Aktivieren“ aus.
Kerberos-Cluster mit Ihrem eigenen Root-Hauptkonto-Passwort erstellen
Führen Sie die folgenden Schritte aus, um einen Kerberos-Cluster einzurichten, für den Ihr Root-Hauptkonto-Passwort verwendet wird.
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@developer.gserviceaccount.com \ --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 den gcloud
-Befehl oder die Dataproc API verwenden, um Kerberos auf Clustern mit Ihrem eigenen Root-Hauptkonto-Passwort zu aktivieren.
gcloud-Befehl
Verwenden Sie zum Erstellen eines Kerberos-Dataproc-Clusters (Image-Version 1.3 und höher) den Befehl gcloud dataproc clusters create.
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 Dataproc verschlüsselt 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 auch den Schlüssel löschen, der zum Entschlüsseln des Secrets verwendet wird, 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.
Console
Wenn Sie einen Cluster mit Image-Version 1.3 und höher erstellen, wählen Sie in der Google Cloud Console auf der Dataproc-Seite Cluster erstellen im Bereich „Sicherheit verwalten“ unter „Kerberos und sicherer Modus von Hadoop“ die Option „Aktivieren“ aus und schließen Sie die Sicherheitsoptionen ab. Informationen dazu finden Sie in den folgenden Abschnitten.
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 Modus von Hadoop erstellt Dataproc ein selbstsigniertes Zertifikat, um die Cluster-SSL-Verschlüsselung 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 wird, generiert Cloud Dataproc den Hauptschlü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 Laufzeit des Tickets, das das Ticket in Stunden vergibt.
Wenn dieses Attribut nicht festgelegt ist, setzt Dataproc die Gültigkeitsdauer des 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 manuell weitere Nutzerhauptkonten hinzufügen oder eine bereichsübergreifende Vertrauensstellung mit einem externen KDC-Server oder einem Active Directory-Server einrichten, der die Nutzerhauptkonten 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.
Um einen Kerberos-Cluster zu erstellen, der die übergreifende Vertrauensstellung unterstützt, fügen Sie der Kerberos-Konfigurationsdatei beim Erstellen eines Kerberos-Clusters die unten aufgeführten Einstellungen hinzu. 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/Adresse des Remote-Admin-Servers.cross_realm_trust:kdc
: Hostname/Adresse des Remote-KDC.cross_realm_trust:realm
: Name des Remotebereichs, dem zu vertrauen istcross_realm_trust:shared_password_uri
: Speicherort in Cloud Storage des mit KMS verschlüsselten freigegebenen Passworts.
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 für ein Remote-KDC:
Fügen Sie Folgendes in die Datei
/etc/krb5.conf
im 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 muss mit dem Inhalt der verschlüsselten freigegebenen Passwortdatei übereinstimmen.netdom trust DATAPROC.REALM /Domain AD.REALM /add /realm /passwordt:TRUST-PASSWORD
dataproc
-Hauptkonto
Wenn Sie einen Job über die Dataproc Jobs API an einen Dataproc-Kerberos-Cluster senden, wird er als dataproc
-Kerberos-Hauptkonto aus dem Kerberos-Bereich des Clusters ausgeführt.
Die Mehrmandantenfähigkeit wird in einem Dataproc-Kerberos-Cluster unterstützt, wenn Sie einen Job direkt an den Cluster senden, z. B. über SSH. Wenn der Job jedoch andere Google Cloud-Dienste wie Cloud Storage liest oder schreibt, fungiert der Job als Cluster-Dienstkonto.
Standard- und benutzerdefinierte Clusterattribute
Der sichere Modus von Hadoop wird mit Attributen in den Konfigurationsdateien eingerichtet. Dataproc 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 indem Sie die clusters.create API aufrufen und SoftwareConfig-Attribute festlegen. Weitere Informationen unter Beispiele für Clusterattribute.
Hochverfügbarkeitsmodus
Im Hochverfügbarkeitsmodus (High Availability, HA) hat ein Kerberos-Cluster drei KDCs: eins auf jedem Master. Das KDC, das auf dem "ersten" Master ($CLUSTER_NAME-m-0
) ausgeführt wird, ist das Master-KDC und dient auch als Admin-Server.
Die Datenbank des Master-KDC wird über einen Cronjob in fünfminütigen Intervallen mit den beiden Replikat-KDCs synchronisiert. Die drei KDCs sind für den Lesetraffic zuständig.
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-Computern in
/etc/krb5.conf
denadmin_server
auf den neuen vollqualifizierten Domänennamen des Masters. Entfernen Sie den alten Master aus der KDC-Liste. - Richten Sie im neuen Master-KDC einen Cronjob ein, um die Datenbank zu verteilen.
- Starten Sie im neuen Master-KDC den "admin-server"-Vorgang (
krb5-admin-server
) neu. - Starten Sie auf allen KDC-Computern den KDC-Prozess (
krb5-kdc
) neu.
Netzwerkkonfiguration
Damit gewährleistet ist, dass die Worker-Knoten mit dem KDC und dem Kerberos-Administratorserver auf dem/den Master(n) kommunizieren können, müssen die VPC-Firewallregeln eingehenden TCP- und UDP-Traffic auf Port 88 und eingehenden TCP-Traffic auf Port 749 auf dem/den Master(n) 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.
Weitere Informationen
Mehr über Kerberos in der MIT Kerberos-Dokumentation erfahren