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 bucket e disco permanente são criptografados com uma chave de criptografia de dados (DEK, na sigla em inglês) gerada pelo Google e com uma chave de criptografia de chaves (KEK, na sigla em inglês).
O recurso CMEK permite que você crie, use e revogar a chave de criptografia de chaves (KEK). O Google ainda controla a chave 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 a VMs no cluster do Dataproc
- Dados de argumentos de job enviados para o 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:
- 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,
é criado da seguinte maneira:
projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
Atribua os seguintes papéis às seguintes contas de serviço:
- Siga o item 5 em Compute Engine→Como proteger recursos com chaves do Cloud KMS→Antes de começar para atribuir o papel CryptoKey Encrypter/Decrypter do Cloud KMS à conta de serviço do agente de serviço do Compute Engine.
Atribua o papel Criptografador/Descriptografador de CryptoKey do Cloud KMS à conta de serviço do agente de serviço do Cloud Storage.
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 (não o ID do projeto) do projeto do Google Cloud que executa os recursos do Dataproc.Ative a API Cloud KMS no projeto que executa os recursos do Dataproc.
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.
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 com 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
Exemplo de saída do 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 conferir uma lista de tipos de jobs 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 chaves com o comando
dataproc clusters describe
da CLI gcloud. O ID do recurso da chave é definido emgcePdKmsKeyName
ekmsKey
para usar a chave com a criptografia do disco permanente do cluster e dos dados 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:
- Crie seu próprio bucket com CMEK. Quando como adicionar a chave ao bucket use uma chave criada na Etapa 1.
- Transmita o nome do bucket para a flag
--bucket
ao criar o cluster.
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 de disco permanentes da VM do cluster usando sua chave, inclua o campo
ClusterConfig.EncryptionConfig.gcePdKmsKeyName
como parte de uma
solicitação
cluster.create.
É possível verificar a configuração da chave com a CLI gcloud
dataproc clusters describe
.gcloud dataproc clusters describe CLUSTER_NAME \ --region=REGION
Exemplo de saída do comando:
... configBucket: dataproc- ... encryptionConfig: gcePdKmsKeyName: projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME ...
- Para criptografar os dados do disco permanente da VM do cluster e os dados do argumento do job usando
sua chave, inclua o campo
Cluster.EncryptionConfig.kmsKey
como parte de uma solicitação cluster.create. Consulte Cluster.EncryptionConfig.kmsKey para conferir uma lista de tipos de jobs 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 é definidogcePdKmsKeyName
ekmsKey
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
Exemplo de saída 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:
- Create your own bucket with CMEK. When adding the key to the bucket, use a key that you created in Step 1.
- Pass the bucket name to the ClusterConfig.configBucket field as part of a cluster.create request.
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
- Para criptografar dados do disco permanente do cluster com sua chave, transmita
o ID de recurso da sua chave para a flag
Usar CMEK com dados de modelo de fluxo de trabalho
Os dados de argumentos de job do 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 sua Modelo de fluxo de trabalho do Dataproc. Consulte WorkflowTemplate.EncryptionConfig.kmsKey para conferir uma lista de tipos de jobs de modelo de fluxo de trabalho e argumentos criptografados usando CMEK quando esse recurso está ativado.
- 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
Para permitir que as contas de serviço do Dataproc usem sua chave:
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 (não o ID do projeto) do projeto do Google Cloud que executa os recursos do Dataproc.Ative a API Cloud KMS no projeto que executa os recursos do Dataproc.
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 do agente de serviço do Dataproc estiver anexado à conta de serviço do agente de serviço do Dataproc, pule esta etapa.
É possível usar a CLI do Google Cloud 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 do recurso da chave para a flag
--kms-key
ao criar o modelo de fluxo de trabalho com o comando gcloud dataproc workflow-templates create.Exemplo:
É possível verificar a configuração da chave na ferramenta de linha de comandogcloud 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 ...
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 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
O Cloud External Key Manager (EKM) (Cloud EKM) permite proteger 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ê usar a API REST ou o console do Google Cloud, os erros serão registrados no Logging. É possível examinar os erros do cluster com falha na guia Ver registro.