Use chaves de encriptação geridas pelo cliente

Por predefinição, o Dataflow encripta o conteúdo do cliente em repouso. O Dataflow processa a encriptação por si sem ações adicionais da sua parte. Esta opção chama-se Encriptação predefinida da Google.

Se quiser controlar as suas chaves de encriptação, pode usar chaves de encriptação geridas pelo cliente (CMEK) no Cloud KMS com serviços integrados com CMEK, incluindo o Dataflow. A utilização de chaves do Cloud KMS dá-lhe controlo sobre o respetivo nível de proteção, localização, programação de rotação, utilização, autorizações de acesso e limites criptográficos. A utilização do Cloud KMS também permite monitorizar a utilização das chaves, ver registos de auditoria e controlar os ciclos de vida das chaves. Em vez de a Google possuir e gerir as chaves de encriptação de chaves (KEKs) simétricas que protegem os seus dados, controla e gere estas chaves no Cloud KMS.

Depois de configurar os seus recursos com CMEKs, a experiência de acesso aos recursos do Dataflow é semelhante à utilização da encriptação predefinida da Google. Para mais informações acerca das suas opções de encriptação, consulte o artigo Chaves de encriptação geridas pelo cliente (CMEK).

Pode criar um pipeline em lote ou de streaming protegido com uma CMEK ou aceder a dados protegidos com CMEK em origens e destinos.

CMEK com chave automática do Cloud KMS

Pode criar CMEKs manualmente para proteger os seus recursos do Dataflow ou usar a chave automática do Cloud KMS. Com a Autokey, os conjuntos de chaves e as chaves são gerados a pedido como parte da criação ou atualização de recursos no Dataflow. Os agentes de serviço que usam as chaves para operações de encriptação e desencriptação são criados se ainda não existirem e recebem as funções de gestão de identidade e de acesso (IAM) necessárias. Para mais informações, consulte a vista geral do Autokey.

Para saber como usar CMEKs criadas manualmente para proteger os seus recursos do Dataflow, consulte o artigo Crie um pipeline protegido pelo Cloud KMS.

Para usar CMEKs criadas pela chave automática do Cloud KMS para proteger os seus recursos do Dataflow, use os passos fornecidos para o Dataflow em Usar a chave automática com recursos do Dataflow para gerar uma chave e, em seguida, siga os passos em Crie um pipeline protegido pelo Cloud KMS.

Quotas do Cloud KMS e Dataflow

Quando usa CMEK no Dataflow, os seus projetos podem consumir quotas de pedidos criptográficos do Cloud KMS. Por exemplo, os pipelines do Dataflow podem consumir estas quotas quando o pipeline acede a dados protegidos por CMEK em origens e destinos ou quando o estado de um pipeline encriptado por CMEK é obtido. Para mais informações, consulte a secção Encriptação das localizações do estado do pipeline nesta página.

As operações de encriptação e desencriptação com chaves CMEK afetam as quotas do Cloud KMS das seguintes formas:

  • Para chaves CMEK de software geradas no Cloud KMS, não é consumida nenhuma quota do Cloud KMS.
  • Para chaves CMEK de hardware, por vezes denominadas chaves do Cloud HSM, as operações de encriptação e desencriptação são contabilizadas para as quotas do Cloud HSM no projeto que contém a chave.
  • Para chaves CMEK externas, por vezes denominadas chaves do Cloud EKM, as operações de encriptação e desencriptação são contabilizadas em função das quotas do Cloud EKM no projeto que contém a chave.

Para mais informações, consulte as cotas do Cloud KMS.

Apoio técnico e limitações

  • O Cloud KMS é suportado nas seguintes versões do SDK Apache Beam:

    • Versões 2.13.0 e posteriores do SDK Java
    • Versões 2.13.0 e posteriores do SDK Python
    • Versões 2.40.0 e posteriores do SDK Go
  • O Cloud KMS com o Dataflow suporta chaves regionais. Se substituir a região ou a zona do trabalhador do pipeline para usar uma região diferente da associada às suas chaves, as chaves regionais não funcionam.

  • A região da CMEK e a região da sua tarefa do Dataflow têm de ser as mesmas.

  • As localizações globais e de várias regiões não são suportadas. Não pode usar chaves globais e multirregionais com pipelines do Dataflow.

Encriptação de artefactos de estado do pipeline

Os dados que um pipeline do Dataflow lê de origens de dados especificadas pelo utilizador são encriptados, exceto as chaves de dados que especifica para transformações baseadas em chaves em tarefas de streaming.

