Clés de chiffrement gérées par le client (CMEK)

Lorsque vous utilisez Dataproc, 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. Les données de disque persistant et de bucket sont chiffrées à l'aide d'une clé de chiffrement des données (DEK, Data Encryption Key) et d'une clé de chiffrement de clé (KEK, Key Encryption Key) générées par Google.

La fonctionnalité CMEK vous permet de créer, d'utiliser et de révoquer la clé de chiffrement de clé KEK. Google continue de contrôler la clé de chiffrement des données (DEK). Pour en savoir plus sur les clés de chiffrement des données Google, consultez la page Chiffrement au repos.

Utiliser CMEK avec les données de cluster

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 votre cluster Dataproc
  • 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 du cluster, résultats du pilote de tâches et autres données écrites dans un bucket de préproduction Dataproc que vous créez

Pour utiliser CMEK avec le chiffrement des données de cluster, procédez comme suit:

  1. Créez une ou plusieurs clés à l'aide de Cloud Key Management Service. Le nom de la ressource, également appelé ID de ressource d'une clé, que vous utiliserez dans les étapes suivantes, se construit comme suit:
    projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
    
  2. Attribuez les rôles suivants aux comptes de service suivants:

    1. Suivez le point 5 de la section Compute Engine → Protéger des ressources avec des clés Cloud KMS → Avant de commencer pour attribuer le rôle Cloud KMS Chiffreur/Déchiffreur de CryptoKey au compte de service agent de service Compute Engine.
    2. Attribuez le rôle Chiffreur/Déchiffreur de clés cryptographiques Cloud KMS au compte de service agent de service Cloud Storage.

    3. Attribuez le rôle Chiffreur/Déchiffreur de CryptoKey Cloud KMS au compte de service Agent de service Dataproc. Pour attribuer le rôle, vous pouvez utiliser Google Cloud 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 projet Google Cloud exécutant Cloud KMS. Il peut également s'agir du projet qui exécute les ressources Dataproc.

      PROJECT_NUMBER: numéro de projet (et non ID de projet) de votre projet Google Cloud qui exécute des ressources Dataproc.

    4. Activez l'API Cloud KMS sur le projet qui exécute les ressources Dataproc.

    5. Si le rôle Agent de service Dataproc n'est pas associé au compte de service Agent de service Dataproc, ajoutez l'autorisation serviceusage.services.use au rôle personnalisé associé au compte de service Agent de service Dataproc. Si le rôle d'agent de service Dataproc est associé au compte de service de l'agent de service Dataproc, vous pouvez ignorer cette étape.

  3. Transmettez l'ID de ressource de votre clé à la Google Cloud CLI ou à l'API Dataproc pour l'utiliser avec le chiffrement des données du cluster.

    CLI gcloud

    • Pour chiffrer les données de disque persistant du cluster à l'aide de votre clé, transmettez l'ID de ressource de votre clé à l'indicateur --gce-pd-kms-key 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=REGION
      

      Extrait de résultat 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'indicateur --kms-key lorsque vous créez le cluster. Pour obtenir la liste des types de tâches et des arguments chiffrés avec l'indicateur --kms-key, consultez Cluster.EncryptionConfig.kmsKey.
      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é avec la commande dataproc clusters describe de la gcloud CLI. L'ID de ressource de clé est défini sur gcePdKmsKeyName et kmsKey pour utiliser votre clé avec le chiffrement des données du disque persistant du cluster et des arguments de tâche.

      gcloud dataproc clusters describe CLUSTER_NAME \
          --region=REGION
        

      Extrait de résultat 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-KEY_RING_NAME-name/cryptoKeys/KEY_NAME
      ...
      

    • Pour chiffrer les métadonnées du cluster, le pilote de tâches et d'autres données de sortie écrites dans votre bucket de préproduction Dataproc dans Cloud Storage :
      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 de "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 des VM de cluster à l'aide de votre clé, incluez le champ ClusterConfig.EncryptionConfig.gcePdKmsKeyName dans une requête cluster.create.

      Vous pouvez vérifier le paramètre de clé avec la commande dataproc clusters describe de la gcloud CLI.

      gcloud dataproc clusters describe CLUSTER_NAME \
          --region=REGION
      

      Extrait de résultat 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.kmsKey dans une requête 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 dataproc clusters describe de la gcloud CLI. L'ID de ressource de clé est défini sur gcePdKmsKeyName et kmsKey pour utiliser votre clé avec le chiffrement des données du disque persistant du cluster et des arguments de tâche.

      gcloud dataproc clusters describe CLUSTER_NAME \
          --region=REGION
      

      Extrait de résultat 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
      
    • To encrypt cluster metadata, job driver, and other output data written to your Dataproc staging bucket in Cloud Storage:
      gcloud dataproc clusters create CLUSTER_NAME \
          --region=REGION \
          --bucket=CMEK_BUCKET_NAMEt \
          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 de "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 les CMEK avec les données des modèles de workflow

Les données d'argument de tâche du modèle de workflow Dataproc, 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 Dataproc. 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.

  1. Créez une clé à l'aide du service Cloud Key Management Service (Cloud KMS). Le nom de la ressource de la clé, que vous utiliserez lors des étapes suivantes, se construit comme suit:
    projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name
    
  2. Pour permettre aux comptes de service Dataproc d'utiliser votre clé:

    1. Attribuez le rôle Cloud KMS CryptoKey Encrypter/Decrypter au compte de service Dataproc Service Agent. Pour attribuer le rôle, vous pouvez utiliser gcloud 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 projet Google Cloud exécutant Cloud KMS. Il peut également s'agir du projet qui exécute les ressources Dataproc.

      PROJECT_NUMBER: numéro de projet (et non ID de projet) de votre projet Google Cloud qui exécute des ressources Dataproc.

    2. Activez l'API Cloud KMS sur le projet qui exécute les ressources Dataproc.

    3. Si le rôle Agent de service Dataproc n'est pas associé au compte de service Agent de service Dataproc, ajoutez l'autorisation serviceusage.services.use au rôle personnalisé associé au compte de service Agent de service Dataproc. Si le rôle d'agent de service Dataproc est associé au compte de service d'agent de service Dataproc, vous pouvez ignorer cette étape.

  3. Vous pouvez utiliser la Google Cloud 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 la tâche de workflow sont chiffrés à l'aide de la clé pour tous les types de tâches et arguments listés dans WorkflowTemplate.EncryptionConfig.kmsKey.

    CLI gcloud

    Transmettez l'ID de ressource de votre clé à l'indicateur --kms-key lorsque vous créez le modèle de workflow avec la commande gcloud dataproc workflow-templates create.

    Exemple :

    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 ...
    
    Vous pouvez vérifier les paramètres de clé à partir de l'outil de ligne de commande 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é à l'aide d'une requête workflowTemplates.get. Le fichier JSON renvoyé contient la liste des 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 Dataproc à 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 EKM dans Dataproc 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 EKM et le système externe. Si vous utilisez l'API REST ou la console Google Cloud, les erreurs sont consignées dans Logging. Vous pouvez examiner les erreurs du cluster défaillant à partir de l'onglet Afficher le journal.