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

Cuando utilizas Dataproc, los datos del trabajo y del clúster se almacenan en discos persistentes asociados a las VMs de Compute Engine en tu clúster y en un bucket de etapa de pruebas de Cloud Storage . De forma predeterminada, 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).

Si deseas controlar y administrar la clave de encriptación de claves (KEK), puedes usar las Claves de encriptación administradas por el cliente (CMEK) (Google sigue controlando 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 la documentación sobre encriptación en reposo.

Encriptación de datos de clúster de CMEK

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

  • Datos en discos persistentes adjuntos a las VMs del 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 el clúster de Dataproc bucket de etapa de pruebas

Antes de comenzar

  1. Accede a tu Google Cloud cuenta de. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. Instala Google Cloud CLI.

  6. Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

  7. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  8. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  11. Instala Google Cloud CLI.

  12. Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

  13. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init

Crea claves

Para proteger tus recursos de Dataproc con CMEK, puedes automatizar la creación de claves o crearlas de forma manual.

Creación automática de claves

Usa Autokey para automatizar el aprovisionamiento y la asignación de CMEK. Autokey genera llaveros de claves y claves a pedido cuando se crean recursos. Los agentes de servicio usan las claves en operaciones de encriptación y desencriptación. Si es necesario, Autokey crea los agentes y les otorga los roles de Identity and Access Management (IAM) (IAM) requeridos. Para obtener más información, consulta Descripción general de las claves automáticas.

Creación manual de claves

Sigue estos pasos para crear claves de forma manual para la encriptación de datos de clúster de CMEK:

  1. Crea una o más claves con Cloud KMS. El nombre del recurso, también llamado ID de recurso de una 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
    
    La clave (CMEK) debe ubicarse en la misma ubicación que el recurso encriptado. Por ejemplo, la CMEK que se usa para encriptar un recurso en la región us-central1 también debe ubicarse en la región us-central1.

  2. Para asegurarte de que cada una de las siguientes cuentas de servicio (cuenta de servicio del agente de servicio de Compute Engine, cuenta de servicio del agente de servicio de Cloud Storage y cuenta de servicio del agente de servicio de Dataproc) tenga los permisos necesarios para proteger los recursos mediante claves de Cloud KMS, pídele a tu administrador que otorgue el rol de IAM de Encriptador/Desencriptador de CryptoKey de Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) a cada una de las siguientes cuentas de servicio (cuenta de servicio del agente de servicio de Compute Engine, cuenta de servicio del agente de servicio de Cloud Storage y cuenta de servicio del agente de servicio de Dataproc) en tu proyecto.

    Ejemplo de asignación del rol de Encriptador/Desencriptador de CryptoKey de Cloud KMS a la cuenta de servicio del agente de servicio de Dataproc con 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
    

    Reemplaza lo siguiente:

    KMS_PROJECT_ID: Es el ID de tu Google Cloud proyecto que contiene la clave de Cloud KMS.

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

  3. Si el rol de agente de servicio de Dataproc no está adjunto a la cuenta de servicio del agente de servicio de Dataproc, agrega el permiso serviceusage.services.use a un rol personalizado adjunto a la cuenta de servicio del agente de servicio de Dataproc.

Crea un clúster con CMEK

Pasa el ID de recurso de tu clave cuando crees el clúster de Dataproc.

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, como se muestra a continuación.

    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 de argumentos de trabajo con tu clave, pasa el ID de recurso de la clave a la --kms-key marca cuando crees el clúster. Consulta [Cluster.EncryptionConfig.kmsKey](/dataproc/docs/reference/rest/v1/ClusterConfig#EncryptionConfig.FIELDS.kms_key) para obtener una lista de los 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 de los datos del disco persistente del clúster y los datos de argumentos de trabajo.

    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
    ...
        
  • Para encriptar los metadatos del clúster, el controlador del trabajo y otros datos de salida escritos en el bucket de etapa de pruebas de Dataproc en Cloud Storage:
    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        --bucket=CMEK_BUCKET_NAME \
        other arguments ...
            

    También puedes pasar buckets habilitados por CMEK al comando `gcloud dataproc jobs submit` si tu trabajo toma argumentos de bucket, 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 ClusterConfig.EncryptionConfig.gcePdKmsKeyName campo como parte de una 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 de argumentos de trabajo con tu clave, incluye el Cluster.EncryptionConfig.kmsKey campo como parte de una cluster.create. Consulta Cluster.EncryptionConfig.kmsKey para obtener una lista de los 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 de los datos del disco persistente del clúster y los datos de argumentos de trabajo.

    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
    ...
        
  • Para encriptar los metadatos del clúster, el controlador del trabajo y otros datos de salida escritos en el bucket de etapa de pruebas de Dataproc en Cloud Storage:
    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        --bucket=CMEK_BUCKET_NAME \
        other arguments ...
        

    También puedes pasar buckets habilitados por CMEK al comando `gcloud dataproc jobs submit` si tu trabajo toma argumentos de bucket, 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 plantilla de flujo de trabajo

Los datos de argumentos de trabajo de la plantilla de 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 trabajo y argumentos de la plantilla de flujo de trabajo que se encriptan con CMEK cuando se habilita esta función.

  1. Crea una clave con el 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
    
  2. Para habilitar las cuentas de servicio de Dataproc para usar tu clave, haz lo siguiente:

    1. Asigna el rol de Cloud KMS CryptoKey Encrypter/Decrypter a la cuenta de servicio del agente de servicio 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 de tu Google Cloud proyecto que ejecuta Cloud KMS. Este proyecto también puede ser el que ejecuta recursos de Dataproc.

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

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

    3. Si el rol de agente de servicio de Dataproc no está adjunto a la cuenta de servicio del agente de servicio 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á adjunto a la cuenta de servicio del agente de servicio de Dataproc, puedes omitir este paso.

  3. Puedes usar gcloud 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 establece la clave en un flujo de trabajo, todos los argumentos y las consultas del trabajo del flujo de trabajo se encriptan con la clave para cualquiera de los tipos de trabajo y argumentos que se enumeran en WorkflowTemplate.EncryptionConfig.kmsKey.

    gcloud CLI

    Pasa el ID de recurso de tu clave a la --kms-key marca 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 workflowTemplates.create.

    Puedes verificar la configuración de la clave mediante la emisión de una workflowTemplates.get. El JSON que se muestra contiene 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 administradas por un socio externo de administración de claves compatible. Los pasos que debes seguir para usar Cloud EKM en Dataproc son los mismos que usas para configurar claves CMEK, con la siguiente diferencia: tu clave apunta a un URI para la clave administrada de forma externa (consulta 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 entradas, Cloud EKM, el sistema de administración de claves externas, o comunicaciones entre Cloud EKM y el sistema externo. Si usas la API de REST o la Google Cloud consola, los errores se registran en Cloud Logging. Puedes examinar los errores del clúster fallido desde la pestaña View Log.