Para tarefas em lote, todos os dados, incluindo as chaves de dados que especificar para transformações baseadas em chaves, estão sempre protegidos pela encriptação CMEK.

Para tarefas de streaming criadas após 7 de março de 2024, todos os dados do utilizador são encriptados com CMEK.

Para tarefas de streaming criadas antes de 7 de março de 2024, as chaves de dados usadas em operações baseadas em chaves, como visualização baseada na janela atual, agrupamento e junção, não estão protegidas pela encriptação CMEK. Para ativar esta encriptação para as suas tarefas, esvazie ou cancele a tarefa e, em seguida, reinicie-a.

Os metadados de tarefas não são encriptados com chaves do Cloud KMS. Os metadados de tarefas incluem o seguinte:

  • Dados fornecidos pelo utilizador, como nomes de tarefas, valores de parâmetros de tarefas e o gráfico do pipeline
  • Dados gerados pelo sistema, como IDs de tarefas e endereços IP dos trabalhadores

Encriptação das localizações do estado do pipeline

As seguintes localizações de armazenamento estão protegidas com chaves do Cloud KMS:

  • Discos persistentes anexados a trabalhadores do Dataflow e usados para armazenamento de estado de streaming e aleatório baseado em disco persistente.
  • Estado do Shuffle do Dataflow para pipelines em lote.
  • Recipientes do Cloud Storage que armazenam dados de exportação ou importação temporários. O fluxo de dados só suporta chaves predefinidas definidas pelo utilizador ao nível do contentor.
  • Contentores do Cloud Storage usados para armazenar ficheiros binários que contêm código de pipeline. O Dataflow só suporta chaves predefinidas definidas pelo utilizador ao nível do contentor.
  • Contentores do Cloud Storage usados para armazenar dados de pipelines com amostragem quando a amostragem de dados está ativada.
  • Estado do Streaming Engine do Dataflow para pipelines de streaming.

Chaves externas

Pode usar o Cloud External Key Manager (Cloud EKM) para encriptar dados na Google Cloud Platform com chaves externas que gere.

Quando usa uma chave do Cloud EKM, a Google não tem controlo sobre a disponibilidade da sua chave gerida externamente. Se a chave ficar indisponível durante o período de criação da tarefa ou do pipeline, a tarefa ou o pipeline é cancelado.

Para ver mais considerações ao usar chaves externas, consulte o artigo Cloud External Key Manager.

Antes de começar

  1. Verifique se tem o Apache Beam SDK para Java 2.13.0 ou posterior, o Apache Beam SDK para Python 2.13.0 ou posterior, ou o Apache Beam SDK para Go 2.40.0 ou posterior.

    Para mais informações, consulte o artigo Instalar o SDK do Apache Beam.

  2. Decida se vai executar o Dataflow e o Cloud KMS no mesmo projeto da Google Cloud Platform ou em projetos diferentes. Esta página usa a seguinte convenção:

    • PROJECT_ID é o ID do projeto que está a executar o Dataflow.
    • PROJECT_NUMBER é o número do projeto do projeto que está a executar o Dataflow.
    • KMS_PROJECT_ID é o ID do projeto do projeto que está a executar o Cloud KMS.

    Para obter informações sobre os Google Cloud IDs e os números dos projetos, consulte o artigo Identificar projetos.

  3. No Google Cloud projeto no qual quer executar o Cloud KMS:

    1. Ative a API Cloud KMS.
    2. Crie um conjunto de chaves e uma chave, conforme descrito no artigo Criação de chaves simétricas. O Cloud KMS e o Dataflow são serviços regionalizados. A região da CMEK e a região da tarefa do Dataflow têm de ser iguais. Não use chaves globais ou multirregionais com os pipelines do Dataflow. Em alternativa, use teclas regionais.

