Use chaves de encriptação geridas pelo cliente

Este guia descreve a utilização das CMEK para o Dataform e explica como ativar a encriptação CMEK dos repositórios do Dataform.

Por predefinição, o Dataform encripta o conteúdo do cliente em repouso. O Dataform 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 Dataform. 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 e autorizações de acesso, bem como 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 Dataform é 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).

Encriptação CMEK dos dados do repositório

Quando aplica a encriptação CMEK a um repositório do Dataform, todos os dados de clientes geridos pelo Dataform nesse repositório são encriptados em repouso através do conjunto de chaves de proteção CMEK definido para o repositório. Estes dados incluem o seguinte:

  • Conteúdo do repositório Git do repositório do Dataform e dos respetivos espaços de trabalho
  • Consultas SQL compiladas e erros de compilação
  • Consultas SQL armazenadas de ações do fluxo de trabalho
  • Detalhes do erro das ações do fluxo de trabalho executadas

O Dataform usa chaves de proteção CMEK nos seguintes cenários:

  • Durante todas as operações que requerem a desencriptação dos dados dos clientes armazenados em repouso. Estas operações incluem, entre outras, o seguinte:
  • Durante todas as operações que requerem o armazenamento de dados de clientes em repouso. Estas operações incluem, entre outras, o seguinte:

O Dataform gere a encriptação dos dados dos clientes associados apenas aos recursos do Dataform. O Dataform não gere a encriptação dos dados de clientes criados no BigQuery através da execução de fluxos de trabalho do Dataform. Para encriptar dados criados e armazenados no BigQuery, configure a CMEK para o BigQuery.

Chaves suportadas

O Dataform suporta os seguintes tipos de chaves CMEK:

A disponibilidade das chaves varia consoante o tipo de chave e a região. Para mais informações acerca da disponibilidade geográfica das chaves CMEK, consulte as localizações do Cloud KMS.

Restrições

O Dataform suporta a CMEK com as seguintes restrições:

  • O tamanho máximo de um repositório encriptado com CMEK é de 512 MB.
  • O tamanho máximo de um espaço de trabalho num repositório encriptado com CMEK é de 512 MB.
  • Não pode aplicar uma chave de proteção CMEK a um repositório depois de o repositório ter sido criado. Só pode aplicar a encriptação CMEK durante a criação do repositório.
  • Não pode remover uma chave de proteção CMEK de um repositório.
  • Não pode alterar uma chave de proteção CMEK para um repositório.
  • Se definir uma chave CMEK do Dataform predefinida para o seu Google Cloud projeto, todos os novos repositórios criados na Google Cloud localização do projeto têm de ser encriptados com CMEK. Quando cria um novo repositório na localização do Google Cloud projeto, pode aplicar a chave CMEK predefinida do Dataform ou uma chave CMEK diferente, mas não pode aplicar a encriptação predefinida em repouso.
  • Se alterar o valor de uma chave CMEK do Dataform predefinida, o valor anterior aplica-se aos repositórios preexistentes e o valor atualizado aplica-se aos repositórios criados após a alteração.
  • Só pode definir uma chave CMEK do Dataform predefinida por localização de repositórios de projetos. Google Cloud
  • As políticas da organização de CMEK não estão disponíveis.
  • A utilização de chaves do Cloud HSM e do Cloud EKM está sujeita a disponibilidade. Para mais informações sobre a disponibilidade de chaves em várias localizações, consulte o artigo Localizações do Cloud KMS.

Quotas do Cloud KMS e Dataform

Pode usar chaves do Cloud HSM e do Cloud EKM com o Dataform. Quando usa CMEK no Dataform, os seus projetos podem consumir quotas de pedidos criptográficos do Cloud KMS. Por exemplo, os repositórios do Dataform encriptados com CMEK podem consumir estas quotas para cada alteração ao conteúdo do repositório. As operações de encriptação e desencriptação que usam chaves CMEK afetam as quotas do Cloud KMS apenas se usar hardware (Cloud HSM) ou chaves externas (Cloud EKM). Para mais informações, consulte as cotas do Cloud KMS.

Gerir chaves

Use o Cloud KMS para todas as operações de gestão de chaves. O Dataform não consegue detetar nem agir sobre alterações de chaves até que sejam propagadas pelo Cloud KMS. Algumas operações, como a desativação ou a destruição de uma chave, podem demorar até três horas a propagar-se. Normalmente, as alterações às autorizações são propagadas muito mais rapidamente.

