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 Cloud Storage-Staging-Bucket. Standardmäßig werden diese Daten auf nichtflüchtigen Speichern und in Buckets 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 (Key Encryption Key, KEK) selbst steuern und verwalten möchten, können Sie kundenverwaltete Verschlüsselungsschlüssel (Customer-Managed Encryption Keys, CMEK) verwenden. Google steuert weiterhin 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 (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
- An Ihren Cluster gesendete Jobargumentdaten, z. B. ein Abfragestring, der mit einem Spark SQL-Job gesendet wird
- Cluster-Metadaten, Jobtreiber-Ausgabe und andere Daten, die in den Staging-Bucket Ihres Managed Service for Apache Spark-Clusters geschrieben werden
Hinweis
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud 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 die Erstellung von Schlüsseln automatisieren oder Schlüssel manuell erstellen.
Automatische Schlüsselerstellung
Verwenden Sie Autokey, um die CMEK-Bereitstellung und -Zuweisung zu automatisieren. Autokey generiert Schlüsselbunde und Schlüssel bei der Ressourcenerstellung auf Anfrage. Dienst-Agents verwenden die Schlüssel für Verschlüsselungs- und Entschlüsselungsvorgänge. Bei Bedarf erstellt Autokey die Agents und weist ihnen die erforderlichen IAM-Rollen (Identity and Access Management) zu. 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, ist so aufgebaut:
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 Regionprojects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
us-central1verwendet wird, muss sich ebenfalls in der Regionus-central1befinden.Damit die 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 haben, bitten Sie Ihren Administrator, den 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 mithilfe der Google Cloud CLI:
gcloud projects add-iam-policy-binding KMS_PROJECT_ID \ --member serviceAccount:service-PROJECT_NUMBER@dataproc-accounts. \ --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.Wenn die Rolle „Managed Service for Apache Spark Service Agent“ nicht an das Dienstkonto „Managed Service for Apache Spark Service Agent“ angehängt ist, fügen Sie die Berechtigung
serviceusage.services.useeiner benutzerdefinierten Rolle hinzu, die an das Dienstkonto „Managed Service for Apache Spark Service Agent“ 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 Daten auf nichtflüchtigen Speichern 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 mit dem
gcloud-Befehlszeilentool prü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 des Clusters und Jobargumentdaten mit Ihrem Schlüssel verschlüsseln möchten, übergeben Sie die Ressourcen-ID des Schlüssels an das Flag
--kms-key, 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](/managed-spark/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-Befehl
dataproc clusters describeprüfen. Die Schlüsselressourcen-ID wird fürgcePdKmsKeyNameundkmsKeyfestgelegt, um Ihren Schlüssel für die Verschlüsselung von nichtflüchtigem Clusterspeicher und Jobargumentdaten zu verwenden.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 beim Erstellen des Clusters an das Flag
--bucket.
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, wie im folgenden „cmek-bucket“-Beispiel 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 in eine cluster.create-Anfrage ein.
Sie können die Schlüsseleinstellung mit dem gcloud CLI-Befehl
dataproc clusters describeprü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 der Cluster-VM 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 die Schlüsseleinstellungen mit dem gcloud CLI-Befehl
dataproc clusters describeprüfen. Die Schlüsselressourcen-ID wird fürgcePdKmsKeyNameundkmsKeyfestgelegt, um Ihren Schlüssel für die Verschlüsselung von nichtflüchtigem Clusterspeicher und Jobargumentdaten zu verwenden.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, wie im folgenden „cmek-bucket“-Beispiel 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 Workflowvorlagendaten verwenden
Daten zu Jobargumenten in Managed Service for Apache Spark-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 Managed Service for Apache Spark-Workflowvorlage zu verwenden. Eine Liste der Jobtypen und Argumente von Workflowvorlagen, die bei Aktivierung dieses Features mit CMEK verschlüsselt werden, 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 ermöglichen Sie den Managed Service for Apache Spark-Dienstkonten, Ihren Schlüssel zu verwenden:
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. \ --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.
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-Dienst-Agent“ nicht an das Dienstkonto für den Managed Service for Apache Spark-Dienst-Agent angehängt ist, fügen Sie die Berechtigung
serviceusage.services.useder benutzerdefinierten Rolle hinzu, die an das Dienstkonto für den Managed Service for Apache Spark-Dienst-Agent angehängt ist. Wenn die Rolle „Managed Service for Apache Spark-Dienst-Agent“ an das Dienstkonto „Managed Service for Apache Spark-Dienst-Agent“ angehängt 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 Workflow-Jobargumente und -Abfragen mit dem Schlüssel für alle 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 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 prüfen. Der zurückgegebene JSON-Code enthält die
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 Partner für die externe Schlüsselverwaltung verwaltet werden. Die Schritte zur Verwendung von Cloud EKM in Managed Service for Apache Spark sind dieselben 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 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 Cloud EKM und dem externen System fehlschlagen. Wenn Sie die REST API oder die Google Cloud Console verwenden, werden Fehler in Cloud Logging protokolliert. Sie können die Fehler des fehlgeschlagenen Clusters auf dem Tab Log ansehen prüfen.