Vom Kunden verwaltete Verschlüsselungsschlüssel (CMEK)

Wenn Sie Managed Service for Apache Spark 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. Standardmäßig werden diese nichtflüchtigen Speicher- und Bucket-Daten mit einem von Google generierten Datenverschlüsselungsschlüssel (Data Encryption Key, DEK) und einem Schlüsselverschlüsselungsschlüssel (Key Encryption Key, KEK) verschlüsselt.

Wenn Sie den Schlüsselverschlüsselungsschlüssel (KEK) steuern und verwalten möchten, können Sie kundenverwaltete Verschlüsselungsschlüssel (Customer-Managed Encryption Keys, CMEK) verwenden. Google steuert weiterhin den Daten verschlüsselungsschlüssel (DEK). Weitere Informationen zu Datenverschlüsselungsschlüsseln von Google finden Sie unter Verschlüsselung inaktiver Daten.

CMEK-Clusterdatenverschlüsselung

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

  • Daten auf nichtflüchtigen Speichern, die an Managed Service for Apache Spark-Cluster-VMs angehängt sind
  • Jobargumentdaten, die an Ihren Cluster gesendet werden, z. B. eine Abfragezeichenfolge, die mit einem Spark SQL-Job gesendet wird
  • Cluster-Metadaten, Job-Treiberausgabe, und andere Daten, die in den Staged Service for Apache Spark-Cluster Staging-Bucket geschrieben werden

Hinweis

  1. Melden Sie sich in Ihrem Google Cloud Konto an. Wenn Sie noch kein Google Cloud-Kunde sind, erstellen Sie ein Konto, um zu sehen, wie sich unsere Produkte in realen Szenarien schlagen. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Dataproc, Cloud Key Management Service, Compute Engine, and Cloud Storage APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. Installieren Sie die Google Cloud CLI.

  6. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  7. Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Dataproc, Cloud Key Management Service, Compute Engine, and Cloud Storage APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  11. Installieren Sie die Google Cloud CLI.

  12. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  13. Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init

Schlüssel erstellen

Zum Schutz Ihrer Managed Service for Apache Spark-Ressourcen mit CMEK können Sie die Erstellung von Schlüsseln automatisieren oder Schlüssel manuell erstellen.

Automatisierte Schlüsselerstellung

Verwenden Sie Autokey, um die CMEK-Bereitstellung und -Zuweisung zu automatisieren. Autokey generiert Schlüsselbunde und Schlüssel bei Bedarf, wenn Ressourcen erstellt werden. Dienst-Agents verwenden die Schlüssel bei Ver- und Entschlüsselungsvorgängen. Bei Bedarf erstellt Autokey die Agents und gewährt ihnen die erforderlichen IAM-Rollen (Identity and Access Management). Weitere Informationen finden Sie unter Übersicht: Autokey.

Manuelle Schlüsselerstellung

