Chaves de encriptação geridas pelo cliente (CMEK)

Quando usa o Dataproc, os dados de clusters e tarefas são armazenados em discos persistentes associados às VMs do Compute Engine no seu cluster e num contentor de preparação do Cloud Storage. Estes dados do disco persistente e do contentor são encriptados através de uma chave de encriptação de dados (DEK) e de uma chave de encriptação de chaves (KEK) geradas pela Google.

A funcionalidade CMEK permite-lhe criar, usar e revogar a chave de encriptação de chaves (KEK). A Google continua a controlar a chave de encriptação de dados (DEK). Para mais informações sobre as chaves de encriptação de dados da Google, consulte o artigo Encriptação em repouso.

Use a CMEK com dados de clusters

Pode usar chaves de encriptação geridas pelo cliente (CMEK) para encriptar os seguintes dados do cluster:

  • Dados nos discos persistentes associados às VMs no seu cluster do Dataproc
  • Dados de argumentos de tarefas enviados para o seu cluster, como uma string de consulta enviada com uma tarefa Spark SQL
  • Metadados do cluster, saída do controlador de tarefas e outros dados escritos num contentor de preparação do Dataproc que criar

Siga estes passos para usar a CMEK com a encriptação de dados de clusters:

  1. Crie uma ou mais chaves através do Cloud Key Management Service. O nome do recurso, também denominado ID do recurso de uma chave, que usa nos passos seguintes, é criado da seguinte forma:
    projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
    
  2. Atribua as seguintes funções às seguintes contas de serviço:

    1. Siga o item n.º 5 em Compute Engine→Proteger recursos com chaves do Cloud KMS→Antes de começar para atribuir a função do Cloud KMS Encriptador/desencriptador de CryptoKey à conta de serviço do agente de serviço do Compute Engine.
    2. Atribua a função encriptador/desencriptador de CryptoKey do Cloud KMS à conta de serviço do agente de serviço do Cloud Storage.

    3. Atribua a função Encriptador/desencriptador de CryptoKey do Cloud KMS à conta de serviço do agente de serviço do Dataproc. Pode usar a Google Cloud CLI para atribuir a função:

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

      Substitua o seguinte:

      KMS_PROJECT_ID: o ID do seu projeto que executa o Cloud KMS. Google Cloud Este projeto também pode ser o projeto que executa recursos do Dataproc.

      PROJECT_NUMBER: o número do projeto (não o ID do projeto) do seu Google Cloud projeto que executa recursos do Dataproc.

    4. Ative a API Cloud KMS no projeto que executa recursos do Dataproc.

    5. Se a função de agente do serviço do Dataproc não estiver associada à conta de serviço do agente do serviço do Dataproc, adicione a autorização serviceusage.services.use à função personalizada associada à conta de serviço do agente do serviço do Dataproc. Se a função de agente do serviço do Dataproc estiver associada à conta de serviço do agente do serviço do Dataproc, pode ignorar este passo.

  3. Transmita o ID do recurso da sua chave à CLI do Google Cloud ou à API Dataproc para usar com a encriptação de dados do cluster.

    CLI gcloud

    • Para encriptar os dados do disco persistente do cluster com a sua chave, transmita o ID do recurso da chave à flag --gce-pd-kms-key quando criar o 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 ...
      

      Pode verificar a definição da chave na ferramenta de linha de comandos gcloud.

      gcloud dataproc clusters describe CLUSTER_NAME \
          --region=REGION
      

      Fragmento do resultado do comando:

      ...
      configBucket: dataproc- ...
      encryptionConfig:
      gcePdKmsKeyName: projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name
      ...
      
    • Para encriptar os dados do disco persistente do cluster e os dados dos argumentos da tarefa com a sua chave, transmita o ID do recurso da chave ao comando --kms-key quando criar o cluster. Consulte Cluster.EncryptionConfig.kmsKey para ver uma lista de tipos de tarefas e argumentos encriptados com a flag --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 ...
        

      Pode validar as definições principais com o comando dataproc clusters describe da CLI gcloud. O ID do recurso da chave é definido em gcePdKmsKeyName e kmsKey para usar a sua chave com a encriptação do disco persistente do cluster e dados de argumentos de tarefas.

      gcloud dataproc clusters describe CLUSTER_NAME \
          --region=REGION
        

      Fragmento do resultado do 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 os metadados do cluster, o controlador de tarefas e outros dados de saída escritos no seu contentor de preparação do Dataproc no Cloud Storage:
      gcloud dataproc clusters create CLUSTER_NAME \
          --region=REGION \
          --bucket=CMEK_BUCKET_NAME \
          other arguments ...
          

      Também pode transmitir contentores ativados com CMEK para o comando `gcloud dataproc jobs submit` se a tarefa aceitar argumentos de contentores, conforme mostrado no seguinte exemplo 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 encriptar os dados do disco persistente da VM do cluster com a sua chave, inclua o campo ClusterConfig.EncryptionConfig.gcePdKmsKeyName como parte de um pedido cluster.create.

      Pode validar a definição da chave com o comando dataproc clusters describe da CLI gcloud.

      gcloud dataproc clusters describe CLUSTER_NAME \
          --region=REGION
      

      Fragmento do resultado do comando:

      ...
      configBucket: dataproc- ...
      encryptionConfig:
      gcePdKmsKeyName: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
      ...
      
    • Para encriptar os dados do disco persistente da VM do cluster e os dados dos argumentos da tarefa com a sua chave, inclua o campo Cluster.EncryptionConfig.kmsKey como parte de um pedido cluster.create. Consulte Cluster.EncryptionConfig.kmsKey para ver uma lista de tipos de tarefas e argumentos que são encriptados com o campo --kms-key.

      Pode validar as definições principais com o comando gcloud CLI dataproc clusters describe. O ID do recurso da chave é definido em gcePdKmsKeyName e kmsKey para usar a sua chave com a encriptação do disco persistente do cluster e dados de argumentos de tarefas.

      gcloud dataproc clusters describe CLUSTER_NAME \
          --region=REGION
      

      Fragmento do resultado do 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 ...
      

      Também pode transmitir contentores ativados com CMEK para o comando `gcloud dataproc jobs submit` se a tarefa aceitar argumentos de contentores, conforme mostrado no seguinte exemplo 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
        

