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
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Cloud de Confiance project.
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.enablepermission. 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.-
Install the Google Cloud CLI.
-
Configure the gcloud CLI to use your federated identity.
For more information, see Sign in to the gcloud CLI with your federated identity.
-
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:
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:
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 Regionprojects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
us-central1verwendet wird, muss sich beispielsweise auch in der Regionus-central1befinden.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.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.usein 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=REGIONSnippet 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 describeprüfen. Die Schlüsselressourcen-ID wird fürgcePdKmsKeyNameundkmsKeyfestgelegt, 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=REGIONSnippet 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:
- Eigenen Bucket mit CMEK erstellen Verwenden Sie beim Hinzufügen des Schlüssels zum Bucket einen Schlüssel, den Sie in Schritt 1 erstellt haben.
- Übergeben Sie den Bucket-Namen an das Flag
--bucket, wenn Sie den Cluster erstellen.
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=REGIONSnippet 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.kmsKeyin eine cluster.create-Anfrage ein. Eine Liste der Jobtypen und Argumente, die mit dem Feld--kms-keyverschlüsselt werden, finden Sie unter Cluster.EncryptionConfig.kmsKey.Sie können wichtige Einstellungen mit dem gcloud CLI-Befehl
dataproc clusters describeprüfen. Die Schlüsselressourcen-ID wird fürgcePdKmsKeyNameundkmsKeyfestgelegt, 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=REGIONSnippet 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:
- Eigenen Bucket mit CMEK erstellen Verwenden Sie beim Hinzufügen des Schlüssels zum Bucket einen Schlüssel, den Sie in Schritt 1 erstellt haben.
- Übergeben Sie den Bucket-Namen im Rahmen einer cluster.create-Anfrage an das Feld ClusterConfig.configBucket.
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.
- 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
So aktivieren Sie die Verwendung Ihres Schlüssels durch die Dienstkonten von Managed Service for Apache Spark:
Weisen Sie dem Dienstkonto des Managed Service for Apache Spark-Dienst-Agents die Cloud KMS-Rolle
CryptoKey Encrypter/Decrypterzu. 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.
Aktivieren Sie die Cloud KMS API für das Projekt, in dem Managed Service for Apache Spark-Ressourcen ausgeführt werden.
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.usehinzu. 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.
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:
Sie können die Schlüsseleinstellung mit demgcloud 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 ...
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.