Führen Sie die folgenden Schritte aus, um Schlüssel für die CMEK-Verschlüsselung von Clusterdaten manuell zu erstellen:

  1. Erstellen Sie einen oder mehrere Schlüssel mit dem Cloud KMS. 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
    
    Der Schlüssel (CMEK) muss sich am selben Standort wie die verschlüsselte Ressource befinden. Beispiel: Der CMEK, der zum Verschlüsseln einer Ressource in der Region us-central1 verwendet wird, muss sich ebenfalls in der Region us-central1 befinden.

  2. Damit jedes der folgenden Dienstkonten – das Compute Engine-Dienst-Agent-Dienstkonto, das Cloud Storage-Dienst-Agent-Dienstkonto und das Managed Service for Apache Spark-Dienst-Agent-Dienstkonto – die erforderlichen Berechtigungen zum Schutz von Ressourcen mithilfe von Cloud KMS-Schlüsseln hat, bitten Sie Ihren Administrator, jedem der folgenden Dienstkonten die Cloud KMS CryptoKey-Verschlüsseler/Entschlüsseler-Rolle (roles/cloudkms.cryptoKeyEncrypterDecrypter) für Ihr Projekt zu gewähren: Compute Engine-Dienst-Agent-Dienstkonto, Cloud Storage-Dienst-Agent-Dienstkonto und Managed Service for Apache Spark-Dienst-Agent-Dienstkonto.

    Beispiel für die Zuweisung der Cloud KMS CryptoKey-Verschlüsseler/Entschlüsseler-Rolle an das Managed Service for Apache Spark-Dienst-Agent-Dienstkonto mit der Google Cloud CLI:

    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, das den Cloud KMS-Schlüssel enthält.

    PROJECT_NUMBER: die Projektnummer (nicht die Projekt-ID) Ihres Google Cloud Projekts, in dem Managed Service for Apache Spark-Ressourcen ausgeführt werden.

  3. Wenn die Rolle „Managed Service for Apache Spark-Dienst-Agent“ nicht an das Managed Service for Apache Spark-Dienst-Agent-Dienstkonto angehängt ist, fügen Sie die Berechtigung serviceusage.services.use einer benutzerdefinierten Rolle hinzu, die an das Managed Service for Apache Spark-Dienst-Agent-Dienstkonto angehängt ist.

Cluster mit CMEK erstellen

Übergeben Sie die Ressourcen-ID Ihres Schlüssels, wenn Sie den Managed Service for Apache Spark-Cluster erstellen.

