Cuando usas Dataproc, los datos de los clústeres y los trabajos se almacenan en discos persistentes asociados a las máquinas virtuales de Compute Engine de tu clúster y en un segmento de almacenamiento provisional de Cloud Storage. Estos datos de disco persistente y de cubeta se cifran con una clave de cifrado de datos (DEK) y una clave de cifrado de claves (KEK) generadas por Google.
La función de CMEK te permite crear, usar y revocar la clave de cifrado de claves (KEK). Google sigue controlando la clave de cifrado de datos (DEK). Para obtener más información sobre las claves de cifrado de datos de Google, consulta el artículo Cifrado en reposo.
Usar CMEK con datos de clúster
Puedes usar claves de cifrado gestionadas por el cliente (CMEK) para cifrar los siguientes datos del clúster:
- Datos de los discos persistentes conectados a las VMs de tu clúster de Dataproc
- Datos de argumentos de tareas enviados a tu clúster, como una cadena de consulta enviada con una tarea de Spark SQL
- Metadatos del clúster, salida del controlador de trabajos y otros datos escritos en un segmento de almacenamiento provisional de Dataproc que crees
Sigue estos pasos para usar CMEK con el cifrado de datos de clústeres:
- Crea una o varias claves con Cloud Key Management Service.
El nombre del recurso, también llamado ID de recurso de una clave, que usarás en los pasos siguientes, se crea de la siguiente manera:
projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
Asigna los siguientes roles a las siguientes cuentas de servicio:
- Sigue el paso 5 de Compute Engine > Proteger recursos con claves de Cloud KMS > Antes de empezar para asignar el rol Encargado del encriptado y desencriptado de la clave criptográfica de Cloud KMS a la cuenta de servicio del agente de servicio de Compute Engine.
Asigna el rol Encargado del encriptado y desencriptado de claves de CryptoKey de Cloud KMS a la cuenta de servicio del agente de servicio de Cloud Storage.
Asigna el rol Encargado del encriptado y desencriptado de la clave criptográfica 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
Haz los cambios siguientes:
KMS_PROJECT_ID
: el ID de tu proyecto Google Cloud que ejecuta Cloud KMS. Este proyecto también puede ser el que ejecute los recursos de Dataproc.PROJECT_NUMBER
: el número del proyecto (no el ID del proyecto) en el que se ejecutan los recursos de Dataproc. Google CloudHabilita la API de Cloud KMS en el proyecto que ejecuta los recursos de Dataproc.
Si el rol de agente de servicio de Dataproc no está asociado a la cuenta de servicio de agente de servicio de Dataproc, añade el permiso
serviceusage.services.use
al rol personalizado asociado a la cuenta de servicio de agente de servicio de Dataproc. Si el rol Agente de servicio de Dataproc está asociado a la cuenta de servicio Agente de servicio de Dataproc, puedes saltarte este paso.
Transfiere el ID de recurso de tu clave a Google Cloud CLI o a la API de Dataproc para usarlo con el cifrado de datos del clúster.
CLI de gcloud
- Para cifrar los datos de los discos persistentes 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 el ajuste de la clave con la herramienta de línea de comandos
gcloud
.gcloud dataproc clusters describe CLUSTER_NAME \ --region=REGION
Fragmento de salida del comando:
... configBucket: dataproc- ... encryptionConfig: gcePdKmsKeyName: projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name ...
- Para cifrar los datos de los discos persistentes del clúster y los datos de los argumentos de los trabajos con tu clave, pasa el ID de recurso de la clave al flag
--kms-key
cuando crees el clúster. Consulta Cluster.EncryptionConfig.kmsKey para ver una lista de tipos de trabajos y argumentos que se cifran 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 las claves con el comando
dataproc clusters describe
de la CLI de gcloud. El ID de recurso de la clave se define engcePdKmsKeyName
ykmsKey
para usar tu clave con el cifrado de los datos de argumentos de trabajos y discos persistentes de clúster.gcloud dataproc clusters describe CLUSTER_NAME \ --region=REGION
Fragmento de salida 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 cifrar los metadatos del clúster, el controlador de tareas y otros datos de salida escritos en tu segmento de staging de Dataproc en Cloud Storage, sigue estos pasos:
- Crea tu propio segmento con CMEK. Cuando añadas la clave al segmento, usa una clave que hayas creado en el paso 1.
- Pasa el nombre del contenedor a la marca
--bucket
cuando crees el clúster.
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --bucket=CMEK_BUCKET_NAME \ other arguments ...
También puede transferir segmentos habilitados para CMEK al comando `gcloud dataproc jobs submit` si su tarea requiere argumentos de segmento, 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 REST
- Para cifrar los datos de los discos persistentes de las máquinas virtuales de un 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 la CLI de gcloud.gcloud dataproc clusters describe CLUSTER_NAME \ --region=REGION
Fragmento de salida del comando:
... configBucket: dataproc- ... encryptionConfig: gcePdKmsKeyName: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME ...
- Para cifrar los datos de los discos persistentes de las VMs de clústeres y los datos de los argumentos de los trabajos con tu clave, incluye el campo
Cluster.EncryptionConfig.kmsKey
como parte de una solicitud cluster.create. Consulta la lista de tipos de trabajos y argumentos que se cifran con el campo--kms-key
en Cluster.EncryptionConfig.kmsKey.Puedes verificar la configuración de las claves con el comando
dataproc clusters describe
de la CLI de gcloud. El ID de recurso de la clave se define engcePdKmsKeyName
ykmsKey
para usar tu clave con el cifrado de los datos de argumentos de trabajos y discos persistentes de clúster.gcloud dataproc clusters describe CLUSTER_NAME \ --region=REGION
Fragmento de salida 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:
- Create your own bucket with CMEK. When adding the key to the bucket, use a key that you created in Step 1.
- Pass the bucket name to the ClusterConfig.configBucket field as part of a cluster.create request.
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --bucket=CMEK_BUCKET_NAMEt \ other arguments ...
También puede transferir segmentos habilitados para CMEK al comando `gcloud dataproc jobs submit` si su tarea requiere argumentos de segmento, 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
- Para cifrar los datos de los discos persistentes del clúster con tu clave, pasa el ID de recurso de tu clave a la marca
Usar CMEK con datos de plantillas de flujo de trabajo
Los datos de los argumentos de las tareas de plantillas de flujo de trabajo de Dataproc, como la cadena de consulta de una tarea de Spark SQL, se pueden cifrar mediante 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 ver una lista de tipos de tareas y argumentos de plantillas de flujo de trabajo que se cifran mediante CMEK cuando esta función está habilitada.
- Crea una clave con Cloud Key Management Service (Cloud KMS).
El nombre del recurso de la clave, que usarás en los pasos siguientes, se construye de la siguiente manera:
projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name
Para permitir que las cuentas de servicio de Dataproc usen tu clave, sigue estos pasos:
Asigna el rol
CryptoKey Encrypter/Decrypter
de Cloud KMS a la cuenta de servicio del agente de servicio de Dataproc. Puedes usar la CLI de gcloud 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
Haz los cambios siguientes:
KMS_PROJECT_ID
: el ID de tu proyecto Google Cloud que ejecuta Cloud KMS. Este proyecto también puede ser el que ejecute los recursos de Dataproc.PROJECT_NUMBER
: el número del proyecto (no el ID del proyecto) en el que se ejecutan los recursos de Dataproc. Google CloudHabilita la API de Cloud KMS en el proyecto que ejecuta los recursos de Dataproc.
Si el rol de agente de servicio de Dataproc no está asociado a la cuenta de servicio de agente de servicio de Dataproc, añade el permiso
serviceusage.services.use
al rol personalizado asociado a la cuenta de servicio de agente de servicio de Dataproc. Si el rol Agente de servicio de Dataproc está asociado a la cuenta de servicio Agente de servicio de Dataproc, puedes saltarte este paso.
Puedes usar la CLI de Google Cloud o la API de Dataproc para definir la clave que has creado en el paso 1 en un flujo de trabajo. Una vez que se ha definido la clave en un flujo de trabajo, todos los argumentos y las consultas de las tareas del flujo de trabajo se cifran con la clave de cualquiera de los tipos de tareas y argumentos que se indican en WorkflowTemplate.EncryptionConfig.kmsKey.
CLI de gcloud
Transfiere 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:
Puedes verificar el ajuste de la clave con la herramienta de línea de comandosgcloud 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
Usa WorkflowTemplate.EncryptionConfig.kmsKey como parte de una solicitud workflowTemplates.create.
Para verificar el ajuste de la clave, envía una solicitud workflowTemplates.get. El JSON devuelto contiene las siguientes listas 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) te permite proteger los datos de Dataproc con claves gestionadas por un partner de gestión de claves externo admitido. Los pasos que debes seguir para usar EKM en Dataproc son los mismos que los que se usan para configurar claves CMEK, con la siguiente diferencia: tu clave apunta a un URI de la clave gestionada externamente (consulta la descripción general de Cloud EKM).
Errores de Cloud EKM
Cuando usas Cloud EKM, se puede producir un error al intentar crear un clúster debido a errores asociados a las entradas, a Cloud EKM, al sistema del partner de gestión de claves externo o a las comunicaciones entre EKM y el sistema externo. Si usas la API REST o la Google Cloud consola, los errores se registran en Logging. Puedes examinar los errores del clúster que ha fallado en la pestaña Ver registro.