Dataproc Security Configuration

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 das gcloud-Befehlszeilentool, 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=1.3 \  
    --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 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.

  1. 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
    

  2. Schlüsselbund erstellen

    gcloud kms keyrings create my-keyring --location global
    

  3. Erstellen Sie einen Schlüssel im Schlüsselbund.

    gcloud kms keys create my-key \
        --location global \
        --keyring my-keyring \
        --purpose encryption
    

  4. 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
    

    1. Laden Sie das verschlüsselte Passwort in einen Cloud Storage-Bucket in Ihrem Projekt hoch.
      1. Beispiel:
        gsutil cp kerberos-root-principal-password.encrypted gs://my-bucket
        

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=1.3 \
    --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.

  1. 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
    
  2. 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=1.3
    

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

Beim Erstellen eines Clusters mit der Image-Version 1.3 und höher wählen Sie in der Cloud Console auf der Dataproc-Seite Cluster erstellen im Bereich „Sicherheit verwalten“ unter „Kerberos und sicherer Modus von Hadoop“ die Option „Aktivieren“ aus und vervollständigen dann die Sicherheitsoptionen. 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 Truststore-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 ist
  • cross_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:

  1. 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
    }
    

  2. Erstellen Sie den Vertrauensnutzer:

    kadmin -q "addprinc krbtgt/DATAPROC.REALM@REMOTE.REALM"
    

  3. 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:

  1. Erstellen Sie eine KDC-Definition in Active Directory:

    ksetup /addkdc DATAPROC.REALM DATAPROC-CLUSTER-MASTER-NAME-OR-ADDRESS
    

  2. Erstellen Sie eine Vertrauensstellung in Active Directory:

    netdom trust DATAPROC.REALM /Domain AD.REALM /add /realm /passwordt:TRUST-PASSWORD
    
    Das Passwort muss mit dem Inhalt der verschlüsselten freigegebenen Passwortdatei übereinstimmen.

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:

  1. Ändern Sie auf allen KDC-Computern in /etc/krb5.conf den admin_server auf den neuen vollqualifizierten Domänennamen des Masters. Entfernen Sie den alten Master aus der KDC-Liste.
  2. Richten Sie im neuen Master-KDC einen Cronjob ein, um die Datenbank zu verteilen.
  3. Starten Sie im neuen Master-KDC den "admin-server"-Vorgang (krb5-admin-server) neu.
  4. 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