Conceda autorizações de encriptação/desencriptação

  1. Atribua a função Cloud KMS CryptoKey Encrypter/Decrypter à conta de serviço do Dataflow. Esta autorização concede à sua conta de serviço do Dataflow a autorização para encriptar e desencriptar com a CMEK que especificar. Se usar a Google Cloud consola e a página Criar tarefa a partir de modelo, esta autorização é concedida automaticamente e pode ignorar este passo.

    Use a Google Cloud CLI para atribuir a função:

    gcloud projects add-iam-policy-binding KMS_PROJECT_ID \
    --member serviceAccount:service-PROJECT_NUMBER@dataflow-service-producer-prod.iam.gserviceaccount.com \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter

    Substitua KMS_PROJECT_ID pelo ID do seu projeto que está a executar o Cloud KMS e substitua PROJECT_NUMBER pelo número do projeto (não o ID do projeto) do seu projeto que está a executar os recursos do Dataflow. Google Cloud Google Cloud

  2. Atribua a função Cloud KMS CryptoKey Encrypter/Decrypter à conta de serviço do Compute Engine. Esta autorização concede à sua conta de serviço do Compute Engine a autorização para encriptar e desencriptar com a CMEK que especificar.

    Use a Google Cloud CLI para atribuir a função:

    gcloud projects add-iam-policy-binding KMS_PROJECT_ID \
    --member serviceAccount:service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter

    Substitua KMS_PROJECT_ID pelo ID do seu Google Cloud projeto que está a executar o Cloud KMS e substitua PROJECT_NUMBER pelo número do projeto (não o ID do projeto) do seu Google Cloud projeto que está a executar os recursos do Compute Engine.

Crie um pipeline protegido pelo Cloud KMS

Quando cria um pipeline de processamento em lote ou de streaming, pode selecionar uma chave do Cloud KMS para encriptar o estado do pipeline. O estado do pipeline são os dados armazenados pelo Dataflow no armazenamento temporário.

Interface de linhas de comando

Para criar um novo pipeline com um estado do pipeline protegido por uma chave do Cloud KMS, adicione a flag relevante aos parâmetros do pipeline. O exemplo seguinte demonstra a execução de um pipeline de contagem de palavras com o Cloud KMS.

Use o Autokey

Se ainda não o fez, ative a chave automática do Cloud KMS.

Para usar o Autokey com pipelines criados a partir da linha de comandos, siga as instruções em Usar o Autokey com recursos do Dataflow para aprovisionar uma chave e, em seguida, use-a em vez de KMS_KEY.

Java

O Dataflow não suporta a criação de caminhos do Cloud Storage predefinidos para ficheiros temporários quando usa uma chave do Cloud KMS. É necessário especificar gcpTempLocation.

mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \
  -Dexec.args="--inputFile=gs://dataflow-samples/shakespeare/kinglear.txt \
               --output=gs://STORAGE_BUCKET/counts \
               --runner=DataflowRunner --project=PROJECT_ID \
               --gcpTempLocation=gs://STORAGE_BUCKET/tmp \
               --dataflowKmsKey=KMS_KEY"
  -Pdataflow-runner

Python

O Dataflow não suporta a criação de caminhos do Cloud Storage predefinidos para ficheiros temporários quando usa uma chave do Cloud KMS. É necessário especificar gcpTempLocation.

python -m apache_beam.examples.wordcount \
  --input gs://dataflow-samples/shakespeare/kinglear.txt \
  --output gs://STORAGE_BUCKET/counts \
  --runner DataflowRunner \
  --region HOST_GCP_REGION \
  --project PROJECT_ID \
  --temp_location gs://STORAGE_BUCKET/tmp/ \
  --dataflow_kms_key=KMS_KEY

Go

O Dataflow não suporta a criação de caminhos do Cloud Storage predefinidos para ficheiros temporários quando usa uma chave do Cloud KMS. É necessário especificar gcpTempLocation.

wordcount
  --project HOST_PROJECT_ID \
  --region HOST_GCP_REGION \
  --runner dataflow \
  --staging_location gs://STORAGE_BUCKET/staging \
  --temp_location gs://STORAGE_BUCKET/temp \
  --input gs://dataflow-samples/shakespeare/kinglear.txt \
  --output gs://STORAGE_BUCKET/output \
  --dataflow_kms_key=KMS_KEY

Google Cloud consola

  1. Abra a interface de monitorização do Dataflow.
    Aceda à interface Web do Dataflow
  2. Selecione Criar tarefa a partir de modelo.
  3. Na secção Encriptação, selecione Chave gerida pelo cliente.
As opções de encriptação na página Criar tarefa a partir de modelo para usar
              um Google-owned and Google-managed encryption key ou chaves geridas pelo cliente.

Na primeira vez que tenta executar uma tarefa com uma chave do Cloud KMS específica, é possível que não tenham sido concedidas à conta de serviço do Compute Engine ou à conta de serviço do Dataflow as autorizações para encriptar e desencriptar com essa chave. Neste caso, é apresentada uma mensagem de aviso a pedir-lhe que conceda a autorização à sua conta de serviço.

Pede para conceder autorizações para encriptar e desencriptar nas suas contas de serviço do Compute Engine e Dataflow através de uma CMEK específica.

Valide a utilização da chave do Cloud KMS