Após a criação do repositório, o Dataform chama o Cloud KMS para se certificar de que a chave ainda é válida durante cada operação nos dados do repositório encriptados.

Se o Dataform detetar que a sua chave do Cloud KMS foi desativada ou destruída, todos os dados armazenados no repositório correspondente tornam-se inacessíveis.

Se as chamadas do Dataform para o Cloud KMS detetarem que uma chave anteriormente desativada foi reativada, o Dataform restaura o acesso automaticamente.

Use chaves externas com o Cloud EKM

Em alternativa à utilização de chaves que residem no Cloud KMS, pode utilizar chaves que residem num parceiro de gestão de chaves externo suportado. Para o fazer, use o Cloud External Key Manager (Cloud EKM) para criar e gerir chaves externas, que são ponteiros para chaves que residem fora do Google Cloud. Para mais informações, consulte o Cloud External Key Manager.

Depois de criar uma chave externa com o EKM da nuvem, pode aplicá-la a um novo repositório do Dataform fornecendo o ID dessa chave quando criar o repositório. Este procedimento é igual ao de aplicar uma chave do Cloud KMS a um novo repositório.

Use as chaves CMEK predefinidas do Dataform

Para encriptar vários repositórios do Dataform com a mesma chave CMEK, pode definir uma chave CMEK do Dataform predefinida para o seu Google Cloud projeto. Tem de especificar a localização do projeto Google Cloud para a chave CMEK do Dataform predefinida. Só pode definir uma chave CMEK predefinida por Google Cloud projeto.

Depois de definir uma chave CMEK do Dataform predefinida, o Dataform aplica a chave a todos os novos repositórios criados na localização do projeto por predefinição. Google Cloud Quando cria um repositório, pode usar a chave predefinida ou selecionar uma chave CMEK diferente.

Como é processado um estado de chave indisponível

Em cenários raros, como durante períodos em que o Cloud KMS está indisponível, o Dataform pode não conseguir obter o estado da sua chave no Cloud KMS.

Se o seu repositório do Dataform estiver protegido por uma chave que está ativada no momento em que o Dataform não consegue comunicar com o Cloud KMS, os dados encriptados do repositório tornam-se inacessíveis.

Os dados do repositório encriptados permanecem inacessíveis até que o Dataform possa estabelecer novamente ligação ao Cloud KMS e o Cloud KMS responda que a chave está ativa.

Por outro lado, se o seu repositório do Dataform estiver protegido por uma chave que esteja desativada no momento em que o Dataform não conseguir comunicar com o Cloud KMS, os dados encriptados do repositório permanecem inacessíveis até que seja possível restabelecer a ligação ao Cloud KMS e tiver reativado a chave.

Registo

Pode auditar os pedidos que o Dataform envia ao Cloud KMS em seu nome no Cloud Logging, se tiver ativado o registo de auditoria para a API Cloud KMS no seu projeto. Estas entradas de registo do Cloud KMS são visíveis nos Registos na nuvem. Para mais informações, consulte o artigo Ver registos.

Antes de começar

  • Decida se vai executar o Dataform e o Cloud KMS em projetos diferentes ou no mesmo projeto. Recomendamos que use projetos separados para ter maior controlo sobre as autorizações. Para obter informações sobre os Google Cloud IDs e os números dos projetos, consulte o artigo Identificar projetos.

  • Para o Google Cloud projeto que executa o Cloud KMS:

    1. Ative a API Cloud Key Management Service.
    2. Crie um conjunto de chaves e uma chave, conforme descrito no artigo Criação de conjuntos de chaves e chaves. Crie o anel de chaves numa localização que corresponda à localização do seu repositório do Dataform:
      • Os repositórios têm de usar chaves regionais correspondentes. Por exemplo: um repositório na região asia-northeast3 tem de ser protegido com uma chave de um conjunto de chaves localizado em asia-northeast3.
      • Não é possível usar a região global com o Dataform.
      Para mais informações sobre as localizações suportadas para o Dataform e o Cloud KMS, consulte as localizações na nuvem.

Ative as CMEK

O Dataform pode aceder à chave em seu nome depois de conceder a função de encriptar/desencriptar do CryptoKey (roles/cloudkms.cryptoKeyEncrypterDecrypter) do Cloud KMS à conta de serviço do Dataform predefinida.

O ID da conta de serviço do Dataform predefinido está no seguinte formato:

service-YOUR_PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com

Para conceder a função de encriptar/desencriptar do CryptoKey à conta de serviço do Dataform predefinida, siga estes passos:

