Chaves de criptografia gerenciadas pelo cliente (CMEK)

Ao usar 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 staging bucket. Por padrão, esses dados de disco permanente e de bucket são criptografados usando uma chave de criptografia de dados (DEK) gerada pelo Google e uma chave de criptografia de chaves (KEK).

Se você quiser controlar e gerenciar a chave de criptografia de chaves (KEK), use as chaves de criptografia gerenciadas pelo cliente (CMEK). O Google continua controlando a chave de criptografia de dados (DEK). Para saber mais sobre chaves de criptografia de dados do Google, consulte Criptografia em repouso.

Criptografia de dados de cluster com CMEK

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

  • Dados em discos permanentes anexados a VMs de cluster do Dataproc
  • Dados de argumentos de job enviados ao cluster, como uma string de consulta enviada com um job do Spark SQL
  • Metadados de cluster, saída do driver de job, e outros dados gravados no cluster do Dataproc bucket de preparo

Antes de começar

  1. Faça login na sua Google Cloud conta do. Se você começou a usar o Google Cloudagora, crie uma conta para avaliar o desempenho dos nossos produtos em situações reais. Clientes novos também recebem US $300 em créditos para executar, testar e implantar cargas de trabalho.
  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. Instale a Google Cloud CLI.

  6. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

  7. Para inicializar a CLI gcloud, execute o seguinte 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. Instale a Google Cloud CLI.

  12. Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

  13. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init

Criar chaves

Para proteger seus recursos do Dataproc com a CMEK, é possível automatizar a criação de chaves ou criar chaves manualmente.

Criação de chaves automatizada

Use o Autokey para automatizar o provisionamento de CMEK e a atribuição. O Autokey gera keyrings e chaves sob demanda quando os recursos são criados. Os agentes de serviço usam as chaves em operações de criptografia e descriptografia. Se necessário, o Autokey cria os agentes e concede a eles os papéis necessários do Identity and Access Management (IAM). Para mais informações, consulte Visão geral das chaves automáticas.

Criação manual de chaves

Siga estas etapas para criar chaves manualmente para a criptografia de dados de cluster com CMEK:

  1. Crie uma ou mais chaves usando o Cloud KMS. O nome do recurso, também chamado de ID do recurso de uma chave, que você usa nas próximas etapas, é construído da seguinte maneira:

    projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
    
    A chave (CMEK) precisa estar no mesmo local que o recurso criptografado. Por exemplo, a CMEK usada para criptografar um recurso na região us-central1 também precisa estar na região us-central1.

  2. Para garantir que cada uma das seguintes contas de serviço, conta de serviço do agente de serviço do Compute Engine, conta de serviço do agente de serviço do Cloud Storage e conta de serviço do agente de serviço do Dataproc, tenha as permissões necessárias para proteger recursos usando as chaves do Cloud KMS, peça ao administrador para conceder o papel de Criptografador/Descriptografador de CryptoKey do Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) do IAM a cada uma das seguintes contas de serviço, conta de serviço do agente de serviço do Compute Engine, conta de serviço do agente de serviço do Cloud Storage e conta de serviço do agente de serviço do Dataproc, no seu projeto.

    Exemplo de atribuição do papel de criptografador/descriptografador de CryptoKey do Cloud KMS à conta de serviço do agente de serviço do Dataproc usando a 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
    

    Substitua:

    KMS_PROJECT_ID: o ID do seu Google Cloud projeto que contém a chave do Cloud KMS.

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

  3. Se o papel do agente de serviço do Dataproc não estiver anexado a a conta de serviço do agente de serviço do Dataproc, adicione a permissão serviceusage.services.use a um papel personalizado anexado à conta de serviço do agente de serviço do Dataproc.

Criar um cluster com CMEK

Transmita o ID do recurso da chave ao criar o cluster do Dataproc.

CLI gcloud

  • Para criptografar dados de disco permanente do cluster usando sua chave, transmita o ID do recurso da chave para a --gce-pd-kms-key flag 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 dados de disco permanente do cluster e dados de argumentos de job usando sua chave, transmita o ID do recurso da chave para a --kms-key flag ao criar o cluster. Consulte [Cluster.EncryptionConfig.kmsKey](/dataproc/docs/reference/rest/v1/ClusterConfig#EncryptionConfig.FIELDS.kms_key) para conferir 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 de chave com o comando dataproc clusters describe da CLI gcloud. O ID do recurso principal é definido em gcePdKmsKeyName e kmsKey para usar a chave com a criptografia de dados de disco permanente do cluster e argumentos de 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
    ...
        
  • Para criptografar metadados de cluster, driver de job e outros dados de saída gravados no seu 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 no comando `gcloud dataproc jobs submit` caso seu job aceite argumentos de buckets, conforme mostrado no exemplo `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 dados de disco permanente de VM de cluster usando sua chave, inclua o ClusterConfig.EncryptionConfig.gcePdKmsKeyName campo como parte de uma 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 de disco permanente de VM de cluster e dados de argumentos de job usando sua chave, inclua o Cluster.EncryptionConfig.kmsKey campo como parte de uma cluster.create. Consulte Cluster.EncryptionConfig.kmsKey para conferir uma lista de tipos de job e argumentos criptografados com o campo --kms-key.

    É possível verificar as configurações de chave com o comando dataproc clusters describe da CLI gcloud. O ID do recurso principal é definido em gcePdKmsKeyName e kmsKey para usar a chave com a criptografia de dados de disco permanente do cluster e argumentos de 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
    ...
        
  • Para criptografar metadados de cluster, driver de job e outros dados de saída gravados no seu 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 no comando `gcloud dataproc jobs submit` caso seu job aceite argumentos de buckets, conforme mostrado no exemplo `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 a CMEK com dados de modelo de fluxo de trabalho

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

  1. Crie uma chave usando o Cloud KMS. O nome do recurso da chave, que você usa nas próximas etapas, é construído 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. Use 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 seu Google Cloud projeto que executa o Cloud KMS. Esse 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 o papel do 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 do agente de serviço do Dataproc estiver anexado à conta de serviço do agente de serviço do Dataproc, pule esta etapa.

  3. É possível usar a CLI gcloud 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 para qualquer um dos tipos de job e argumentos listados em WorkflowTemplate.EncryptionConfig.kmsKey.

    CLI gcloud

    Transmita o ID do recurso da chave para a --kms-key flag 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 workflowTemplates.create.

    É possível verificar a configuração da chave emitindo uma solicitação workflowTemplates.get. O JSON retornado contém a 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) permite proteger dados do Dataproc usando chaves gerenciadas por um parceiro de gerenciamento de chaves externas com suporte. As etapas para usar o Cloud EKM no Dataproc são as mesmas usadas para configurar chaves CMEK, com a seguinte diferença: a chave aponta para um URI referente à 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 externo de parceiros de gerenciamento de chaves ou a comunicações entre o Cloud EKM e o sistema externo. Se você usar a API REST ou o Google Cloud console, os erros serão registrados em Cloud Logging. É possível examinar os erros do cluster com falha na guia Ver registro.