Pode verificar se o seu pipeline usa uma chave do Cloud KMS através da Google Cloud consola ou da CLI do Google Cloud.

Consola

  1. Abra a interface de monitorização do Dataflow.
    Aceda à interface Web do Dataflow
  2. Para ver os detalhes da tarefa, selecione a tarefa do Dataflow.
  3. No painel lateral Informações da tarefa, para ver o tipo de chave, verifique o campo Tipo de encriptação.

    • Para o tipo de encriptação: "Chave gerida pela Google"
      Painel lateral de informações do trabalho que apresenta os detalhes de uma tarefa do Dataflow.
      O tipo de chave que a sua tarefa usa é apresentado no campo Tipo de encriptação.
    • Para o tipo de encriptação: "Chave gerida pelo cliente"
      Painel lateral de informações do trabalho que apresenta os detalhes de uma tarefa do Dataflow.
      O tipo de chave que a sua tarefa usa é apresentado no campo Tipo de encriptação.

CLI

Execute o comando describe através da CLI gcloud:

gcloud dataflow jobs describe JOB_ID

Pesquise a linha que contém serviceKmsKeyName. Estas informações mostram que foi usada uma chave do Cloud KMS para a encriptação do estado do pipeline do Dataflow.

Pode validar a utilização da chave do Cloud KMS para encriptar origens e destinos através das páginas da consola e das ferramentas dessas origens e destinos, incluindo o Pub/Sub, o Cloud Storage e o BigQuery. Google Cloud Também pode validar a utilização da chave do Cloud KMS através da visualização dos registos de auditoria do Cloud KMS.

Desative ou destrua a chave

Se, por qualquer motivo, precisar de desativar ou destruir a chave, pode usar a Google Cloud consola. As operações de desativação e destruição cancelam as tarefas que usam essa chave. Esta operação é permanente.

Se estiver a usar o Cloud EKM, desative ou destrua a chave no seu gestor de chaves externo.

Se estiver a usar a opção Streaming Engine, recomendamos que tire uma captura de ecrã da tarefa antes de desativar a chave.

Remova o acesso do Dataflow à chave do Cloud KMS

Pode remover o acesso do Dataflow à chave do Cloud KMS através dos seguintes passos:

  1. Revogue a função Cloud KMS CryptoKey Encrypter/Decrypter à conta de serviço do Dataflow através da Google Cloud consola ou da CLI gcloud.
  2. Revogue a Cloud KMS CryptoKey Encrypter/Decrypter função da conta de serviço do Compute Engine através da Google Cloud consola ou da CLI gcloud.
  3. Opcionalmente, também pode destruir o material da versão da chave para impedir ainda mais que o Dataflow e outros serviços acedam ao estado do pipeline.

Embora possa destruir o material da versão da chave, não pode eliminar chaves nem conjuntos de chaves. Os porta-chaves e as chaves não têm custos faturáveis nem limitações de quota, pelo que a sua existência contínua não afeta os custos nem os limites de produção.

As tarefas do Dataflow validam periodicamente se a conta de serviço do Dataflow consegue usar com êxito a chave do Cloud KMS fornecida. Se um pedido de encriptação ou desencriptação falhar, o serviço Dataflow interrompe todo o carregamento e processamento de dados assim que possível. O Dataflow começa imediatamente a limpar os Google Cloud recursos anexados à sua tarefa.

Use origens e destinos protegidos com chaves do Cloud KMS

O Dataflow pode aceder a Google Cloud origens e destinos protegidos por chaves do Cloud KMS. Se não estiver a criar novos objetos, não precisa de especificar a chave do Cloud KMS dessas origens e destinos. Se o pipeline do Dataflow puder criar novos objetos num destino, tem de definir parâmetros do pipeline. Estes parâmetros especificam as chaves do Cloud KMS para essa origem e transmitem esta chave do Cloud KMS aos métodos de conetor de E/S adequados.

Para origens e destinos de pipelines do Dataflow que não suportam a CMEK gerida pelo Cloud KMS, as definições da CMEK do Dataflow são irrelevantes.

Autorizações de chaves do Cloud KMS

Quando aceder a serviços protegidos com chaves do Cloud KMS, verifique se atribuiu a Cloud KMS CryptoKey Encrypter/Decrypter função a esse serviço. As contas têm o seguinte formato:

  • Cloud Storage: service-{project_number}@gs-project-accounts.iam.gserviceaccount.com
  • BigQuery: bq-{project_number}@bigquery-encryption.iam.gserviceaccount.com
  • Pub/Sub: service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com

Cloud Storage