Consola

  1. Abra a página Gestão de chaves na Google Cloud consola.

    Abra a página Gestão de chaves

  2. Clique no nome do conjunto de chaves que contém a chave.

  3. Clique na caixa de verificação da chave de encriptação à qual quer adicionar a função. É aberto o separador Permissões.

  4. Clique em Adicionar membro.

  5. Introduza o endereço de email da conta de serviço

    • Se a conta de serviço já estiver na lista de membros, tem funções existentes. Clique na lista pendente da função atual para a conta de serviço.
  6. Clique na lista pendente Selecionar uma função, clique em Cloud KMS e, de seguida, clique na função Encriptador/desencriptador de CryptoKey do Cloud KMS.

  7. Clique em Guardar para aplicar a função à conta de serviço.

gcloud

Pode usar 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 o seguinte:

  • KMS_PROJECT_ID: o ID do seu Google Cloud projeto que está a executar o Cloud KMS
  • SERVICE_ACCOUNT: o endereço de email da sua conta de serviço do Dataform predefinida
  • KMS_KEY_LOCATION: o nome da localização da sua chave do Cloud KMS
  • KMS_KEY_RING: o nome do conjunto de chaves da sua chave do Cloud KMS
  • KMS_KEY: o nome da chave da sua chave do Cloud KMS

Aplique uma política da organização de CMEK

O Dataform está integrado com duas restrições da política da organização para ajudar a garantir a utilização da CMEK numa organização:

  • constraints/gcp.restrictNonCmekServices é usado para exigir a proteção CMEK.
  • constraints/gcp.restrictCmekCryptoKeyProjects é usado para limitar as chaves do Cloud KMS que são usadas para a proteção CMEK.

Esta integração permite-lhe especificar os seguintes requisitos de conformidade com a encriptação para repositórios do Dataform na sua organização:

Considerações ao aplicar políticas da organização

Antes de aplicar quaisquer políticas organizacionais de CMEK, deve ter em atenção o seguinte.

Prepare-se para um atraso na propagação

Depois de definir ou atualizar uma política da organização, a nova política pode demorar até 15 minutos a entrar em vigor.

Considere os recursos existentes

Os recursos existentes não estão sujeitos às políticas da organização criadas recentemente. Por exemplo, uma política da organização não se aplica retroativamente aos repositórios existentes. Esses recursos continuam acessíveis sem uma CMEK e, se aplicável, continuam encriptados com as chaves existentes.

Valide as autorizações necessárias para definir uma política da organização

A autorização para definir ou atualizar a política da organização pode ser difícil de adquirir para fins de teste. Tem de ter a função de administrador da política da organização, que só pode ser concedida ao nível da organização (em vez do nível do projeto ou da pasta).

Embora a função tenha de ser concedida ao nível da organização, continua a ser possível especificar uma política que se aplique apenas a um projeto ou uma pasta específicos.

Exija CMEKs para todos os novos repositórios do Dataform

Pode usar a restrição constraints/gcp.restrictNonCmekServices para exigir que as CMEKs sejam usadas para proteger todos os novos repositórios do Dataform numa organização.

Se estiver definida, esta política da organização faz com que todos os pedidos de criação de recursos sem uma chave do Cloud KMS especificada falhem.

Depois de definir esta política, aplica-se apenas a novos repositórios no projeto. Todos os repositórios existentes sem chaves do Cloud KMS aplicadas continuam a existir e são acessíveis sem problemas.

Consola

  1. Na Google Cloud consola, aceda à página Políticas da organização.

    Aceda às políticas da organização

  2. Usando o Filtro, pesquise a seguinte restrição:

    constraints/gcp.restrictNonCmekServices
    
  3. Na coluna Nome, clique em Restrinja os serviços que podem criar recursos sem CMEK.

  4. Clique em Gerir política.

  5. Na página Editar política, em Origem da política, selecione Substituir política do elemento principal.

  6. Em Regras, clique em Adicionar uma regra.

  7. Na lista Valores da política, selecione Personalizado.

  8. Na lista Tipo de política, selecione Recusar.

  9. No campo Valores personalizados, introduza o seguinte:

    is:dataform.googleapis.com
    
  10. Clique em Concluído e, de seguida, em Definir política.

gcloud

  1. Crie um ficheiro 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 onde está a aplicar esta restrição.

  2. Execute o comando org-policies set-policy:

    gcloud org-policies set-policy /tmp/policy.yaml

Para verificar se a política é aplicada com êxito, pode tentar criar um repositório do Dataform no projeto. O processo falha, a menos que especifique uma chave do Cloud KMS.

