Chaves de criptografia gerenciadas pelo cliente (CMEK)

Quando você usa o Dataproc, os dados do cluster e do job são armazenados em discos permanentes associados às VMs do Compute Engine no cluster e em um bucket de preparo do Cloud Storage. Esses dados de disco permanente e bucket são criptografados com uma chave de criptografia de dados (DEK, na sigla em inglês) gerada pelo Google e a chave de criptografia de chaves (KEK, na sigla em inglês).

Com o recurso de CMEK, é possível criar, usar e revogar a chave de criptografia de chaves (KEK). O Google continuará controlando a chave de criptografia de dados (DEK). Para mais informações sobre chaves de criptografia de dados do Google, consulte Criptografia em repouso.

Usar CMEK com dados do cluster

É possível usar chaves de criptografia gerenciadas pelo cliente (CMEK) para criptografar os seguintes dados do cluster:

  • Dados nos discos permanentes anexados às VMs no cluster do Dataproc
  • Dados do argumento do job enviados ao cluster, como uma string de consulta enviada com um job do Spark SQL
  • Metadados do cluster, saída do driver do job e outros dados gravados em um bucket de preparo do Dataproc criado por você

Siga estas etapas para usar a CMEK com a criptografia dos dados do cluster:

  1. Crie uma ou mais chaves usando o Cloud Key Management Service. O nome do recurso, também chamado de ID do recurso de uma chave, usado nas próximas etapas, é criado da seguinte maneira:
    projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
    
  2. Atribua os papéis a seguir às seguintes contas de serviço:

    1. Siga o item 5 em Compute Engine → Como proteger recursos com chaves do Cloud KMS → Antes de começar para atribuir o papel Criptografador/Descriptografador CryptoKey do Cloud KMS à conta de serviço do agente de serviço do Compute Engine.
    2. Atribua o papel Criptografador/Descriptografador do CryptoKey do Cloud KMS à conta de serviço do agente de serviço do Cloud Storage.

    3. Atribua o papel Criptografador/Descriptografador de CryptoKey do Cloud KMS à conta de serviço do agente de serviço do Dataproc. Use 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:

      KMS_PROJECT_ID: o ID do projeto do Google Cloud que executa o Cloud KMS. Ele também pode ser aquele que executa os recursos do Dataproc.

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

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

    5. Se o papel Agente de serviço do Dataproc não estiver anexado à conta de serviço do agente de serviço do Dataproc, adicione a permissão serviceusage.services.use ao papel personalizado anexado à conta de serviço do Agente de serviço do Dataproc. Se o papel de agente de serviço do Dataproc estiver anexado à conta de serviço do agente de serviço do Dataproc, pule esta etapa.

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

    CLI da gcloud

    • Para criptografar dados do disco permanente do cluster usando sua chave, transmita o ID do recurso de sua chave para a sinalização --gce-pd-kms-key ao 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 ...
      

      É possível verificar a configuração da chave na ferramenta de linha de comando gcloud.

      gcloud dataproc clusters describe CLUSTER_NAME \
          --region=REGION
      

      Snippet de resposta ao comando:

      ...
      configBucket: dataproc- ...
      encryptionConfig:
      gcePdKmsKeyName: projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name
      ...
      
    • Para criptografar os dados do disco permanente do cluster e os dados do argumento do job usando a chave, transmita o ID do recurso da chave para a sinalização --kms-key ao criar o cluster. Consulte Cluster.EncryptionConfig.kmsKey para ver uma lista de tipos de job e argumentos criptografados com a sinalização --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 ...
        

      É possível verificar as configurações da chave com o comando dataproc clusters describe da CLI gcloud. O ID do recurso da chave é definido em gcePdKmsKeyName e kmsKey para usar a chave com a criptografia dos dados de argumento do job e do disco permanente do cluster.

      gcloud dataproc clusters describe CLUSTER_NAME \
          --region=REGION
        

      Snippet de resposta ao 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 criptografar os metadados do cluster, o driver do job e outros dados de saída gravados no bucket de preparo do Dataproc no Cloud Storage:
      gcloud dataproc clusters create CLUSTER_NAME \
          --region=REGION \
          --bucket=CMEK_BUCKET_NAME \
          other arguments ...
          

      Também é possível passar buckets ativados para CMEK no comando "gcloud dataproc jobs submit" caso seu job aceite argumentos de bucket, conforme mostrado no exemplo de "cmek-bucket" a seguir:

      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 criptografar os dados do disco permanente da VM do cluster usando a chave, inclua o campo ClusterConfig.EncryptionConfig.gcePdKmsKeyName como parte de uma solicitação cluster.create.

      É possível verificar a configuração da chave com o comando dataproc clusters describe da CLI gcloud.

      gcloud dataproc clusters describe CLUSTER_NAME \
          --region=REGION
      

      Snippet de resposta ao comando:

      ...
      configBucket: dataproc- ...
      encryptionConfig:
      gcePdKmsKeyName: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
      ...
      
    • Para criptografar dados do disco permanente da VM do cluster e dados de argumento do job usando a chave, inclua o campo Cluster.EncryptionConfig.kmsKey como parte de uma solicitação cluster.create. Consulte Cluster.EncryptionConfig.kmsKey para ver uma lista de tipos de job e argumentos criptografados com o campo --kms-key.

      É possível verificar as configurações da chave com o comando dataproc clusters describe da CLI gcloud. O ID do recurso da chave é definido em gcePdKmsKeyName e kmsKey para usar a chave com a criptografia dos dados de argumento do job e do disco permanente do cluster.

      gcloud dataproc clusters describe CLUSTER_NAME \
          --region=REGION
      

      Snippet de resposta ao 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 é possível passar buckets ativados para CMEK no comando "gcloud dataproc jobs submit" caso seu job aceite argumentos de bucket, conforme mostrado no exemplo de "cmek-bucket" a seguir:

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

