Vom Kunden verwaltete Verschlüsselungsschlüssel (CMEK)

Wenn Sie Dataproc verwenden, werden Cluster- und Jobdaten auf nichtflüchtigen Speichern gespeichert, die mit den Compute Engine-VMs in Ihrem Cluster und in einem Cloud Storage-Staging-Bucket verknüpft sind. Diese Daten auf der nichtflüchtigen Festplatte und im Bucket werden mit einem von Google generierten Datenverschlüsselungsschlüssel (Data Encryption Key, DEK) und einem Schlüsselverschlüsselungsschlüssel (Key Encryption Key, KEK) verschlüsselt.

Mit der CMEK-Funktion können Sie den KEK erstellen, verwenden und widerrufen. Die Verwaltung des DEK obliegt Google. Weitere Informationen zu Datenverschlüsselungsschlüsseln von Google finden Sie unter Verschlüsselung inaktiver Daten.

CMEK mit Clusterdaten verwenden

Sie können vom Kunden verwaltete Verschlüsselungsschlüssel (CMEK) verwenden, um die folgenden Clusterdaten zu verschlüsseln:

  • Daten auf den nichtflüchtigen Speichern, die an VMs in Ihrem Dataproc-Cluster angehängt sind
  • Jobargumentdaten, die an Ihren Cluster gesendet wurden, z. B. ein Abfragestring, der mit einem Spark SQL-Job gesendet wurde
  • Clustermetadaten, Job-Treiberausgabe und andere Daten, die in einen von Ihnen erstellten Dataproc-Staging-Bucket geschrieben werden

