Este guia descreve o uso da CMEK para o Dataform e mostra como ativar a criptografia de CMEK dos repositórios do Dataform.
Por padrão, o Dataform criptografa o conteúdo do cliente em repouso. O Dataform processa a criptografia para você sem que você precise fazer nada. Essa opção é chamada de Criptografia padrão do Google.
Se você quiser controlar suas chaves de criptografia, use chaves de criptografia gerenciadas pelo cliente (CMEKs) no Cloud KMS com serviços integrados a CMEKs, incluindo o Dataform. O uso de chaves do Cloud KMS permite controlar o nível de proteção, o local, a programação de rotação, as permissões de uso e acesso e os limites criptográficos. O uso do Cloud KMS também permite que você monitore o uso de chaves, visualize registros de auditoria e controle ciclos de vida importantes. Em vez de o Google ser proprietário e gerente de chaves de criptografia de chaves (KEKs) simétricas que protegem seus dados, você controla e gerencia essas chaves no Cloud KMS.
Depois de configurar os recursos com CMEKs, a experiência de acesso aos recursos do Dataform é semelhante à criptografia padrão do Google. Para mais informações sobre suas opções de criptografia, consulte Chaves de criptografia gerenciadas pelo cliente (CMEK).
Criptografia CMEK dos dados do repositório
Quando você aplica a criptografia CMEK a um repositório do Dataform, todos os dados do cliente gerenciados pelo Dataform nesse repositório são criptografados em repouso usando o conjunto de chaves de proteção CMEK definido para o repositório. Esses dados incluem o seguinte:
- Conteúdo do repositório Git do repositório do Dataform e dos espaços de trabalho dele
- Consultas SQL compiladas e erros de compilação
- Consultas SQL armazenadas de ações de fluxo de trabalho
- Detalhes do erro das ações de fluxo de trabalho executadas
O Dataform usa chaves de proteção CMEK nos seguintes cenários:
- Durante todas as operações que exigem a descriptografia de dados do cliente armazenados em repouso.
Essas operações incluem, entre outras:
- Respostas a uma consulta do usuário, por exemplo,
compilationResults.query
. - Criação de recursos do Dataform que exigem dados de repositório criptografados criados anteriormente, por exemplo, invocações de fluxo de trabalho.
- Operações do Git para atualizar o repositório remoto, por exemplo, enviar um commit do Git.
- Respostas a uma consulta do usuário, por exemplo,
- Durante todas as operações que exigem o armazenamento de dados do cliente em repouso.
Essas operações incluem, entre outras:
- Respostas a uma consulta do usuário, por exemplo,
compilationResults.create
. - Operações do Git em um espaço de trabalho, por exemplo, extrair um commit do Git.
- Respostas a uma consulta do usuário, por exemplo,
O Dataform gerencia a criptografia dos dados do cliente associados apenas aos recursos do Dataform. O Dataform não gerencia a criptografia de dados do cliente criados no BigQuery pela execução de fluxos de trabalho do Dataform. Para criptografar dados criados e armazenados no BigQuery, configure a CMEK para o BigQuery.
Chaves compatíveis
O Dataform é compatível com os seguintes tipos de chaves CMEK:
- Chaves de software do Cloud KMS
- Chaves do módulo de segurança de hardware (HSM) do Cloud
- Chaves do Cloud External Key Manager (Cloud EKM)
A disponibilidade da chave varia de acordo com o tipo e a região. Para mais informações sobre a disponibilidade geográfica das chaves CMEK, consulte Locais do Cloud KMS.
Restrições
O Dataform é compatível com a CMEK, mas com as seguintes restrições:
- O tamanho máximo de um repositório criptografado com CMEK é de 512 MB.
- O tamanho máximo de um espaço de trabalho em um repositório criptografado com CMEK é de 512 MB.
- Não é possível aplicar uma chave de proteção CMEK a um repositório depois que ele foi criado. Só é possível aplicar a criptografia CMEK durante a criação do repositório.
- Não é possível remover uma chave de proteção CMEK de um repositório.
- Não é possível mudar uma chave de proteção CMEK de um repositório.
- Se você definir uma chave CMEK padrão do Dataform para seu projeto Google Cloud , todos os novos repositórios criados no local do projeto Google Cloud precisarão ser criptografados com a CMEK. Ao criar um repositório no local do projeto Google Cloud , é possível aplicar a chave CMEK padrão do Dataform ou outra chave CMEK, mas não é possível aplicar a criptografia padrão em repouso.
- Se você mudar o valor de uma chave CMEK padrão do Dataform, o valor anterior será aplicado aos repositórios preexistentes, e o valor atualizado será aplicado aos repositórios criados após a mudança.
- É possível definir apenas uma chave CMEK padrão do Dataform por local dos repositórios de projetos Google Cloud .
- As políticas da organização de CMEK não estão disponíveis.
- O uso de chaves do Cloud HSM e do Cloud EKM está sujeito à disponibilidade. Para mais informações sobre a disponibilidade de chaves em diferentes locais, consulte Locais do Cloud KMS.
Cotas do Cloud KMS e do Dataform
É possível usar chaves do Cloud HSM e do Cloud EKM com o Dataform. Ao usar CMEK no Dataform, os projetos podem consumir cotas de solicitações criptográficas do Cloud KMS. Por exemplo, repositórios do Dataform criptografados com CMEK podem consumir essas cotas para cada mudança no conteúdo do repositório. As operações de criptografia e descriptografia que usam chaves CMEK afetam as cotas do Cloud KMS somente se você usar chaves de hardware (Cloud HSM) ou externas (Cloud EKM). Para mais informações, consulte Cotas do Cloud KMS.
Como gerenciar chaves
Use o Cloud KMS para todas as operações de gerenciamento de chaves. O Dataform não pode detectar nem agir sobre nenhuma mudança de chave até que seja propagada pelo Cloud KMS. Algumas operações, como desativar ou destruir uma chave, podem levar até três horas para serem propagadas. As mudanças nas permissões geralmente são propagadas muito mais rápido.
Depois que o repositório é criado, o Dataform chama o Cloud KMS para garantir que a chave ainda seja válida durante cada operação nos dados criptografados do repositório.
Se o Dataform detectar que a chave do Cloud KMS foi desativada ou destruída, todos os dados armazenados no repositório correspondente ficarão inacessíveis.
Se as chamadas do Dataform para o Cloud KMS detectarem que uma chave desativada anteriormente foi reativada, o Dataform vai restaurar o acesso automaticamente.
Usar chaves externas com o Cloud EKM
Como alternativa ao uso de chaves no Cloud KMS, você pode usar chaves que residem em um parceiro externo de gerenciamento de chaves. Para fazer isso, use o Cloud External Key Manager (Cloud EKM) para criar e gerenciar chaves externas, que são ponteiros para chaves que residem fora do Google Cloud. Para mais informações, consulte Gerenciador de chaves externo do Cloud.
Depois de criar uma chave externa com o Cloud EKM, é possível aplicá-la a um novo repositório do Dataform fornecendo o ID dessa chave ao criar o repositório. Esse procedimento é o mesmo que aplicar uma chave do Cloud KMS a um novo repositório.
Usar chaves de CMEK padrão do Dataform
Para criptografar vários repositórios do Dataform com a mesma chave CMEK, defina uma chave CMEK padrão do Dataform para seu projeto do Google Cloud . Você precisa especificar a localização do projeto Google Cloud para a chave de CMEK padrão do Dataform. É possível definir apenas uma chave CMEK padrão por projeto do Google Cloud .
Depois de definir uma chave de CMEK padrão do Dataform, o Dataform aplica a chave a todos os novos repositórios criados no local do projeto Google Cloud por padrão. Ao criar um repositório, você pode usar a chave padrão ou selecionar outra chave CMEK.
Como um status de chave indisponível é tratado
Em cenários raros, como em períodos em que o Cloud KMS não está disponível, o Dataform talvez não consiga recuperar o status da sua chave do Cloud KMS.
Se o repositório do Dataform estiver protegido por uma chave ativada no momento em que o Dataform não consegue se comunicar com o Cloud KMS, os dados criptografados do repositório ficarão inacessíveis.
Os dados criptografados do repositório permanecem inacessíveis até que o Dataform possa se reconectar com o Cloud KMS e o Cloud KMS responda que a chave está ativa.
Por outro lado, se o repositório do Dataform estiver protegido por uma chave que foi desativada antes do Dataform não conseguir se comunicar com o Cloud KMS, os dados criptografados do repositório permanecerão inacessíveis até que seja possível se reconectar ao Cloud KMS e você reative sua chave.
Logging
É possível auditar as solicitações que o Dataform envia para o Cloud KMS em seu nome no Cloud Logging, se você ativou a geração de registros de auditoria para a API Cloud KMS no seu projeto. Essas entradas de registro do Cloud KMS são visíveis no Cloud Logging. Para mais informações, consulte Ver registros.
Antes de começar
Decida se você vai executar o Dataform e o Cloud KMS em projetos diferentes ou no mesmo projeto. Recomendamos usar projetos separados para ter mais controle sobre as permissões. Para informações sobre IDs e números de projetos do Google Cloud , consulte Como identificar projetos.
Para o projeto Google Cloud que executa o Cloud KMS:
- Ativar a API Cloud Key Management Service
- Crie um keyring e uma chave, conforme descrito em Como criar keyrings e chaves. Crie o keyring em um local que corresponda ao local do repositório do Dataform:
-
Os repositórios precisam usar chaves regionais correspondentes. Por exemplo, um repositório na região
asia-northeast3
precisa ser protegido com uma chave de um keyring localizado emasia-northeast3
. -
A região
global
não pode ser usada com o Dataform.
-
Os repositórios precisam usar chaves regionais correspondentes. Por exemplo, um repositório na região
Ativar a CMEK
O Dataform pode acessar a chave em seu nome depois que você concede o papel do Cloud KMS Criptografador/Descriptografador de CryptoKey (roles/cloudkms.cryptoKeyEncrypterDecrypter
) à conta de serviço padrão do Dataform.
O ID da conta de serviço padrão do Dataform está no seguinte formato:
service-YOUR_PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com
Para conceder o papel de criptografador/descriptografador de CryptoKey à conta de serviço padrão do Dataform, siga estas etapas:
Console
Abra a página Gerenciamento de chaves no console Google Cloud .
Clique no nome do keyring que contém a chave.
Clique na caixa de seleção da chave de criptografia à qual você quer adicionar o papel. A guia Permissões será aberta.
Clique em Adicionar membro.
Digite o endereço de e-mail da conta de serviço
- Se já estiver na lista de membros, a conta de serviço tem papéis. Clique na lista suspensa do papel atual da conta de serviço.
Clique na lista suspensa Selecionar um papel, clique em Cloud KMS e, depois, clique no papel Criptografador/Descriptografador de CryptoKey do Cloud KMS.
Clique em Salvar para aplicar o papel à conta de serviço.
gcloud
Use a Google Cloud CLI para atribuir a função:
gcloud kms keys add-iam-policy-binding \ --project=KMS_PROJECT_ID \ --member serviceAccount:SERVICE_ACCOUNT \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter \ --location=KMS_KEY_LOCATION \ --keyring=KMS_KEY_RING \ KMS_KEY
Substitua:
KMS_PROJECT_ID
: o ID do seu projeto do Google Cloud que está executando o Cloud KMSSERVICE_ACCOUNT
: o endereço de e-mail da sua conta de serviço padrão do Dataform.KMS_KEY_LOCATION
: o nome do local da chave do Cloud KMS.KMS_KEY_RING
: o nome do keyring da chave do Cloud KMSKMS_KEY
: o nome da chave do Cloud KMS.
Aplicar uma política de CMEK da organização
O Dataform está integrado a duas restrições de política da organização para ajudar a garantir o uso da CMEK em uma organização:
constraints/gcp.restrictNonCmekServices
é usado para exigir proteção de CMEK.constraints/gcp.restrictCmekCryptoKeyProjects
é usado para limitar quais chaves do Cloud KMS são usadas para proteção com CMEK.
Com essa integração, é possível especificar os seguintes requisitos de conformidade de criptografia para repositórios do Dataform na sua organização:
- Exigir CMEKs para todos os novos repositórios do Dataform
- Restringir chaves do Cloud KMS para um projeto do Dataform
Considerações ao aplicar políticas da organização
Antes de aplicar qualquer políticas da organização de CMEK, saiba o seguinte:
Prepare-se para um atraso de propagação
Depois que você define ou atualiza uma política da organização, pode levar até 15 minutos para a nova política entrar em vigor.
Considerar os recursos atuais
Os recursos atuais não estão sujeitos às políticas da organização recém-criadas. Por exemplo, uma política da organização não é aplicada retroativamente aos repositórios atuais. Esses recursos ainda podem ser acessados sem uma CMEK e, se aplicável, ainda são criptografados com as chaves atuais.
Verificar as permissões necessárias para definir uma política da organização
Pode ser difícil obter a permissão para definir ou atualizar a política da organização para fins de teste. É necessário receber o papel de administrador da política da organização, que só pode ser concedido no nível da organização, não no nível do projeto ou da pasta.
Embora o papel precise ser concedido no nível da organização, ainda é possível especificar uma política que se aplica apenas a um projeto ou pasta específicos.
Exigir CMEKs para todos os novos repositórios do Dataform
É possível usar a restrição constraints/gcp.restrictNonCmekServices
para exigir que as CMEKs sejam usadas para proteger todos os novos repositórios do Dataform em uma organização.
Se definida, essa política da organização faz com que todas as solicitações de criação de recursos sem uma chave especificada do Cloud KMS falhem.
Depois de definir essa política, ela será aplicada somente a novos repositórios no projeto. Os repositórios atuais sem chaves do Cloud KMS aplicadas continuam existindo e podem ser acessados sem problemas.
Console
No console Google Cloud , acesse a página Políticas da organização.
Usando o Filtro, pesquise a seguinte restrição:
constraints/gcp.restrictNonCmekServices
Na coluna "Nome", clique em Restringir quais serviços podem criar recursos sem CMEK.
Clique em
Gerenciar política.Na página Editar política, em Origem da política, selecione Substituir política principal.
Em Regras, clique em Adicionar uma regra.
Na lista Valores da política, selecione Personalizado.
Na lista Tipo de política, selecione Negar.
No campo Valores personalizados, insira o seguinte:
is:dataform.googleapis.com
Clique em Concluído e em Definir política.
gcloud
Crie um arquivo temporário
/tmp/policy.yaml
para armazenar a política:name: projects/PROJECT_ID/policies/gcp.restrictNonCmekServices spec: rules: - values: deniedValues: - is:dataform.googleapis.com
Substitua
PROJECT_ID
pelo ID do projeto em que você está aplicando essa restrição.Execute o comando
org-policies set-policy
:gcloud org-policies set-policy /tmp/policy.yaml
Para verificar se a política foi aplicada, tente criar um repositório do Dataform no projeto. O processo falhará a menos que você especifique uma chave do Cloud KMS.
Restringir chaves do Cloud KMS para um projeto do Dataform
É possível usar a restrição constraints/gcp.restrictCmekCryptoKeyProjects
para
restringir as chaves do Cloud KMS que podem ser usadas para proteger um repositório em
um projeto do Dataform.
Por exemplo, é possível especificar uma regra semelhante a esta: "Para todos os repositórios do Dataform em projects/my-company-data-project
, as chaves do Cloud KMS usadas neste projeto precisam vir de projects/my-company-central-keys
OU projects/team-specific-keys
".
Console
No console Google Cloud , acesse a página Políticas da organização.
Usando o Filtro, pesquise a seguinte restrição:
constraints/gcp.restrictCmekCryptoKeyProjects
Na coluna "Nome", clique em Restringir quais projetos podem fornecer CryptoKeys do KMS para CMEK.
Clique em
Gerenciar política.Na página Editar política, em Origem da política, selecione Substituir política principal.
Em Regras, clique em Adicionar uma regra.
Na lista Valores da política, selecione Personalizado.
Na lista Tipo de política, selecione Permitir.
No campo Valores personalizados, insira o seguinte:
under:projects/KMS_PROJECT_ID
Substitua
KMS_PROJECT_ID
pelo ID do projeto em que as chaves do Cloud KMS que você quer usar estão localizadas.Por exemplo,
under:projects/my-kms-project
Clique em Concluído e em Definir política.
gcloud
Crie um arquivo temporário
/tmp/policy.yaml
para armazenar a política:name: projects/PROJECT_ID/policies/gcp.restrictCmekCryptoKeyProjects spec: rules: - values: allowedValues: - under:projects/KMS_PROJECT_ID
Substitua:
PROJECT_ID
: o ID do projeto em que você está aplicando essa restrição.KMS_PROJECT_ID
: o ID do projeto em que as chaves do Cloud KMS que você quer usar estão localizadas.
Execute o comando
org-policies set-policy
:gcloud org-policies set-policy /tmp/policy.yaml
Para verificar se a política foi aplicada, tente criar um repositório do Dataform usando uma chave do Cloud KMS de um projeto diferente. O processo falhará.
Definir uma chave CMEK padrão do Dataform
Ao definir uma chave CMEK padrão do Dataform para seu projeto do Google Cloud , você pode criptografar vários repositórios com a mesma chave CMEK. Para mais informações, consulte Usar uma chave padrão para repositórios do Dataform.
Para definir ou editar uma chave de CMEK padrão, chame a API Dataform na seguinte solicitação:
curl -X PATCH \
-H "Content-Type: application/json" \
-d '{"defaultKmsKeyName":"projects/PROJECT_ID/locations/PROJECT_LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KMS_KEY"}' \
https://dataform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/PROJECT_LOCATION/config
Substitua:
- KMS_KEY_RING: o nome do keyring da chave do Cloud KMS.
- KMS_KEY: o nome da sua chave do Cloud KMS.
- PROJECT_ID: o ID do seu Google Cloud projeto.
- PROJECT_LOCATION: o nome do local do projeto Google Cloud .
Remover uma chave CMEK padrão do Dataform
Para remover uma chave CMEK padrão do Dataform do seu projeto Google Cloud , chame a API Dataform na seguinte solicitação:
curl -X PATCH \
-H "Content-Type: application/json" \
-d '{"defaultKmsKeyName":""}' \
https://dataform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/PROJECT_LOCATION/config
Substitua:
- PROJECT_ID: o ID do seu Google Cloud projeto.
- PROJECT_LOCATION: o nome do local do projeto Google Cloud em que você quer remover a CMEK padrão.
Verificar se uma chave CMEK padrão do Dataform está definida
Para verificar se uma chave CMEK padrão do Dataform está definida para seu projeto Google Cloud , chame a API Dataform na seguinte solicitação:
curl -X GET \
-H "Content-Type: application/json" \
https://dataform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/PROJECT_LOCATION/config
Substitua:
- PROJECT_ID: o ID do seu Google Cloud projeto.
- PROJECT_LOCATION: o nome do local do projeto Google Cloud .
Aplicar a CMEK a um repositório
É possível aplicar a proteção CMEK a um repositório do Dataform durante a criação dele.
Para aplicar a criptografia CMEK a um repositório do Dataform, selecione a criptografia com a chave CMEK padrão do Dataform ou especifique uma chave exclusiva do Cloud KMS ao criar o repositório. Para instruções, consulte Criar um repositório.
Não é possível mudar o mecanismo de criptografia de um repositório do Dataform depois que ele é criado.
Para mais informações, consulte Restrições.
A seguir
- Para saber mais sobre a CMEK, consulte Visão geral da CMEK.
- Para saber mais sobre as cotas do Cloud KMS, consulte Cotas do Cloud KMS.
- Para saber mais sobre os preços do Cloud KMS, consulte Preços do Cloud KMS.
- Para saber mais sobre os repositórios do Dataform, consulte Criar um repositório.