Usar CMEK com dados de modelo de fluxo de trabalho

Os dados do argumento do job do modelo de fluxo de trabalho do Dataproc, como a string de consulta de um job do Spark SQL, podem ser criptografados usando CMEK. Siga as etapas 1, 2 e 3 desta seção para usar a CMEK com seu modelo de fluxo de trabalho do Dataproc. Consulte WorkflowTemplate.EncryptionConfig.kmsKey para acessar uma lista de tipos de jobs de modelo de fluxo de trabalho e argumentos que são criptografados usando CMEK quando esse recurso está ativado.

  1. Crie uma chave usando o Cloud Key Management Service (Cloud KMS). O nome do recurso da chave, que você vai usar nas próximas etapas, é criado da seguinte maneira:
    projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name
    
  2. Para permitir que as contas de serviço do Dataproc usem sua chave:

    1. Atribua o papel CryptoKey Encrypter/Decrypter do Cloud KMS à conta de serviço do agente de serviço do Dataproc. É possível usar a CLI gcloud para atribuir o papel:

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

      Substitua:

      KMS_PROJECT_ID: o ID do projeto do Google Cloud que executa o Cloud KMS. Ele também pode ser aquele que executa os recursos do Dataproc.

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

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

    3. Se o papel de agente de serviço do Dataproc não estiver anexado à conta de serviço do agente de serviço do Dataproc, adicione a permissão serviceusage.services.use ao papel personalizado anexado à conta de serviço do agente de serviço do Dataproc. Se o papel Agente de serviço do Dataproc estiver anexado à conta de serviço Agente de serviço do Dataproc, você poderá pular esta etapa.

  3. É possível usar a Google Cloud CLI ou a API Dataproc para definir a chave criada na Etapa 1 em um fluxo de trabalho. Depois que a chave é definida em um fluxo de trabalho, todos os argumentos e consultas do job do fluxo de trabalho são criptografados usando a chave de qualquer um dos tipos de job e argumentos listados em WorkflowTemplate.EncryptionConfig.kmsKey.

    CLI da gcloud

    Transmita o ID do recurso da sua chave para a sinalização --kms-key ao 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 ...
    
    É possível verificar a configuração da chave na ferramenta de linha de comando 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 uma solicitação deworkflowTemplates.create.

    É possível verificar a configuração da chave emitindo uma solicitação workflowTemplates.get. O JSON retornado 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) (link em inglês) permite proteger os dados do Dataproc usando chaves gerenciadas por um parceiro de gerenciamento de chaves externo compatível. As etapas a serem seguidas para usar o EKM no Dataproc são as mesmas que você usa para configurar chaves CMEK, com a seguinte diferença: seus pontos-chave para um URI da chave gerenciada externamente (consulte Visão geral do Cloud EKM).

Erros do Cloud EKM

Quando você usa o Cloud EKM, uma tentativa de criar um cluster pode falhar devido a erros associados a entradas, ao Cloud EKM, ao sistema do parceiro de gerenciamento de chaves externo ou às comunicações entre o EKM e o sistema externo. Se você usa a API REST ou o console do Google Cloud, os erros são registrados no Logging. É possível examinar os erros do cluster com falha na guia Ver registro.