Lorsque vous utilisez Managed Service pour Apache Spark, les données de cluster et de tâche sont stockées sur des disques persistants associés aux VM Compute Engine de votre cluster et d'un bucket de préproduction Cloud Storage staging bucket. Par défaut, les données de disque persistant et de bucket sont chiffrées à l'aide d'une clé de chiffrement de données (DEK, Data Encryption Key) générée par Google et d'une clé de chiffrement de clé (KEK, Key Encryption Key).
Si vous souhaitez contrôler et gérer la clé de chiffrement de clé (KEK), vous pouvez utiliser les clés de chiffrement gérées par le client (CMEK, Customer-Managed Encryption Keys) (Google continue de contrôler la clé de chiffrement des données (DEK)). Pour plus d'informations sur les clés de chiffrement des données Google, consultez la page Chiffrement au repos.
Chiffrement des données de cluster avec CMEK
Vous pouvez utiliser des clés de chiffrement gérées par le client (CMEK) pour chiffrer les données de cluster suivantes :
- Données sur les disques persistants associés aux VM de cluster Managed Service pour Apache Spark
- Données d'argument de tâche envoyées à votre cluster, telles qu'une chaîne de requête envoyée avec une tâche Spark SQL
- Métadonnées de cluster, résultats du pilote de tâches, et autres données écrites dans le cluster Managed Service pour Apache Spark bucket de préproduction
Avant de commencer
- Connectez-vous à votre Google Cloud compte. Si vous n'avez jamais utilisé Google Cloud, créez un compte pour évaluer les performances de nos produits dans des scénarios réels. Les nouveaux clients bénéficient également de 300 $de crédits sans frais pour exécuter, tester et déployer des charges de travail.
-
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.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Installez la Google Cloud CLI.
-
Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.
-
Pour initialiser la gcloud CLI, exécutez la commande suivante :
gcloud init -
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.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Installez la Google Cloud CLI.
-
Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.
-
Pour initialiser la gcloud CLI, exécutez la commande suivante :
gcloud init
Créer des clés
Pour protéger vos ressources Managed Service pour Apache Spark avec CMEK, vous pouvez automatiser la création de clés ou les créer manuellement.
Création automatique de clés
Utilisez Autokey pour automatiser le provisionnement de CMEK et l'attribution. Autokey génère des trousseaux de clés et des clés à la demande lors de la création de ressources. Les agents de service utilisent les clés dans les opérations de chiffrement et de déchiffrement. Si nécessaire, Autokey crée les agents et leur attribue les rôles IAM (Identity and Access Management) requis. Pour en savoir plus, consultez Présentation d'Autokey.
Création manuelle de clés
Suivez ces étapes pour créer manuellement des clés pour le chiffrement des données de cluster avec CMEK :
Créez une ou plusieurs clés à l'aide de Cloud KMS. Le nom de la ressource, également appelé ID de ressource d'une clé, que vous utiliserez lors des étapes suivantes, se construit de la façon suivante :
La clé (CMEK) doit se trouver au même emplacement que la ressource chiffrée. Par exemple, la clé CMEK utilisée pour chiffrer une ressource dans la régionprojects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
us-central1doit également se trouver dans la régionus-central1.Pour vous assurer que chacun des comptes de service suivants (compte de service de l'agent de service Compute Engine, compte de service de l'agent de service Cloud Storage et compte de service de l'agent de service Managed Service pour Apache Spark) dispose des autorisations nécessaires pour protéger des ressources à l'aide de clés Cloud KMS, demandez à votre administrateur d'accorder le rôle IAM Chiffreur/Déchiffreur de CryptoKeys Cloud KMS (
roles/cloudkms.cryptoKeyEncrypterDecrypter) à chacun des comptes de service suivants : compte de service de l'agent de service Compute Engine, compte de service de l'agent de service Cloud Storage et compte de service de l'agent de service Managed Service pour Apache Spark, sur votre projet.Exemple d'attribution du rôle Chiffreur/Déchiffreur de CryptoKeys Cloud KMS au compte de service de l'agent de service Managed Service pour Apache Spark à l'aide de 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
Remplacez les éléments suivants :
KMS_PROJECT_ID: ID de votre Google Cloud projet qui contient la clé Cloud KMS.PROJECT_NUMBER: numéro de votre Google Cloud projet qui exécute les ressources Managed Service pour Apache Spark (et non son ID).Si le rôle d'agent de service Managed Service pour Apache Spark n'est pas associé à le compte de service de l'agent de service Managed Service pour Apache Spark, ajoutez l'autorisation
serviceusage.services.useà un rôle personnalisé associé au compte de service de l'agent de service Managed Service pour Apache Spark.
Créer un cluster avec CMEK
Transmettez l'ID de ressource de votre clé lorsque vous créez le cluster Managed Service pour Apache Spark.
Gcloud CLI
- Pour chiffrer les données de disque persistant du cluster à l'aide de votre clé, transmettez
l'ID de ressource de votre clé à l'option
--gce-pd-kms-keyflag lorsque vous créez le cluster.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 ...Vous pouvez vérifier les paramètres de clé à partir de l'outil de ligne de commande
gcloud.gcloud dataproc clusters describe CLUSTER_NAME \ --region=REGIONExtrait de la sortie de la commande :
... configBucket: dataproc- ... encryptionConfig: gcePdKmsKeyName: projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name ... - Pour chiffrer les données de disque persistant du cluster et les données d'argument de tâche
à l'aide de votre clé, transmettez l'ID de ressource de la clé à l'
--kms-keylorsque vous créez le cluster. Consultez [Cluster.EncryptionConfig.kmsKey](/dataproc/docs/reference/rest/v1/ClusterConfig#EncryptionConfig.FIELDS.kms_key) pour obtenir la liste des types de tâches et des arguments chiffrés avec l'option `--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 ...Vous pouvez vérifier les paramètres de clé à l'aide de la commande gcloud CLI
dataproc clusters describe. L'ID de ressource de clé est défini surgcePdKmsKeyNameetkmsKeypour utiliser votre clé avec le chiffrement des données de disque persistant du cluster et des données d'argument de tâche.gcloud dataproc clusters describe CLUSTER_NAME \ --region=REGIONExtrait de la sortie de la commande :
... 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 ... - Pour chiffrer les métadonnées de cluster, le pilote de tâches et les autres données de sortie écrites dans votre
bucket de préproduction Managed Service pour Apache Spark dans Cloud Storage:
- Créez votre propre bucket avec CMEK. Lorsque vous ajoutez la clé au bucket, utilisez une clé que vous avez créée à l'étape 1.
- Transmettez le nom du bucket à l'option
--bucketlorsque vous créez le cluster.
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --bucket=CMEK_BUCKET_NAME \ other arguments ...Vous pouvez également transmettre des buckets activés par CMEK à la commande `gcloud dataproc jobs submit` si votre tâche prend en compte les arguments de bucket, comme illustré dans l'exemple `cmek-bucket` suivant :
gcloud dataproc jobs submit pyspark gs://cmek-bucket/wordcount.py \ --region=region \ --cluster=cluster-name \ -- gs://cmek-bucket/shakespeare.txt gs://cmek-bucket/counts
API REST
- Pour chiffrer les données de disque persistant de la VM de cluster à l'aide de votre clé, incluez le
ClusterConfig.EncryptionConfig.gcePdKmsKeyName
champ dans le cadre d'une
cluster.create.
Vous pouvez vérifier les paramètres de clé à l'aide de la commande gcloud CLI
dataproc clusters describe.gcloud dataproc clusters describe CLUSTER_NAME \ --region=REGIONExtrait de la sortie de la commande :
... configBucket: dataproc- ... encryptionConfig: gcePdKmsKeyName: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME ... - Pour chiffrer les données de disque persistant de la VM de cluster et les données d'argument de tâche à l'aide de
votre clé, incluez le champ
Cluster.EncryptionConfig.kmsKeydans le cadre d'une cluster.create. Consultez Cluster.EncryptionConfig.kmsKey pour obtenir la liste des types de tâches et des arguments chiffrés avec le champ--kms-key.Vous pouvez vérifier les paramètres de clé à l'aide de la commande gcloud CLI
dataproc clusters describe. L'ID de ressource de clé est défini surgcePdKmsKeyNameetkmsKeypour utiliser votre clé avec le chiffrement des données de disque persistant du cluster et des données d'argument de tâche.gcloud dataproc clusters describe CLUSTER_NAME \ --region=REGIONExtrait de la sortie de la commande :
... 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 ... - Pour chiffrer les métadonnées de cluster, le pilote de tâches et les autres données de sortie écrites dans votre
bucket de préproduction Managed Service pour Apache Spark dans Cloud Storage:
- Créez votre propre bucket avec CMEK. Lorsque vous ajoutez la clé au bucket, utilisez une clé que vous avez créée à l'étape 1.
- Transmettez le nom du bucket au ClusterConfig.configBucket dans le cadre d'une cluster.create.
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --bucket=CMEK_BUCKET_NAME \ other arguments ...Vous pouvez également transmettre des buckets activés par CMEK à la commande `gcloud dataproc jobs submit` si votre tâche prend en compte les arguments de bucket, comme illustré dans l'exemple `cmek-bucket` suivant :
gcloud dataproc jobs submit pyspark gs://cmek-bucket/wordcount.py \ --region=region \ --cluster=cluster-name \ -- gs://cmek-bucket/shakespeare.txt gs://cmek-bucket/counts
Utiliser CMEK avec les données de modèle de workflow
Les données d'argument de tâche du modèle de workflow Managed Service pour Apache Spark, telles que la chaîne de requête d'une tâche Spark SQL, peuvent être chiffrées à l'aide de CMEK. Suivez les étapes 1, 2 et 3 de cette section pour utiliser CMEK avec votre modèle de workflow Managed Service pour Apache Spark. Consultez WorkflowTemplate.EncryptionConfig.kmsKey pour obtenir la liste des types de tâches et des arguments de modèle de workflow chiffrés à l'aide de CMEK lorsque cette fonctionnalité est activée.
- Créez une clé à l'aide de Cloud KMS.
Le nom de ressource de la clé, que vous utiliserez lors des étapes suivantes, se construit de la façon suivante :
projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name
Pour autoriser les comptes de service Managed Service pour Apache Spark à utiliser votre clé :
Attribuez le rôle Cloud KMS
CryptoKey Encrypter/Decrypterau compte de service de l'agent de service Managed Service pour Apache Spark. Pour attribuer le rôle, vous pouvez utiliser gcloud CLI comme suit :gcloud projects add-iam-policy-binding KMS_PROJECT_ID \ --member serviceAccount:service-PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter
Remplacez les éléments suivants :
KMS_PROJECT_ID : ID de votre Google Cloud projet qui exécute Cloud KMS. Ce projet peut également être celui qui exécute les ressources Managed Service pour Apache Spark.
PROJECT_NUMBER : numéro de votre Google Cloud projet qui exécute les ressources Managed Service pour Apache Spark (et non son ID).
Activez l'API Cloud KMS sur le projet qui exécute les ressources Managed Service pour Apache Spark.
Si le rôle d'agent de service Managed Service pour Apache Spark n'est pas associé au compte de service de l'agent de service Managed Service pour Apache Spark, ajoutez alors l'autorisation
serviceusage.services.useau rôle personnalisé associé au compte de service de l'agent de service Managed Service pour Apache Spark. Si le rôle d'agent de service Managed Service pour Apache Spark est associé au compte de service de l'agent de service Managed Service pour Apache Spark, vous pouvez ignorer cette étape.
Vous pouvez utiliser la gcloud CLI ou l'API Dataproc pour définir la clé que vous avez créée à l'étape 1 sur un workflow. Une fois la clé définie sur un workflow, tous les arguments et requêtes de tâche du workflow sont chiffrés à l'aide de la clé pour tous les types de tâches et arguments listés dans WorkflowTemplate.EncryptionConfig.kmsKey.
Gcloud CLI
Transmettez l'ID de ressource de votre clé à l'
--kms-keyoption lorsque vous créez le modèle de workflow à l' aide de la commande gcloud dataproc workflow-templates create.Exemple :
Vous pouvez vérifier les paramètres de clé à partir de l'outil de ligne de commandegcloud 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.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 ...
API REST
Utilisez WorkflowTemplate.EncryptionConfig.kmsKey dans le cadre d'une requête workflowTemplates.create.
Vous pouvez vérifier les paramètres de clé en émettant une workflowTemplates.get. Le JSON renvoyé contient la
kmsKey:... "id": "my-template-name", "encryptionConfig": { "kmsKey": "projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name" },
Cloud External Key Manager
Cloud External Key Manager (Cloud EKM) vous permet de protéger les données Managed Service pour Apache Spark à l'aide de clés gérées par un partenaire de gestion des clés externes compatible. Les étapes que vous suivez pour utiliser Cloud EKM dans Managed Service pour Apache Spark sont les mêmes que celles permettant de configurer les clés CMEK, à la différence suivante : votre clé pointe vers un URI pour la clé gérée en externe (voir Présentation de Cloud EKM).
Erreurs Cloud EKM
Lorsque vous utilisez Cloud EKM, une tentative de création d'un cluster peut échouer en raison d'erreurs liées aux entrées, à Cloud EKM, au système partenaire de gestion des clés externes ou aux communications entre Cloud EKM et le système externe. Si vous utilisez l'API REST ou la Google Cloud console, les erreurs sont consignées dans Cloud Logging. Vous pouvez examiner les erreurs du cluster ayant échoué dans l'onglet View Log (Afficher le journal).