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. 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 mais informações 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 a VMs de cluster do Serviço Gerenciado para Apache Spark
- Dados de argumentos de jobs 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 no bucket de preparação do cluster do Serviço Gerenciado para Apache Spark
Antes de começar
- Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho de nossos produtos em situações 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
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Instale a CLI do Google Cloud.
-
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
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Instale a CLI do Google Cloud.
-
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 seus recursos do Serviço Gerenciado para Apache Spark com CMEK, é possível automatizar a criação de chaves ou criá-las manualmente.
Criação automática de chaves
Use a Autokey para automatizar o provisionamento e a atribuição de CMEK. 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 manualmente chaves para criptografia CMEK de dados do cluster:
Crie uma ou mais chaves usando o Cloud KMS. O nome do recurso, também chamado de ID de uma chave, que você vai usar nas próximas etapas, é criado da seguinte maneira:
A chave (CMEK) precisa estar no mesmo local que o 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 localizada nessa região.us-central1Para 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 Managed Service para Apache Spark) tenha as permissões necessárias para proteger recursos usando chaves do Cloud KMS, peça ao administrador para conceder o papel do IAM 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 Managed Service para Apache Spark no seu projeto.Exemplo de atribuição do papel 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 projeto Google Cloud que contém a chave do Cloud KMS.PROJECT_NUMBER: o número do projeto (não o ID do projeto) do seu projeto Google Cloud que executa recursos do Serviço Gerenciado para Apache Spark.Se a função de agente de serviço do Serviço Gerenciado para Apache Spark não estiver anexada à conta de serviço do agente de serviço do Serviço Gerenciado para Apache Spark, adicione a permissão
serviceusage.services.usea uma função personalizada anexada à 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 da gcloud
- Para criptografar os dados do disco permanente do cluster usando sua chave, transmita
o ID do recurso da chave para a flag
--gce-pd-kms-keyao 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 da resposta ao comando:
... configBucket: dataproc- ... encryptionConfig: gcePdKmsKeyName: projects/project-id/locations/region/keyRings/key-ring-name/cryptoKeys/key-name ... - Para criptografar os dados do disco permanente do cluster e os argumentos do job usando sua chave, transmita o ID do recurso da chave para a flag
--kms-keyao criar o cluster. Consulte [Cluster.EncryptionConfig.kmsKey](/managed-spark/docs/reference/rest/v1/ClusterConfig#EncryptionConfig.FIELDS.kms_key) para ver 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 chave com o comando
dataproc clusters describeda CLI gcloud. O ID do recurso de chave é definido emgcePdKmsKeyNameekmsKeypara usar sua chave com a criptografia de disco permanente do cluster e dados de argumentos do job.gcloud dataproc clusters describe CLUSTER_NAME \ --region=REGIONSnippet da 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 do cluster, driver do 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.
- Transfira 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 passar buckets habilitados para CMEK no comando `gcloud dataproc jobs submit` se o job aceitar argumentos de bucket, 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 do disco permanente 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 o comando
dataproc clusters describeda CLI gcloud.gcloud dataproc clusters describe CLUSTER_NAME \ --region=REGIONSnippet da 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 argumentos do job usando
sua chave, inclua o campo
Cluster.EncryptionConfig.kmsKeycomo parte de uma solicitação cluster.create. Consulte Cluster.EncryptionConfig.kmsKey para uma lista de tipos de jobs 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 de chave é definido emgcePdKmsKeyNameekmsKeypara usar sua chave com a criptografia de disco permanente do cluster e dados de argumentos do job.gcloud dataproc clusters describe CLUSTER_NAME \ --region=REGIONSnippet da 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 do cluster, driver do 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 o campo ClusterConfig.configBucket como parte de uma solicitação cluster.create.
gcloud dataproc clusters create CLUSTER_NAME \ --region=REGION \ --bucket=CMEK_BUCKET_NAME \ other arguments ...Também é possível passar buckets habilitados para CMEK no comando `gcloud dataproc jobs submit` se o job aceitar argumentos de bucket, 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 o CMEK com dados de modelo de fluxo de trabalho
Os dados de argumentos de jobs de 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 seu modelo de fluxo de trabalho do Serviço Gerenciado para Apache Spark. Consulte WorkflowTemplate.EncryptionConfig.kmsKey para ver uma lista de tipos de jobs e argumentos de modelo de fluxo de trabalho criptografados com CMEK quando esse recurso está ativado.
- Crie uma chave usando o Cloud KMS.
O nome do recurso da 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
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 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 seu projeto Google Cloud que executa o Cloud KMS. Esse projeto também pode ser o 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 projeto Google Cloud 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 de 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 de 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 da gcloud
Transmita o ID do recurso da sua chave para a sinalização
--kms-keyao 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 com suporte. 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 console Google Cloud , os erros serão registrados no Cloud Logging. É possível examinar os erros do cluster com falha na guia Ver registro.