Ao usar o Serviço Gerenciado para Apache Spark, 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 do disco permanente e do bucket são criptografados com 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 CMEK
É possível usar chaves de criptografia gerenciadas pelo cliente (CMEK) para criptografar os seguintes dados do cluster:
- Dados em discos permanentes anexados às VMs do cluster do Serviço Gerenciado para Apache Spark
- Dados de argumentos de job enviados ao cluster, como uma string de consulta enviada com um job do Spark SQL
- Metadados do cluster, saída do driver de job, e outros dados gravados no cluster do Serviço Gerenciado para Apache Spark bucket de preparo
Antes de começar
- Faça login na sua Google Cloud conta do. Se você não conhece o Google Cloud, crie uma conta para avaliar o desempenho dos nossos produtos em cenários reais. Clientes novos também recebem US $300 em créditos para executar, testar e implantar cargas de trabalho.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
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 theserviceusage.services.enablepermission. Learn how to grant roles.-
Instale a Google Cloud CLI.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na CLI gcloud com sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
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 theserviceusage.services.enablepermission. Learn how to grant roles.-
Instale a Google Cloud CLI.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na CLI gcloud com sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
Criar chaves
Para proteger os recursos do Serviço Gerenciado para Apache Spark com a CMEK, é possível automatizar a criação de chaves ou criar chaves manualmente.
Criação automatizada de chaves
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 CMEK de dados de cluster:
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, é criado da seguinte maneira:
A chave (CMEK) precisa estar no mesmo local do recurso criptografado. Por exemplo, a CMEK usada para criptografar um recurso na regiãoprojects/PROJECT_ID/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
us-central1também precisa estar na regiãous-central1.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 Serviço Gerenciado para Apache Spark) 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) 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 Serviço Gerenciado para Apache Spark) 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 Serviço Gerenciado para Apache Spark 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 Serviço Gerenciado para Apache Spark.Se o papel do agente de serviço do Serviço Gerenciado para Apache Spark não estiver anexado a a conta de serviço do agente de serviço do Serviço Gerenciado para Apache Spark, adicione a permissão
serviceusage.services.usea um papel personalizado anexado à conta de serviço do agente de serviço do Serviço Gerenciado para Apache Spark.
Criar um cluster com CMEK
Transmita o ID do recurso da chave ao criar o cluster do Serviço Gerenciado para Apache Spark.
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-keyflag 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=REGIONSnippet 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-keyflag 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 describeda CLI gcloud. O ID do recurso principal é definido emgcePdKmsKeyNameekmsKeypara usar sua chave com a criptografia de disco permanente do cluster e dados de argumentos de job.gcloud dataproc clusters describe CLUSTER_NAME \ --region=REGIONSnippet 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
bucket de preparo do Serviço Gerenciado para Apache Spark no Cloud Storage:
- Crie seu próprio bucket com CMEK. Ao adicionar a chave ao bucket, use uma chave criada na etapa 1.
- Transmita o nome do bucket para a flag
--bucketao 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 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 describeda CLI gcloud.gcloud dataproc clusters describe CLUSTER_NAME \ --region=REGIONSnippet 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.kmsKeycampo 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 describeda CLI gcloud. O ID do recurso principal é definido emgcePdKmsKeyNameekmsKeypara usar sua chave com a criptografia de disco permanente do cluster e dados de argumentos de job.gcloud dataproc clusters describe CLUSTER_NAME \ --region=REGIONSnippet 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 Serviço Gerenciado para Apache Spark no Cloud Storage:
- Crie seu próprio bucket com CMEK. Ao adicionar a chave ao bucket, use uma chave criada na etapa 1.
- Transmita o nome do bucket para o ClusterConfig.configBucket campo como parte de uma cluster.create.
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 do modelo de fluxo de trabalho do Serviço Gerenciado para Apache Spark, 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 Serviço Gerenciado para Apache Spark. 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.
- Crie uma chave usando o Cloud KMS.
O nome do recurso da chave, que você usa nas próximas etapas, é criado da seguinte maneira:
projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name
Para permitir que as contas de serviço do Serviço Gerenciado para Apache Spark usem sua chave:
Atribua o papel
CryptoKey Encrypter/Decrypterdo Cloud KMS à conta de serviço do agente de serviço do Serviço Gerenciado para Apache Spark. 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 Serviço Gerenciado para Apache Spark.
PROJECT_NUMBER: o número do projeto (não o ID do projeto) do seu Google Cloud projeto que executa recursos do Serviço Gerenciado para Apache Spark.
Ative a API Cloud KMS no projeto que executa recursos do Serviço Gerenciado para Apache Spark.
Se o papel do agente de serviço do Serviço Gerenciado para Apache Spark não estiver anexado à conta de serviço do agente de serviço do Serviço Gerenciado para Apache Spark, adicione a permissão
serviceusage.services.useao papel personalizado anexado à conta de serviço do agente de serviço do Serviço Gerenciado para Apache Spark. Se o papel do agente de serviço do Serviço Gerenciado para Apache Spark estiver anexado à conta de serviço do agente de serviço do Serviço Gerenciado para Apache Spark, pule esta etapa.
É 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-keyflag 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 solicitação workflowTemplates.get. O JSON retornado contém o
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 Serviço Gerenciado para Apache Spark usando chaves gerenciadas por um parceiro de gerenciamento de chaves externas compatível. As etapas para usar o Cloud EKM no Serviço Gerenciado para Apache Spark são as mesmas que você usa 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 Visualizar registro.