gcloud CLI

  • Wenn Sie Clusterdaten auf nichtflüchtigen Speichern mit Ihrem Schlüssel verschlüsseln möchten, übergeben Sie die Ressourcen-ID Ihres Schlüssels an das --gce-pd-kms-key Flag wenn Sie den Cluster erstellen.
    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 Clusterdaten auf nichtflüchtigen Speichern und Jobargumentdaten mit Ihrem Schlüssel verschlüsseln möchten, übergeben Sie die Ressourcen-ID des Schlüssels an das --kms-key Flag, wenn Sie den Cluster erstellen. Eine Liste der Jobtypen und Argumente, die mit dem Flag `--kms-key` verschlüsselt werden, finden Sie unter [Cluster.EncryptionConfig.kmsKey](/dataproc/docs/reference/rest/v1/ClusterConfig#EncryptionConfig.FIELDS.kms_key)
    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 gcloud CLI dataproc clusters describe Befehl prüfen. Die Schlüsselressourcen-ID wird für gcePdKmsKeyName und kmsKey festgelegt, um Ihren Schlüssel für die Verschlüsselung von Clusterdaten auf nichtflüchtigen Speichern und Jobargumentdaten zu verwenden.

    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
    ...
        
  • So verschlüsseln Sie Cluster-Metadaten, Job-Treiber und andere Ausgabedaten, die in den Staging-Bucket Ihres Managed Service for Apache Spark-Clusters 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. Informationen dazu finden Sie im folgenden `cmek-bucket`-Beispiel:

    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 Daten auf nichtflüchtigen Speichern von Cluster-VMs mit Ihrem Schlüssel verschlüsseln möchten, fügen Sie das ClusterConfig.EncryptionConfig.gcePdKmsKeyName als Teil einer cluster.create hinzu.

    Sie können die Schlüsseleinstellung mit dem gcloud CLI dataproc clusters describe Befehl 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 Daten auf nichtflüchtigen Speichern von Cluster-VMs und Jobargumentdaten mit Ihrem Schlüssel verschlüsseln möchten, fügen Sie das Cluster.EncryptionConfig.kmsKey Feld als Teil einer cluster.create Anfrage hinzu. Eine Liste der Jobtypen und Argumente, die mit dem --kms-key Feld verschlüsselt werden, finden Sie unter Cluster.EncryptionConfig.kmsKey.

    Sie können die Schlüsseleinstellungen mit dem gcloud CLI dataproc clusters describe Befehl prüfen. Die Schlüsselressourcen-ID wird für gcePdKmsKeyName und kmsKey festgelegt, um Ihren Schlüssel für die Verschlüsselung von Clusterdaten auf nichtflüchtigen Speichern und Jobargumentdaten zu verwenden.

    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
    ...
        
  • So verschlüsseln Sie Cluster-Metadaten, Job-Treiber und andere Ausgabedaten, die in den Staging-Bucket Ihres Managed Service for Apache Spark-Clusters 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. Informationen dazu finden Sie im folgenden `cmek-bucket`-Beispiel:

    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 Workflowvorlagendaten verwenden

Jobargumentdaten für Managed Service for Apache Spark-Workflowvorlagen, z. B. die Abfragezeichenfolge 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 Managed Service for Apache Spark-Workflowvorlage zu verwenden. Eine Liste der Jobtypen und Argumente für Workflowvorlagen, die mit CMEK verschlüsselt werden, wenn diese Funktion aktiviert ist, finden Sie unter WorkflowTemplate.EncryptionConfig.kmsKey.

  1. Erstellen Sie einen Schlüssel mit 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 Managed Service for Apache Spark-Dienstkonten die Verwendung Ihres Schlüssels:

    1. Weisen Sie dem Managed Service for Apache Spark-Dienst-Agent-Dienstkonto die Cloud KMS-Rolle CryptoKey Encrypter/Decrypter zu. Sie können die gcloud 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 Managed Service for Apache Spark-Ressourcen ausgeführt werden.

      PROJECT_NUMBER: die Projektnummer (nicht die Projekt-ID) Ihres Google Cloud Projekts, in dem Managed Service for Apache Spark-Ressourcen ausgeführt werden.

    2. Aktivieren Sie die Cloud KMS API für das Projekt, in dem Managed Service for Apache Spark-Ressourcen ausgeführt werden.

    3. Wenn die Rolle „Managed Service for Apache Spark-Dienst-Agent“ nicht an das Managed Service for Apache Spark-Dienst-Agent-Dienstkonto angehängt ist, fügen Sie die Berechtigung serviceusage.services.use der benutzerdefinierten Rolle hinzu, die an das Managed Service for Apache Spark-Dienst-Agent-Dienstkonto angehängt ist. Wenn die Rolle „Managed Service for Apache Spark-Dienst-Agent“ an das Managed Service for Apache Spark-Dienst-Agent-Dienstkonto angehängt ist, können Sie diesen Schritt überspringen.

  3. Sie können mit der gcloud CLI oder der Dataproc API den in Schritt 1 erstellten Schlüssel für einen Workflow festlegen. Sobald der Schlüssel für einen Workflow festgelegt ist, werden alle Workflow-Jobargumente und -Abfragen mit dem Schlüssel für alle in WorkflowTemplate.EncryptionConfig.kmsKeyaufgeführten Jobtypen und Argumente verschlüsselt.

    gcloud CLI

    Übergeben Sie die Ressourcen-ID Ihres Schlüssels an das --kms-key Flag, wenn Sie die Workflowvorlage mit dem gcloud dataproc workflow-templates create Befehl 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 Befehlszeilengcloudtool 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 einer workflowTemplates.get Anfrage prüfen. Das zurückgegebene JSON enthält kmsKey:

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

Cloud External Key Manager

Mit Cloud External Key Manager (Cloud EKM) können Sie Managed Service for Apache Spark-Daten mit Schlüsseln schützen, die von einem unterstützten externen Schlüsselverwaltungspartnerverwaltet werden. Die Schritte, die Sie zur Verwendung von Cloud EKM in Managed Service for Apache Spark 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 den extern verwalteten Schlüssel (siehe Übersicht zu Cloud EKM).

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 Cloud EKM und dem externen System fehlschlagen. Wenn Sie die REST API oder die Google Cloud Console verwenden, werden Fehler in Cloud Logging protokolliert. Auf dem Tab Log ansehen können Sie die Fehler des fehlgeschlagenen Clusters untersuchen.