Se quiser proteger os contentores temporários e de preparação que especificou com os parâmetros da pipeline TempLocation/temp_location e stagingLocation/staging_location, consulte o artigo sobre como configurar contentores do Cloud Storage protegidos com CMEK.

BigQuery

Java

Use o método with_kms_key() nos valores devolvidos de BigQueryIO.readTableRows(), BigQueryIO.read(), BigQueryIO.writeTableRows() e BigQueryIO.write().

Pode encontrar um exemplo no repositório do GitHub do Apache Beam.

Python

Use o argumento kms_key em BigQuerySource e BigQuerySink.

Pode encontrar um exemplo no repositório do GitHub do Apache Beam.

Go

Os IOs do BigQuery não suportam a utilização da chave do KMS em Go.

Pub/Sub

O Dataflow processa o acesso a tópicos protegidos por CMEK através da configuração de CMEK do tópico.

Para ler e escrever em tópicos do Pub/Sub protegidos por CMEK, consulte as instruções do Pub/Sub para usar as CMEK.

Registo de auditoria para a utilização de chaves do Cloud KMS

O Dataflow permite que o Cloud KMS use os registos de auditoria do Google Cloud para registar operações de chaves, como encriptar e desencriptar. O Dataflow fornece o ID da tarefa como contexto a um autor da chamada do Cloud KMS. Este ID permite-lhe acompanhar cada instância em que uma chave específica do Cloud KMS é usada para uma tarefa do Dataflow.

Os registos de auditoria do Google Cloud mantêm registos de auditoria para cada projeto, pasta e organização da Google Cloud Platform. Tem várias opções para ver os registos de auditoria do Cloud KMS.

O Cloud KMS escreve registos de auditoria de atividade do administrador para as suas tarefas do Dataflow com encriptação CMEK. Estes registos registam operações que modificam a configuração ou os metadados de um recurso. Não pode desativar os registos de auditoria de atividade do administrador.

Se estiverem ativados explicitamente, o Cloud KMS escreve registos de auditoria de acesso aos dados para os seus trabalhos do Dataflow com encriptação CMEK. Os registos de auditoria de acesso aos dados contêm chamadas API que leem a configuração ou os metadados dos recursos. Estes registos também contêm chamadas de API orientadas pelo utilizador que criam, modificam ou leem dados de recursos fornecidos pelo utilizador. Para obter instruções sobre como ativar alguns ou todos os registos de auditoria de acesso aos dados, aceda a Configurar registos de acesso aos dados.

Preços

Pode usar chaves de encriptação do Cloud KMS com o Dataflow em todas as regiões do Dataflow onde o Cloud KMS está disponível.

Esta integração não incorre em custos adicionais além das operações principais, que são faturadas ao seu Google Cloud projeto. Sempre que a conta de serviço do Dataflow usa a sua chave do Cloud KMS, a operação é faturada à taxa das operações da chave do Cloud KMS.

Para mais informações, consulte os detalhes dos preços do Cloud KMS.

Resolução de problemas

Use as sugestões nesta secção para resolver problemas de erros.

Não é possível validar o Cloud KMS

O seu fluxo de trabalho pode falhar com o seguinte erro:

Workflow failed. Causes: Cloud KMS key <key-name> cannot be validated.

Para corrigir este problema, verifique se passou o caminho completo da chave. Parece que projects/<project-id>/locations/<gcp-region>/keyRings/<key-ring-name>/cryptoKeys/<key-name>. Procure possíveis gralhas no caminho principal.

Autorização da chave do Cloud KMS recusada

O seu fluxo de trabalho pode falhar com o seguinte erro:

Workflow failed. Causes: Cloud KMS key Permission 'cloudkms.cryptoKeyVersions.useToEncrypt' denied on resource
'projects/<project-id>/locations/<gcp-region>/keyRings/<key-ring-name>/cryptoKeys/<key-name>' (or it may not exist). cannot be validated.

Para corrigir este problema, verifique se o ID do projeto mencionado no caminho da chave está correto. Além disso, verifique se tem autorização para usar a chave.

A localização da chave do Cloud KMS não corresponde à localização da tarefa do Dataflow

O seu fluxo de trabalho pode falhar com o seguinte erro:

Workflow failed. Causes: Cloud KMS key projects/<project-id>/locations/<gcp-region>/keyRings/<key-ring-name>/cryptoKeys/<key-name>
can't protect resources for this job. Make sure the region of the KMS key matches the Dataflow region.

Para corrigir este problema, se estiver a usar uma chave regional, verifique se a chave do Cloud KMS está na mesma região que a tarefa do Dataflow.