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 den Compute Engine-VMs in Ihrem Cluster zugeordnet sind, sowie in einem Staging-Bucket in Cloud Storage. Standardmäßig werden diese Daten auf dem persistenten Datenträger und im Bucket mit einem von Google generierten Datenverschlüsselungsschlüssel (Data Encryption Key, DEK) und Schlüsselverschlüsselungsschlüssel (Key Encryption Key, KEK) verschlüsselt.

Wenn Sie den Schlüsselverschlüsselungsschlüssel (Key Encryption Key, KEK) steuern und verwalten möchten, können Sie kundenverwaltete Verschlüsselungsschlüssel (Customer-Managed Encryption Keys, CMEK) verwenden. Google behält die Kontrolle über den Datenverschlüsselungsschlüssel (Data Encryption Key, DEK). Weitere Informationen zu Google-Datenverschlüsselungsschlüsseln finden Sie unter Verschlüsselung ruhender Daten.

CMEK-Clusterdatenverschlüsselung

Sie können kundenverwaltete Verschlüsselungsschlüssel (Customer-Managed Encryption Keys, CMEKs) verwenden, um die folgenden Clusterdaten zu verschlüsseln:

  • Daten auf persistenten Laufwerken, die an VMs in Managed Service for Apache Spark-Clustern angehängt sind
  • Daten von Jobargumenten, die an Ihren Cluster gesendet werden, z. B. ein Abfragestring, der mit einem Spark SQL-Job gesendet wird
  • Cluster-Metadaten, Job-Treiber-Ausgabe und andere Daten, die in den Staging-Bucket Ihres Managed Service for Apache Spark-Clusters geschrieben werden

Hinweis

  1. In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance 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

  2. Verify that billing is enabled for your Cloud de Confiance project.

  3. Enable the Dataproc, Cloud Key Management Service, Compute Engine, and Cloud Storage APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  4. Install the Google Cloud CLI.

  5. Configure the gcloud CLI to use your federated identity.

    For more information, see Sign in to the gcloud CLI with your federated identity.

  6. To initialize the gcloud CLI, run the following command:

    gcloud init

Schlüssel erstellen

Wenn Sie Ihre Managed Service for Apache Spark-Ressourcen mit CMEK schützen möchten, können Sie das Erstellen von Schlüsseln automatisieren oder Schlüssel manuell erstellen.

Automatisierte Schlüsselerstellung

Mit Autokey können Sie die CMEK-Bereitstellung und -Zuweisung automatisieren. Mit Autokey werden Schlüsselbunde und Schlüssel bei der Ressourcenerstellung auf Anfrage generiert. 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