Use a CMEK com dados de modelos de fluxos de trabalho

Os dados dos argumentos de tarefas do modelo de fluxo de trabalho do Dataproc, como a string de consulta de uma tarefa do Spark SQL, podem ser encriptados através da CMEK. Siga os passos 1, 2 e 3 nesta secção para usar as CMEK com o seu modelo de fluxo de trabalho do Dataproc. Consulte WorkflowTemplate.EncryptionConfig.kmsKey para ver uma lista de tipos de tarefas e argumentos de modelos de fluxo de trabalho que são encriptados através da CMEK quando esta funcionalidade está ativada.

  1. Crie uma chave com o Cloud Key Management Service (Cloud KMS). O nome do recurso da chave, que usa nos passos seguintes, é criado da seguinte forma:
    projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name
    
  2. Para permitir que as contas de serviço do Dataproc usem a sua chave:

    1. Atribua a função do Cloud KMS CryptoKey Encrypter/Decrypter à conta de serviço do agente de serviço do Dataproc. Pode usar a CLI gcloud para atribuir a função:

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

      Substitua o seguinte:

      KMS_PROJECT_ID: o ID do seu projeto que executa o Cloud KMS. Google Cloud Este projeto também pode ser o projeto que executa recursos do Dataproc.

      PROJECT_NUMBER: o número do projeto (não o ID do projeto) do seu Google Cloud projeto que executa recursos do Dataproc.

    2. Ative a API Cloud KMS no projeto que executa recursos do Dataproc.

    3. Se a função de agente de serviço do Dataproc não estiver associada à conta de serviço do agente de serviço do Dataproc, adicione a autorização serviceusage.services.use à função personalizada associada à conta de serviço do agente de serviço do Dataproc. Se a função de agente de serviço do Dataproc estiver associada à conta de serviço do agente de serviço do Dataproc, pode ignorar este passo.

  3. Pode usar a CLI Google Cloud ou a API Dataproc para definir a chave que criou no passo 1 num fluxo de trabalho. Assim que a chave for definida num fluxo de trabalho, todos os argumentos e consultas da tarefa do fluxo de trabalho são encriptados através da chave para qualquer um dos tipos de tarefas e argumentos indicados em WorkflowTemplate.EncryptionConfig.kmsKey.

    CLI gcloud

    Transmita o ID do recurso da sua chave para a flag --kms-key quando criar o modelo de fluxo de trabalho com o comando gcloud dataproc workflow-templates create.

    Exemplo:

    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 ...
    
    Pode verificar a definição da chave com a ferramenta de linha de comandos 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

    Use WorkflowTemplate.EncryptionConfig.kmsKey como parte de um workflowTemplates.create request.

    Pode validar a definição da chave emitindo um pedido workflowTemplates.get. O JSON devolvido contém listas do kmsKey:

    ...
    "id": "my-template-name",
    "encryptionConfig": {
      "kmsKey": "projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name"
    },
    

Cloud External Key Manager

O Cloud External Key Manager (Cloud EKM) (EKM) permite proteger os dados do Dataproc através de chaves geridas por um parceiro de gestão de chaves externo suportado. Os passos que segue para usar o EKM no Dataproc são os mesmos que usa para configurar chaves CMEK, com a seguinte diferença: a sua chave aponta para um URI para a chave gerida externamente (consulte a vista geral do Cloud EKM).

Erros do Cloud EKM

Quando usa o Cloud EKM, uma tentativa de criar um cluster pode falhar devido a erros associados a entradas, ao Cloud EKM, ao sistema de gestão de chaves do parceiro externo ou às comunicações entre o EKM e o sistema externo. Se usar a API REST ou a Google Cloud consola, os erros são registados no Logging. Pode examinar os erros do cluster com falhas no separador Ver registo.