So verwenden Sie CMEK für die Verschlüsselung von Clusterdaten:

  1. Erstellen Sie einen oder mehrere Schlüssel mit dem Cloud Key Management Service. Der Ressourcenname, auch Ressourcen-ID eines Schlüssels genannt, den Sie in den nächsten Schritten verwenden, wird so erstellt:
    projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
    
  2. Weisen Sie den folgenden Dienstkonten die folgenden Rollen zu:

    1. Führen Sie Punkt 5 in Compute Engine → Ressourcen mit Cloud KMS-Schlüsseln schützen → Vorbereitung aus, um dem Compute Engine-Dienst-Agent-Dienstkonto die Cloud KMS-Rolle CryptoKey Encrypter/Decrypter zuzuweisen.
    2. Weisen Sie dem Dienstkonto des Cloud Storage-Dienst-Agents die Rolle Cloud KMS CryptoKey Verschlüsseler/Entschlüsseler zu.

    3. Weisen Sie dem Dienstkonto des Dataproc-Dienst-Agents die Rolle Cloud KMS CryptoKey-Verschlüsseler/Entschlüsseler zu. Sie können die Google Cloud CLI verwenden, um die Rolle zuzuweisen:

        gcloud projects add-iam-policy-binding KMS_PROJECT_ID \
        --member serviceAccount:service-PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter
      

      Ersetzen Sie Folgendes:

      KMS_PROJECT_ID: die ID Ihres Google Cloud-Projekts, in dem Cloud KMS ausgeführt wird. Dieses Projekt kann auch das Projekt sein, in dem Dataproc-Ressourcen ausgeführt werden.

      PROJECT_NUMBER: die Projektnummer (nicht die Projekt-ID) Ihres Google Cloud-Projekts, in dem Dataproc-Ressourcen ausgeführt werden.

    4. Aktivieren Sie die Cloud KMS API für das Projekt, in dem Dataproc-Ressourcen ausgeführt werden.

    5. Wenn die Rolle „Dataproc-Dienst-Agent“ nicht mit dem Dienstkonto des Dataproc-Dienst-Agents verknüpft ist, fügen Sie der benutzerdefinierten Rolle, die mit dem Dienstkonto des Dataproc-Dienst-Agents verknüpft ist, die Berechtigung serviceusage.services.use hinzu. Wenn die Rolle „Dataproc-Dienst-Agent“ dem Dienstkonto „Dataproc-Dienst-Agent“ zugewiesen ist, können Sie diesen Schritt überspringen.

  3. Übergeben Sie die Ressourcen-ID Ihres Schlüssels an die Google Cloud CLI oder die Dataproc API, um sie für die Clusterdatenverschlüsselung zu verwenden.

    gcloud-CLI

    • Wenn Sie die Daten des nichtflüchtigen Clusterlaufwerks mit Ihrem Schlüssel verschlüsseln möchten, übergeben Sie beim Erstellen des Clusters die Ressourcen-ID Ihres Schlüssels an das Flag --gce-pd-kms-key.
      gcloud dataproc clusters create CLUSTER_NAME \
          --region=REGION \
          --gce-pd-kms-key='projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME' \
          other arguments ...
      

      Sie können die Schlüsseleinstellung im Befehlszeilentool gcloud ansehen.

      gcloud dataproc clusters describe CLUSTER_NAME \
          --region=REGION
      

      Befehlsausgabe-Snippet:

      ...
      configBucket: dataproc- ...
      encryptionConfig:
      gcePdKmsKeyName: projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name
      ...
      
    • Wenn Sie Daten auf nichtflüchtigen Clusterlaufwerken und Jobargumentdaten mit Ihrem Schlüssel verschlüsseln möchten, übergeben Sie beim Erstellen des Clusters die Ressourcen-ID des Schlüssels an das Flag --kms-key. Eine Liste der Jobtypen und Argumente, die mit dem Flag --kms-key verschlüsselt werden, finden Sie unter Cluster.EncryptionConfig.kmsKey.
      gcloud dataproc clusters create CLUSTER_NAME \
          --region=REGION \
          --kms-key='projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME' \
          other arguments ...
        

      Sie können die Schlüsseleinstellungen mit dem Befehl dataproc clusters describe der gcloud CLI prüfen. Die Schlüsselressourcen-ID ist auf gcePdKmsKeyName und kmsKey festgelegt, damit Ihr Schlüssel für die Verschlüsselung der Daten auf dem nichtflüchtigen Cluster-Speicher und der Jobargumente verwendet wird.

      gcloud dataproc clusters describe CLUSTER_NAME \
          --region=REGION
        

      Befehlsausgabe-Snippet:

      ...
      configBucket: dataproc- ...
      encryptionConfig:
      gcePdKmsKeyName: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
      kmsKey: projects/PROJECT_ID/locations/REGION/keyRings/key-KEY_RING_NAME-name/cryptoKeys/KEY_NAME
      ...
      

    • So verschlüsseln Sie Clustermetadaten, Job-Treiber und andere Ausgabedaten, die in Ihren Dataproc-Staging-Bucket in Cloud Storage geschrieben werden:
      gcloud dataproc clusters create CLUSTER_NAME \
          --region=REGION \
          --bucket=CMEK_BUCKET_NAME \
          other arguments ...
          

      Sie können CMEK-fähige Buckets auch an den Befehl „gcloud dataproc jobs submit“ übergeben, wenn Ihr Job Bucket-Argumente annimmt, wie im folgenden Beispiel für „cmek-bucket“ gezeigt:

      gcloud dataproc jobs submit pyspark gs://cmek-bucket/wordcount.py \
          --region=region \
          --cluster=cluster-name \
          -- gs://cmek-bucket/shakespeare.txt gs://cmek-bucket/counts
        

    REST API

    • Wenn Sie die Daten des nichtflüchtigen Speichers der Cluster-VM mit Ihrem Schlüssel verschlüsseln möchten, fügen Sie das Feld ClusterConfig.EncryptionConfig.gcePdKmsKeyName als Teil einer cluster.create-Anfrage hinzu.

      Sie können die Schlüsseleinstellung mit dem Befehl dataproc clusters describe der gcloud CLI prüfen.

      gcloud dataproc clusters describe CLUSTER_NAME \
          --region=REGION
      

      Befehlsausgabe-Snippet:

      ...
      configBucket: dataproc- ...
      encryptionConfig:
      gcePdKmsKeyName: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
      ...
      
    • Wenn Sie die Daten des nichtflüchtigen Speichers der Cluster-VM und die Jobargumentdaten mit Ihrem Schlüssel verschlüsseln möchten, fügen Sie das Feld Cluster.EncryptionConfig.kmsKey in eine cluster.create-Anfrage ein. Eine Liste der Jobtypen und Argumente, die mit dem Feld --kms-key verschlüsselt werden, finden Sie unter Cluster.EncryptionConfig.kmsKey.

      Sie können die Schlüsseleinstellungen mit dem Befehl dataproc clusters describe der gcloud CLI prüfen. Die Schlüsselressourcen-ID ist auf gcePdKmsKeyName und kmsKey festgelegt, damit Ihr Schlüssel für die Verschlüsselung der Daten auf dem nichtflüchtigen Cluster-Speicher und der Jobargumente verwendet wird.

      gcloud dataproc clusters describe CLUSTER_NAME \
          --region=REGION
      

      Befehlsausgabe-Snippet:

      ...
      configBucket: dataproc- ...
      encryptionConfig:
      gcePdKmsKeyName: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
      kmsKey: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
      
    • To encrypt cluster metadata, job driver, and other output data written to your Dataproc staging bucket in Cloud Storage:
      gcloud dataproc clusters create CLUSTER_NAME \
          --region=REGION \
          --bucket=CMEK_BUCKET_NAMEt \
          other arguments ...
      

      Sie können CMEK-fähige Buckets auch an den Befehl „gcloud dataproc jobs submit“ übergeben, wenn Ihr Job Bucket-Argumente annimmt, wie im folgenden Beispiel für „cmek-bucket“ gezeigt:

      gcloud dataproc jobs submit pyspark gs://cmek-bucket/wordcount.py \
          --region=region \
          --cluster=cluster-name \
          -- gs://cmek-bucket/shakespeare.txt gs://cmek-bucket/counts
        

CMEK mit Daten von Workflow-Vorlagen verwenden