Restrinja as chaves do Cloud KMS para um projeto do Dataform

Pode usar a restrição constraints/gcp.restrictCmekCryptoKeyProjects para restringir as chaves do Cloud KMS que pode usar para proteger um repositório num projeto do Dataform.

Por exemplo, pode especificar uma regra semelhante à seguinte: "Para todos os repositórios do Dataform em projects/my-company-data-project, as chaves do Cloud KMS usadas neste projeto têm de ser provenientes de projects/my-company-central-keys OU projects/team-specific-keys".

Consola

  1. Na Google Cloud consola, aceda à página Políticas da organização.

    Aceda às políticas da organização

  2. Usando o Filtro, pesquise a seguinte restrição:

    constraints/gcp.restrictCmekCryptoKeyProjects
    
  3. Na coluna Nome, clique em Restrinja os projetos que podem fornecer CryptoKeys do KMS para CMEK.

  4. Clique em Gerir política.

  5. Na página Editar política, em Origem da política, selecione Substituir política do elemento principal.

  6. Em Regras, clique em Adicionar uma regra.

  7. Na lista Valores da política, selecione Personalizado.

  8. Na lista Tipo de política, selecione Permitir.

  9. No campo Valores personalizados, introduza o seguinte:

    under:projects/KMS_PROJECT_ID
    

    Substitua KMS_PROJECT_ID pelo ID do projeto onde se encontram as chaves do Cloud KMS que quer usar.

    Por exemplo, under:projects/my-kms-project.

  10. Clique em Concluído e, de seguida, em Definir política.

gcloud

  1. Crie um ficheiro 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 o seguinte

    • PROJECT_ID: o ID do projeto onde está a aplicar esta restrição.
    • KMS_PROJECT_ID: o ID do projeto onde se encontram as chaves do Cloud KMS que quer usar.
  2. Execute o comando org-policies set-policy:

    gcloud org-policies set-policy /tmp/policy.yaml

Para verificar se a política foi aplicada com êxito, pode tentar criar um repositório do Dataform com uma chave do Cloud KMS de um projeto diferente. O processo vai falhar.

Predefina uma chave CMEK do Dataform

A definição de uma chave CMEK do Dataform predefinida para o seu Google Cloud projeto permite-lhe encriptar vários repositórios com a mesma chave CMEK. Para mais informações, consulte o artigo Use uma chave predefinida para repositórios do Dataform.

Para definir ou editar uma chave CMEK predefinida, chame a API Dataform no seguinte pedido:

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 o seguinte:

  • KMS_KEY_RING: o nome do conjunto de chaves da sua chave do Cloud KMS.
  • KMS_KEY: o nome da sua chave do Cloud KMS.
  • PROJECT_ID: o ID do seu projeto Google Cloud .
  • PROJECT_LOCATION: o nome da localização do seu Google Cloud projeto.

Remova uma chave CMEK do Dataform predefinida

Para remover uma chave CMEK do Dataform predefinida do seu Google Cloud projeto, chame a API Dataform no seguinte pedido:

curl -X PATCH \
-H "Content-Type: application/json" \
-d '{"defaultKmsKeyName":""}' \
https://dataform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/PROJECT_LOCATION/config

Substitua o seguinte:

  • PROJECT_ID: o ID do seu projeto Google Cloud .
  • PROJECT_LOCATION: o nome da localização do seu Google Cloud projeto onde quer anular a CMEK predefinida.

Verifique se está definida uma chave CMEK do Dataform predefinida

Para verificar se foi definida uma chave CMEK do Dataform predefinida para o seu Google Cloud projeto, chame a API Dataform no seguinte pedido:

curl -X GET \
-H "Content-Type: application/json" \
https://dataform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/PROJECT_LOCATION/config

Substitua o seguinte:

  • PROJECT_ID: o ID do seu projeto Google Cloud .
  • PROJECT_LOCATION: o nome da localização do seu Google Cloud projeto.

Aplique a CMEK a um repositório

Pode aplicar a proteção CMEK a um repositório do Dataform durante a criação do repositório.

Para aplicar a encriptação CMEK a um repositório do Dataform, selecione a encriptação com a chave CMEK predefinida do Dataform ou especifique uma chave única do Cloud KMS quando criar o repositório. Para ver instruções, consulte o artigo Crie um repositório.

Não pode alterar o mecanismo de encriptação de um repositório do Dataform depois de o repositório ser criado.

Para mais informações, consulte a secção Restrições.

O que se segue?