So erstellen Sie manuell Schlüssel für die CMEK-Verschlüsselung von Clusterdaten:

  1. Erstellen Sie einen oder mehrere Schlüssel mit 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 Ort wie die verschlüsselte Ressource befinden. Der CMEK, der zum Verschlüsseln einer Ressource in der Region us-central1 verwendet wird, muss sich beispielsweise auch in der Region us-central1 befinden.

  2. Damit jedes der folgenden Dienstkonten, Compute Engine-Dienst-Agent-Dienstkonto, Cloud Storage-Dienst-Agent-Dienstkonto und 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, Compute Engine-Dienst-Agent-Dienstkonto, Cloud Storage-Dienst-Agent-Dienstkonto und Managed Service for Apache Spark-Dienst-Agent-Dienstkonto, die IAM-Rolle Cloud KMS CryptoKey-Verschlüsseler/Entschlüsseler (roles/cloudkms.cryptoKeyEncrypterDecrypter) für Ihr Projekt zu gewähren.

    Beispiel für die Zuweisung der Rolle „Cloud KMS CryptoKey Encrypter/Decrypter“ zum Dienstkonto des Managed Service for Apache Spark-Dienst-Agents mit der Google Cloud CLI:

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

    Ersetzen Sie Folgendes:

    KMS_PROJECT_ID: die ID Ihres Cloud de Confiance -Projekts, das den Cloud KMS-Schlüssel enthält.

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

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

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 die Daten auf dem nichtflüchtigen Speicher des Clusters 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 über das gcloud-Befehlszeilentool überprüfen.

    gcloud dataproc clusters describe CLUSTER_NAME \
        --region=REGION
        

    Snippet der Befehlsausgabe:

    ...
    configBucket: dataproc- ...
      encryptionConfig:
        gcePdKmsKeyName: projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name
    ...
        
  • Wenn Sie Daten auf nichtflüchtigen Speichern von Clustern und Jobargumentdaten mit Ihrem Schlüssel verschlüsseln möchten, übergeben Sie die Ressourcen-ID des Schlüssels beim Erstellen des Clusters an das Flag --kms-key. Unter [Cluster.EncryptionConfig.kmsKey](/managed-spark/docs/reference/rest/v1/ClusterConfig#EncryptionConfig.FIELDS.kms_key) finden Sie eine Liste der Jobtypen und Argumente, die mit dem Flag `--kms-key` verschlüsselt werden.
    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 wichtige Einstellungen mit dem gcloud CLI-Befehl dataproc clusters describe prüfen. Die Schlüsselressourcen-ID wird für gcePdKmsKeyName und kmsKey festgelegt, damit Ihr Schlüssel für die Verschlüsselung von Daten im nichtflüchtigen Speicher des Clusters und von Jobargumentdaten verwendet wird.

    gcloud dataproc clusters describe CLUSTER_NAME \
        --region=REGION
          

    Snippet der Befehlsausgabe:

    ...
    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 Clustermetadaten, Jobtreiber und andere Ausgabedaten, die in Ihren Managed Service for Apache Spark-Staging-Bucket in Cloud Storage geschrieben werden:
    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        --bucket=CMEK_BUCKET_NAME \
        other arguments ...
            

    Sie können auch CMEK-fähige Buckets an den Befehl `gcloud dataproc jobs submit` übergeben, wenn Ihr Job Bucket-Argumente akzeptiert. Das folgende Beispiel `cmek-bucket` zeigt, wie das geht:

    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 von Cluster-VMs mit Ihrem Schlüssel verschlüsseln möchten, fügen Sie das Feld ClusterConfig.EncryptionConfig.gcePdKmsKeyName in eine cluster.create-Anfrage ein.

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

    gcloud dataproc clusters describe CLUSTER_NAME \
        --region=REGION
        

    Snippet der Befehlsausgabe:

    ...
    configBucket: dataproc- ...
      encryptionConfig:
        gcePdKmsKeyName: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
    ...
        
  • Wenn Sie Daten im nichtflüchtigen Speicher von Cluster-VMs und Daten von Jobargumenten 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 wichtige Einstellungen mit dem gcloud CLI-Befehl dataproc clusters describe prüfen. Die Schlüsselressourcen-ID wird für gcePdKmsKeyName und kmsKey festgelegt, damit Ihr Schlüssel für die Verschlüsselung von Daten im nichtflüchtigen Speicher des Clusters und von Jobargumentdaten verwendet wird.

    gcloud dataproc clusters describe CLUSTER_NAME \
        --region=REGION
        

    Snippet der Befehlsausgabe:

    ...
    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 Clustermetadaten, Jobtreiber und andere Ausgabedaten, die in Ihren Managed Service for Apache Spark-Staging-Bucket in Cloud Storage geschrieben werden:
    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        --bucket=CMEK_BUCKET_NAME \
        other arguments ...
        

    Sie können auch CMEK-fähige Buckets an den Befehl `gcloud dataproc jobs submit` übergeben, wenn Ihr Job Bucket-Argumente akzeptiert. Das folgende Beispiel `cmek-bucket` zeigt, wie das geht:

    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. der Abfragestring eines Spark SQL-Jobs, können mit CMEK verschlüsselt werden. Folgen Sie den Schritten 1, 2 und 3 in diesem Abschnitt, um CMEK mit Ihrer Managed Service for Apache Spark-Workflowvorlage zu verwenden. Eine Liste der Workflowvorlagen-Jobtypen und -Argumente, 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 aktivieren Sie die Verwendung Ihres Schlüssels durch die Dienstkonten von Managed Service for Apache Spark:

    1. Weisen Sie dem Dienstkonto des Managed Service for Apache Spark-Dienst-Agents 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.s3ns-system.iam.gserviceaccount.com \
       --role roles/cloudkms.cryptoKeyEncrypterDecrypter
      

      Ersetzen Sie Folgendes:

      KMS_PROJECT_ID: Die ID Ihres Cloud de Confiance -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 Cloud de Confiance 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 Service Agent“ nicht an das Dienstkonto des Managed Service for Apache Spark-Dienst-Agents angehängt ist, fügen Sie der benutzerdefinierten Rolle, die an das Dienstkonto des Managed Service for Apache Spark-Dienst-Agents angehängt ist, die Berechtigung serviceusage.services.use hinzu. Wenn die Rolle „Managed Service for Apache Spark Service Agent“ dem Dienstkonto „Managed Service for Apache Spark Service Agent“ zugewiesen ist, können Sie diesen Schritt überspringen.

  3. Sie können die gcloud CLI oder die Dataproc API verwenden, um den in Schritt 1 erstellten Schlüssel für einen Workflow festzulegen. Sobald der Schlüssel für einen Workflow festgelegt ist, werden alle Workflowjob-Argumente und ‑Abfragen mit dem Schlüssel für alle in WorkflowTemplate.EncryptionConfig.kmsKey aufgeführten Jobtypen und Argumente verschlüsselt.

    gcloud-CLI

    Übergeben Sie die Ressourcen-ID Ihres Schlüssels an das Flag --kms-key, wenn Sie die Workflowvorlage 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 mit dem gcloud-Befehlszeilentool prüfen.
    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 überprüfen. Der zurückgegebene JSON-Code 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 Daten von Managed Service for Apache Spark mit Schlüsseln schützen, die von einem unterstützten Partner für die externe Schlüsselverwaltung verwaltet werden. Die Schritte, die Sie ausführen, um Cloud EKM in Managed Service for Apache Spark zu verwenden, sind dieselben wie die Schritte zum Einrichten von CMEK-Schlüsseln. Der einzige Unterschied besteht darin, dass Ihr Schlüssel auf einen URI für den extern verwalteten Schlüssel verweist (siehe Cloud EKM-Übersicht).

Cloud EKM-Fehler

Wenn Sie Cloud EKM verwenden, kann beim Erstellen eines Clusters ein Fehler auftreten, der mit Eingaben, Cloud EKM, dem Partnersystem für die externe Schlüsselverwaltung oder der Kommunikation zwischen Cloud EKM und dem externen System zusammenhängt. Wenn Sie die REST API oder die Cloud de Confiance -Console verwenden, werden Fehler in Cloud Logging protokolliert. Auf dem Tab View Log (Log ansehen) können Sie die Fehler des fehlgeschlagenen Clusters untersuchen.