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:
- 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
Atribua as seguintes funções às seguintes contas de serviço:
- 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.
Atribua a função encriptador/desencriptador de CryptoKey do Cloud KMS à conta de serviço do agente de serviço do Cloud Storage.
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.Ative a API Cloud KMS no projeto que executa recursos do Dataproc.
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.
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-keyquando 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-keyquando 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 describeda CLI gcloud. O ID do recurso da chave é definido emgcePdKmsKeyNameekmsKeypara 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:
- Crie o seu próprio contentor com CMEK. Quando adicionar a chave ao contentor, use uma chave que criou no Passo 1.
- Transmita o nome do contentor à flag
--bucketquando criar o cluster.
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 describeda 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.kmsKeycomo 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 emgcePdKmsKeyNameekmsKeypara 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:
- 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 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
- Para encriptar os dados do disco persistente do cluster com a sua chave, transmita o ID do recurso da chave à flag
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.
- 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
Para permitir que as contas de serviço do Dataproc usem a sua chave:
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.Ative a API Cloud KMS no projeto que executa recursos do Dataproc.
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.
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-keyquando criar o modelo de fluxo de trabalho com o comando gcloud dataproc workflow-templates create.Exemplo:
Pode verificar a definição da chave com a ferramenta de linha de comandosgcloud 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 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.