Claves de encriptación administradas por el cliente (CMEK)

Cuando usas Dataproc, los datos del clúster y del trabajo se almacenan en discos persistentes asociados con las VM de Compute Engine en tu clúster y en un bucket de etapa de pruebas de Cloud Storage. Estos datos de disco persistente y bucket se encriptan con una clave de encriptación de datos (DEK) generada por Google y una clave de encriptación de claves (KEK).

La función CMEK te permite crear, usar y revocar la clave de encriptación de claves (KEK). Google aún controla la clave de encriptación de datos (DEK). Para obtener más información sobre las claves de encriptación de datos de Google, consulta Encriptación en reposo.

Usa CMEK con datos del clúster

Puedes usar claves de encriptación administradas por el cliente (CMEK) para encriptar los siguientes datos del clúster:

  • Datos en los discos persistentes conectados a las VMs en tu clúster de Dataproc
  • Datos de argumentos de trabajo enviados a tu clúster, como una cadena de consulta enviada con un trabajo de Spark SQL
  • Metadatos del clúster, resultado del controlador del trabajo y otros datos escritos en un bucket de etapa de pruebas de Dataproc que creas

Sigue estos pasos para usar CMEK con la encriptación de los datos del clúster:

  1. Crea una o más claves con Cloud Key Management Service. El nombre del recurso, también llamado ID de recurso de una clave, que usarás en los próximos pasos, se crea de la siguiente manera:
    projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
    
  2. Asigna los siguientes roles a las siguientes cuentas de servicio:

    1. Sigue el elemento n.o 5 en Compute Engine→Protege recursos con las claves de Cloud KMS→Antes de comenzar para asignar la función Encriptador/Desencriptador de CryptoKey de Cloud KMS a la cuenta de servicio del agente de servicio de Compute Engine.
    2. Asigna la función Encriptador/Desencriptador de CryptoKey de Cloud KMS a la cuenta de servicio del agente de servicio de Cloud Storage.

    3. Asigna la función Encriptador/Desencriptador de CryptoKey de Cloud KMS a la cuenta de servicio del agente de servicio de Dataproc. Puedes usar Google Cloud CLI para asignar el rol:

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

      Reemplaza lo siguiente:

      KMS_PROJECT_ID: Es el ID del proyecto de Google Cloud que ejecuta Cloud KMS. Este proyecto también puede ser el que ejecute los recursos de Dataproc.

      PROJECT_NUMBER: Es el número del proyecto (no el ID del proyecto) de tu proyecto de Google Cloud que ejecuta los recursos de Dataproc.

    4. Habilitar la API de Cloud KMS en el proyecto que ejecuta los recursos de Dataproc

    5. Si la función de agente de servicios de Dataproc no está vinculada a la cuenta de servicio del agente de servicios de Dataproc, agrega el permiso serviceusage.services.use al rol personalizado adjunto a la cuenta de servicio del agente de servicio de Dataproc. Si la función de agente de servicio de Dataproc está vinculada a la cuenta de servicio del agente de servicio de Dataproc, puedes omitir este paso.

  3. Pasa el ID de recurso de tu clave a Google Cloud CLI o a la API de Dataproc para usarlo con la encriptación de datos del clúster.

    gcloud CLI

    • Para encriptar los datos del disco persistente del clúster con tu clave, pasa el ID de recurso de tu clave a la marca --gce-pd-kms-key cuando crees el clúster.
      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 ...
      

      Puedes verificar la configuración de la clave desde la herramienta de línea de comandos de gcloud.

      gcloud dataproc clusters describe CLUSTER_NAME \
          --region=REGION
      

      Fragmento del resultado del comando:

      ...
      configBucket: dataproc- ...
      encryptionConfig:
      gcePdKmsKeyName: projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name
      ...
      
    • Para encriptar los datos del disco persistente del clúster y los datos del argumento del trabajo con tu clave, pasa el ID del recurso de la clave a la marca --kms-key cuando crees el clúster. Consulta Cluster.EncryptionConfig.kmsKey para obtener una lista de tipos de trabajo y argumentos que se encriptan con la marca --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 ...
        

      Puedes verificar la configuración de la clave con el comando dataproc clusters describe de gcloud CLI. El ID de recurso de la clave se establece en gcePdKmsKeyName y kmsKey para usar tu clave con la encriptación del disco persistente del clúster y los datos de argumentos de trabajos.

      gcloud dataproc clusters describe CLUSTER_NAME \
          --region=REGION
        

      Fragmento del resultado del comando:

      ...
      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
      ...
      

    • Para encriptar los metadatos del clúster, el controlador del trabajo y otros datos de salida escritos en tu bucket de etapa de pruebas de Dataproc en Cloud Storage, sigue estos pasos:
      gcloud dataproc clusters create CLUSTER_NAME \
          --region=REGION \
          --bucket=CMEK_BUCKET_NAME \
          other arguments ...
          

      También puedes pasar los buckets habilitados para CMEK al comando “gcloud dataproc jobs submit” si tu trabajo toma argumentos de buckets, como se muestra en el siguiente ejemplo de “cmek-bucket”:

      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 de REST

    • Para encriptar los datos del disco persistente de la VM del clúster con tu clave, incluye el campo ClusterConfig.EncryptionConfig.gcePdKmsKeyName como parte de una solicitud cluster.create.

      Puedes verificar la configuración de la clave con el comando dataproc clusters describe de gcloud CLI.

      gcloud dataproc clusters describe CLUSTER_NAME \
          --region=REGION
      

      Fragmento del resultado del comando:

      ...
      configBucket: dataproc- ...
      encryptionConfig:
      gcePdKmsKeyName: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
      ...
      
    • Para encriptar los datos del disco persistente de la VM del clúster y los datos del argumento de trabajo con tu clave, incluye el campo Cluster.EncryptionConfig.kmsKey como parte de una solicitud cluster.create. Consulta Cluster.EncryptionConfig.kmsKey para obtener una lista de tipos de trabajo y argumentos que se encriptan con el campo --kms-key.

      Puedes verificar la configuración de la clave con el comando dataproc clusters describe de gcloud CLI. El ID de recurso de la clave se establece en gcePdKmsKeyName y kmsKey para usar tu clave con la encriptación del disco persistente del clúster y los datos de argumentos de trabajos.

      gcloud dataproc clusters describe CLUSTER_NAME \
          --region=REGION
      

      Fragmento del resultado del comando:

      ...
      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 ...
      

      También puedes pasar los buckets habilitados para CMEK al comando “gcloud dataproc jobs submit” si tu trabajo toma argumentos de buckets, como se muestra en el siguiente ejemplo de “cmek-bucket”:

      gcloud dataproc jobs submit pyspark gs://cmek-bucket/wordcount.py \
          --region=region \
          --cluster=cluster-name \
          -- gs://cmek-bucket/shakespeare.txt gs://cmek-bucket/counts
        

