Chaves de criptografia gerenciadas pelo cliente (CMEK)

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

O recurso CMEK permite que você crie, use e revogar a chave de criptografia de chaves (KEK). O Google ainda controla os dados de criptografia de dados (DEK). Para mais informações sobre as 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 que você cria
.

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, que você vai usar nas próximas etapas. é construído da seguinte forma:
    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 atribuir o nó do Cloud KMS Criptografador/Descriptografador do CryptoKey para o agente de serviço do Compute Engine conta de serviço.
    2. Atribua o Cloud KMS Criptografador/Descriptografador do CryptoKey para o papel Agente de serviço do Cloud Storage conta de serviço.

    3. Atribua o Cloud KMS Criptografador/Descriptografador do CryptoKey para o papel Agente de serviço do Dataproc conta de serviço. 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 ao a conta de serviço do agente de serviço do Dataproc depois adicionar a permissão serviceusage.services.use ao bloco anexado à conta de serviço do agente de serviço do Dataproc. Se o papel Agente de serviço do Dataproc for anexada à 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 de cluster.

    CLI da gcloud

    • Para criptografar dados do disco permanente do cluster usando sua chave, transmita o ID de recurso da sua chave para a flag --gce-pd-kms-key ao criar no 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
      ...
      
    • Criptografar dados do disco permanente do cluster e dados do argumento do job usando sua chave, passe o ID de recurso da chave para a 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 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 ...
        

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

      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 transmitir buckets ativados para CMEK para "gcloud dataproc jobs submit" se o job tiver 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 sua chave, inclua o ClusterConfig.EncryptionConfig.gcePdKmsKeyName como parte de um cluster.create solicitação.

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

      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 na chave, inclua o campo Cluster.EncryptionConfig.kmsKey como parte cluster.create solicitação. 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 a CLI gcloud dataproc clusters describe. O ID do recurso da chave é definido gcePdKmsKeyName e kmsKey para usar sua chave com a criptografia de dados do disco permanente do cluster e do argumento do job.

      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 transmitir buckets ativados para CMEK para "gcloud dataproc jobs submit" se o job tiver 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

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 criptografadas usando CMEK. Siga as etapas 1, 2 e 3 desta seção para usar a CMEK com sua Modelo de fluxo de trabalho do Dataproc. Consulte WorkflowTemplate.EncryptionConfig.kmsKey para consultar uma lista de argumentos e tipos de job do modelo de fluxo de trabalho que são criptografados com CMEK quando esse recurso estiver ativado.

  1. Crie uma chave usando o Cloud Key Management Service (Cloud KMS). O nome de recurso da chave, que você vai usar nas próximas etapas. é construído 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 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 Agente de serviço do Dataproc não estiver anexado à conta de serviço do agente de serviço do Dataproc, depois adicionar a permissão serviceusage.services.use ao bloco anexado à conta de serviço do agente de serviço do Dataproc. Se o papel Agente de serviço do Dataproc for anexada à conta de serviço do agente de serviço do Dataproc, pule esta etapa.

  3. Use 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 com a chave de qualquer um dos tipos de job. e argumentos listados em WorkflowTemplate.EncryptionConfig.kmsKey.

    CLI da gcloud

    Transmita o ID de recurso da sua chave ao a sinalização --kms-key ao criar o modelo de fluxo de trabalho com o 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 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

    Usar WorkflowTemplate.EncryptionConfig.kmsKey como parte de um solicitação fluxoTemplates.create.

    É possível verificar a configuração da chave emitindo uma workflowTemplates.get solicitação. 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

Gerenciador de chaves externas do Cloud (Cloud EKM) (EKM) você protege os dados do Dataproc usando chaves gerenciadas por um parceiro de gerenciamento de chaves externo com suporte. As etapas a serem seguidas para usar o EKM no Dataproc são as mesmas aqueles que você usa para configurar chaves CMEK, com a seguinte diferença: seus pontos principais para uma URI da chave gerenciada externamente (consulte a seção Visão geral do Cloud EKM).

Erros do Cloud EKM

Ao usar o Cloud EKM, a tentativa de criar um cluster pode falhar devido a erros associados às entradas, o Cloud EKM, a chave externa ou as 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 o estado da guia Ver registro.