Jobargumentdaten von Dataproc-Workflowvorlagen, z. B. der Abfragestring eines Spark SQL-Jobs, können mit CMEK verschlüsselt werden. Führen Sie die Schritte 1, 2 und 3 in diesem Abschnitt aus, um CMEK mit Ihrer Dataproc-Workflowvorlage zu verwenden. Unter WorkflowTemplate.EncryptionConfig.kmsKey finden Sie eine Liste der Jobtypen und Argumente für Workflowvorlagen, die mit CMEK verschlüsselt werden, wenn diese Funktion aktiviert ist.

  1. Erstellen Sie einen Schlüssel mithilfe des Cloud Key Management Service (Cloud KMS). Der Ressourcenname des Schlüssels, den Sie in den nächsten Schritten verwenden, wird so erstellt:
    projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name
    
  2. So ermöglichen Sie den Dataproc-Dienstkonten die Verwendung Ihres Schlüssels:

    1. Weisen Sie dem Dataproc-Dienstkonto die Cloud KMS-Rolle CryptoKey Encrypter/Decrypter zu. Sie können die Rolle mit der gcloud CLI zuweisen:

       gcloud projects add-iam-policy-binding KMS_PROJECT_ID \
       --member serviceAccount:service-PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
       --role roles/cloudkms.cryptoKeyEncrypterDecrypter
      

      Ersetzen Sie Folgendes:

      KMS_PROJECT_ID: die ID Ihres Google Cloud-Projekts, in dem Cloud KMS ausgeführt wird. Dieses Projekt kann auch das Projekt sein, in dem Dataproc-Ressourcen ausgeführt werden.

      PROJECT_NUMBER: die Projektnummer (nicht die Projekt-ID) Ihres Google Cloud-Projekts, in dem Dataproc-Ressourcen ausgeführt werden.

    2. Aktivieren Sie die Cloud KMS API für das Projekt, in dem Dataproc-Ressourcen ausgeführt werden.

    3. Wenn die Rolle „Dataproc-Dienst-Agent“ nicht mit dem Dienstkonto des Dataproc-Dienst-Agents verknüpft ist, fügen Sie der benutzerdefinierten Rolle, die mit dem Dienstkonto des Dataproc-Dienst-Agents verknüpft ist, die Berechtigung serviceusage.services.use hinzu. Wenn die Rolle „Dataproc-Dienst-Agent“ dem Dienstkonto „Dataproc-Dienst-Agent“ zugewiesen ist, können Sie diesen Schritt überspringen.

  3. Sie können die Google Cloud CLI oder die Dataproc API verwenden, um den in Schritt 1 erstellten Schlüssel für einen Workflow festzulegen. Nachdem der Schlüssel für einen Workflow festgelegt wurde, werden alle Argumente und Abfragen des Workflow-Jobs mit dem Schlüssel für jeden der Jobtypen und Argumente verschlüsselt, die in WorkflowTemplate.EncryptionConfig.kmsKey aufgeführt sind.

    gcloud-CLI

    Übergeben Sie die Ressourcen-ID Ihres Schlüssels an das Flag --kms-key, wenn Sie die Workflow-Vorlage mit dem Befehl gcloud dataproc workflow-templates create erstellen.

    Beispiel:

    gcloud dataproc workflow-templates create my-template-name \
        --region=region \
        --kms-key='projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name' \
        other arguments ...
    
    Sie können die Schlüsseleinstellung im Befehlszeilentool gcloud ansehen.
    gcloud dataproc workflow-templates describe TEMPLATE_NAME \
        --region=REGION
    
    ...
    id: my-template-name
    encryptionConfig:
    kmsKey: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
    ...
    

    REST API

    Verwenden Sie WorkflowTemplate.EncryptionConfig.kmsKey als Teil einer workflowTemplates.create-Anfrage.

    Sie können die Schlüsseleinstellung mit der Anfrage workflowTemplates.get prüfen. Die zurückgegebene JSON-Datei enthält folgende kmsKey-Elemente:

    ...
    "id": "my-template-name",
    "encryptionConfig": {
      "kmsKey": "projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name"
    },
    

Cloud External Key Manager

Mit dem Cloud External Key Manager (Cloud EKM) (EKM) können Sie Dataproc-Daten mit Schlüsseln schützen, die von einem unterstützten externen Schlüsselverwaltungspartner verwaltet werden. Die Schritte, die Sie zur Verwendung von EKM in Dataproc verwenden, sind die gleichen wie die zum Einrichten von CMEK-Schlüsseln, mit dem folgenden Unterschied: Ihr Schlüssel verweist auf einen URI für extern verwaltete Schlüssel (siehe Cloud EKM – Übersicht).

Cloud EKM-Fehler

Wenn Sie Cloud EKM verwenden, kann ein Versuch, einen Cluster zu erstellen, aufgrund von Fehlern im Zusammenhang mit Eingaben, Cloud EKM, dem Partnersystem für die externe Schlüsselverwaltung oder der Kommunikation zwischen EKM und dem externen System fehlschlagen. Wenn Sie die REST API oder die Google Cloud Console verwenden, werden Fehler in Logging protokolliert. Sie können die Fehler des fehlgeschlagenen Clusters auf dem Tab Protokoll ansehen prüfen.