Usa CMEK con datos de plantillas de flujo de trabajo

Los datos de los argumentos del trabajo de la plantilla del flujo de trabajo de Dataproc, como la cadena de consulta de un trabajo de Spark SQL, se pueden encriptar con CMEK. Sigue los pasos 1, 2 y 3 de esta sección para usar CMEK con tu plantilla de flujo de trabajo de Dataproc. Consulta WorkflowTemplate.EncryptionConfig.kmsKey para obtener una lista de los tipos de trabajos de plantillas de flujo de trabajo y argumentos que se encriptan con CMEK cuando esta función está habilitada.

  1. Crea una clave con Cloud Key Management Service (Cloud KMS). El nombre del recurso de la clave, que usarás en los siguientes pasos, se crea de la siguiente manera:
    projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name
    
  2. A fin de habilitar las cuentas de servicio de Dataproc para que usen tu clave, sigue estos pasos:

    1. Asigna la función CryptoKey Encrypter/Decrypter de Cloud KMS a la cuenta de servicio del agente de servicios de Dataproc. Puedes usar gcloud CLI para asignar el rol:

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

      Reemplaza lo siguiente:

      KMS_PROJECT_ID: Es el ID del proyecto de Google Cloud que ejecuta Cloud KMS. Este proyecto también puede ser el que ejecute los recursos de Dataproc.

      PROJECT_NUMBER: Es el número del proyecto (no el ID del proyecto) de tu proyecto de Google Cloud que ejecuta los recursos de Dataproc.

    2. Habilitar la API de Cloud KMS en el proyecto que ejecuta los recursos de Dataproc

    3. Si el rol de agente de servicios de Dataproc no está vinculado a la cuenta de servicio del agente de servicios de Dataproc, agrega el permiso serviceusage.services.use al rol personalizado adjunto a la cuenta de servicio del agente de servicio de Dataproc. Si el rol de agente de servicio de Dataproc está vinculado a la cuenta de servicio del agente de servicio de Dataproc, puedes omitir este paso.

  3. Puedes usar Google Cloud CLI o la API de Dataproc para establecer la clave que creaste en el paso 1 en un flujo de trabajo. Una vez que se configura la clave en un flujo de trabajo, todas las consultas y los argumentos del trabajo de flujo de trabajo se encriptan con la clave para cualquiera de los tipos de trabajo y argumentos enumerados en WorkflowTemplate.EncryptionConfig.kmsKey.

    gcloud CLI

    Pasa el ID de recurso de tu clave a la marca --kms-key cuando crees la plantilla de flujo de trabajo con el comando gcloud dataproc workflow-templates create.

    Ejemplo:

    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 ...
    
    Puedes verificar la configuración de la clave desde la herramienta de línea de comandos de 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 de REST

    Usa WorkflowTemplate.EncryptionConfig.kmsKey como parte de una solicitud deworkflowTemplates.create.

    Puedes verificar la configuración de la clave mediante una solicitud workflowTemplates.get. El JSON que se muestra contiene una lista de 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) (EKM) te permite proteger los datos de Dataproc mediante claves administradas por un socio de administración de claves externo compatible. Los pasos que sigues si quieres usar EKM en Dataproc son los mismos que usas para configurar claves CMEK, con la siguiente diferencia: tu clave apunta a un URI de la clave administrada de forma externa (consulta la Descripción general de Cloud EKM).

Errores de Cloud EKM

Cuando usas Cloud EKM, un intento de crear un clúster puede fallar debido a errores asociados con las entradas, Cloud EKM, el sistema del socio de administración de claves externo o las comunicaciones entre EKM y el sistema externo. Si usas la API de REST o la consola de Google Cloud, los errores se registran en Logging. Puedes examinar los errores del clúster con errores desde la pestaña Ver registro.