Usar chaves de criptografia gerenciadas pelo cliente

Por padrão, o Workflows criptografa os dados armazenados em repouso. O Google Cloud processa e gerencia essa criptografia padrão para você sem que você precise fazer nada.

Se você tiver requisitos regulamentares ou de compliance específicos relacionados às chaves que protegem seus dados, use chaves de criptografia gerenciadas pelo cliente (CMEK) para Workflows. Seu fluxo de trabalho e os dados em repouso associados são protegidos por uma chave de criptografia que só você pode acessar e que pode ser controlada e gerenciada com o Cloud Key Management Service (Cloud KMS).

O que é protegido com a CMEK

Ao implantar um fluxo de trabalho, é possível especificar uma chave do Cloud KMS. Essa chave é usada para criptografar o fluxo de trabalho e as execuções dele:

  • Um fluxo de trabalho requer um arquivo de origem que contenha uma definição de fluxo de trabalho válida. Este arquivo de origem é criptografado com a chave.

  • Uma execução de fluxo de trabalho executa a definição atual do fluxo de trabalho (uma revisão específica do fluxo de trabalho). Usando a chave associada à revisão do fluxo de trabalho no momento da implantação, o fluxo de trabalho compilado, bem como todos os dados de entrada, saída e ambiente de execução armazenados na execução, são criptografados. Isso inclui argumentos de execução, resultados, erros e exceções, eventos do Eventarc entregues e solicitações e respostas de callback e HTTP.

Antes de começar

Antes de usar a CMEK no Workflows, conclua as seguintes etapas:

  1. Ativar as APIs.

    Console

    1. Ative as APIs Cloud KMS and Workflows.

      Ative as APIs

    gcloud

    1. No Console do Google Cloud, ative o Cloud Shell.

      Ativar o Cloud Shell

      Na parte inferior do Console do Google Cloud, uma sessão do Cloud Shell é iniciada e exibe um prompt de linha de comando. O Cloud Shell é um ambiente shell com a CLI do Google Cloud já instalada e com valores já definidos para o projeto atual. A inicialização da sessão pode levar alguns segundos.

    2. Atualize os componentes de gcloud.
      gcloud components update
      
    3. Ative as APIs Cloud KMS e Workflows para o projeto que vai armazenar as chaves de criptografia.
      gcloud services enable cloudkms.googleapis.com workflows.googleapis.com
      
  2. O Cloud KMS produz registros de auditoria do Cloud quando as chaves são ativadas, desativadas ou usadas por recursos do Workflows para criptografar e descriptografar dados. Verifique se a geração de registros está ativada para a API Cloud KMS no projeto e se você decidiu quais permissões e papéis específicos da geração de registros se aplicam ao seu caso de uso. Para mais informações, consulte Informações sobre a geração de registros de auditoria do Cloud KMS.

Criar um keyring e uma chave do Cloud KMS

Você pode criar um novo keyring ou usar um atual. Dentro keyring, é possível adicionar uma chave nova ou usar uma atual.

  1. Crie um keyring.

  2. Crie uma chave para um keyring especificado.

Recuperar o ID do recurso de uma chave do Cloud KMS

O ID do recurso para uma chave do Cloud KMS é necessário quando você ativa a CMEK em um fluxo de trabalho. Neste documento, consulte Ativar a CMEK para um fluxo de trabalho.

Console

  1. No console do Google Cloud, acesse a página Gerenciamento de chaves.

    Acessar "Gerenciamento de chaves"

  2. Clique no keyring que contém a chave.

  3. Na chave referente ao ID de recurso que está sendo recuperado, clique em Mais.

  4. Clique em Copiar nome do recurso.

    O ID do recurso para a chave é copiado para a área de transferência. O formato é semelhante ao seguinte:

    projects/PROJECT_NAME/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME
    
  5. Uma chave contém zero ou mais versões de chave. O ID do recurso para uma versão de chave é o ID da chave mais uma barra (/) mais o ID da versão. Para listar todas as versões de uma chave:

    1. Clique no nome da chave.
    2. Para conferir uma versão específica, clique em Mais.
    3. Clique em Copiar nome do recurso.

gcloud

  1. Liste todas as chaves em um determinado keyring:

    gcloud kms keys list --keyring RING_NAME --location LOCATION
    

    Substitua:

    • RING_NAME: o nome do keyring;
    • LOCATION: a região do keyring.

    A saída inclui o ID do recurso para cada chave. Exemplo:

    NAME: projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
    
  2. A chave tem zero ou mais versões. O ID do recurso para uma versão de chave é o ID da chave mais uma barra (/) e o ID da versão. Liste todas as versões de uma chave:

    gcloud kms keys versions list --location LOCATION --keyring RING_NAME --key KEY_NAME
    

    A saída inclui o ID do recurso para cada versão da chave. Exemplo:

    NAME: projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME/2
    

Conceda ao agente de serviço do Workflows acesso à chave

Conceda ao agente de serviço do fluxo de trabalho o papel de criptografador/descriptografador de CryptoKey do Cloud KMS para que ele possa acessar a chave do Cloud KMS:

Console

Ao ativar a CMEK para um fluxo de trabalho por meio do console, você precisa conceder o papel Criptografador/Descriptografador do Cloud KMS CryptoKey à conta de serviço. Para mais informações, neste documento, consulte Ativar CMEK para um fluxo de trabalho.

gcloud

gcloud kms keys add-iam-policy-binding KEY_NAME \
    --keyring RING_NAME \
    --location LOCATION \
    --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-workflows.iam.gserviceaccount.com \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter

Substitua:

  • KEY_NAME: o nome da chave; Por exemplo, my-key.
  • RING_NAME: o nome do keyring; Por exemplo, my-keyring.
  • LOCATION: a localização da chave; Por exemplo, us-central1.
  • PROJECT_NUMBER: o número do projeto do Google Cloud. Encontre o número do projeto na página Boas-vindas do console do Google Cloud ou executando o seguinte comando:

    export PROJECT=$(gcloud info --format='value(config.project)')
    gcloud projects describe ${PROJECT} --format="value(projectNumber)"
    

Contanto que o agente de serviço tenha o papel roles/cloudkms.cryptoKeyEncrypterDecrypter, um fluxo de trabalho no projeto pode criptografar e descriptografar os dados usando a chave CMEK. Se você revogar esse papel ou desativar ou destruir a chave CMEK, esses dados não poderão ser acessados. Neste documento, consulte Desativar o Cloud KMS.

Ativar a CMEK para um fluxo de trabalho

Ao criar um fluxo de trabalho ou atualizá-lo posteriormente, é possível especificar a chave do Cloud KMS que o fluxo de trabalho deve usar para criptografia de dados.

Console

  1. No console do Google Cloud, abra a página Workflows.

    Acessar fluxos de trabalho

  2. Clique no nome do fluxo de trabalho que você quer atualizar.

    A página Detalhes dos fluxos de trabalho é exibida.

  3. Clique em Editar.

  4. Selecione Chave de criptografia gerenciada pelo cliente (CMEK).

  5. Na lista Selecionar uma chave gerenciada pelo cliente, selecione ou filtre por uma chave do Cloud KMS.

  6. Opcional: para inserir manualmente o nome do recurso da chave, na lista Selecionar uma chave gerenciada pelo cliente, clique em Inserir chave manualmente e insira o nome do recurso da chave no formato especificado.

  7. Se solicitado, conceda o papel cloudkms.cyptoKeyEncrypterDecrypter à conta de serviço do Workflows com o papel workflows.serviceAgent.

  8. Clique em Próxima.

  9. Para salvar suas alterações e implantar o fluxo de trabalho atualizado, clique em Implantar.

gcloud

gcloud workflows deploy WORKFLOW_NAME \
    --source=SOURCE_FILE \
    --kms-key=KEY \
    --location LOCATION \
    --service-account=SERVICE_ACCOUNT

Substitua:

  • WORKFLOW_NAME: o nome do fluxo de trabalho
  • SOURCE_FILE: seu arquivo de origem do fluxo de trabalho com uma extensão de arquivo yaml para um arquivo YAML ou com uma extensão de arquivo json para um arquivo JSON. Por exemplo, myWorkflow.yaml.
  • KEY: o ID de recurso da chave no formato projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME. É possível recuperar o ID da chave.

  • LOCATION: o local do fluxo de trabalho.

  • SERVICE_ACCOUNT: a conta de serviço que seu fluxo de trabalho usará para acessar outros serviços do Google Cloud. Por exemplo, SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com. Recomendamos o uso de uma conta de serviço com os privilégios mínimos necessários para acessar os recursos necessários. Se deixado em branco, a conta de serviço padrão será usada. Para mais informações, consulte Conceder permissão a um fluxo de trabalho para acessar os recursos do Google Cloud.

Observações:

  • As revisões e execuções do fluxo de trabalho são criptografadas com a chave especificada no momento da implantação. Os recursos previamente criptografados com uma chave anterior permanecem criptografados com essa chave. Se um fluxo de trabalho for editado posteriormente e uma nova chave for especificada, essa revisão do fluxo de trabalho será criptografada com a nova chave, e as execuções subsequentes a usarão.
  • Anteriormente, as revisões e execuções de fluxo de trabalho não criptografadas pela CMEK permanecem não criptografadas.
  • Se você desativar a CMEK para uma revisão de fluxo de trabalho, todas as execuções subsequentes serão criadas sem criptografia da CMEK. Neste documento, consulte Desativar CMEK para um fluxo de trabalho. As revisões e execuções de fluxo de trabalho atuais permanecem criptografadas com as chaves com que foram criptografadas anteriormente.

Verificar a integração do Cloud KMS

É possível verificar a integração da CMEK exibindo os metadados de um fluxo de trabalho.

Console

  1. No console do Google Cloud, abra a página Workflows.

    Acessar fluxos de trabalho

  2. Clique no nome do fluxo de trabalho que você quer verificar.

    A página Detalhes dos fluxos de trabalho é exibida.

  3. Clique na guia Detalhes.

    O valor Criptografia exibe o ID do recurso da chave do Cloud KMS usada para proteger o fluxo de trabalho e a execução dele.

gcloud

gcloud workflows describe WORKFLOW_NAME \
    --location=LOCATION

A saída será semelhante a esta:

createTime: '2022-08-10T19:57:58.233177709Z'
cryptoKeyName: projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
name: projects/PROJECT_NAME/locations/LOCATION/workflows/WORKFLOW_NAME
revisionCreateTime: '2022-11-18T19:44:04.933633237Z'
revisionId: 000009-8be
serviceAccount: projects/PROJECT_NAME/serviceAccounts/SA_NAME@PROJECT_NAME.iam.gserviceaccount.com
sourceContents:
[...]
state: ACTIVE
updateTime: '2022-11-18T19:44:05.171793128Z'

O valor cryptokeyName é o ID do recurso da chave do Cloud KMS usado para proteger o fluxo de trabalho e a execução dele.

Desativar a CMEK em um fluxo de trabalho

É possível desativar a CMEK para um fluxo de trabalho para que ele não use mais a chave do Cloud KMS associada.

Console

  1. No console do Google Cloud, abra a página Workflows.

    Acessar fluxos de trabalho

  2. Clique no nome do fluxo de trabalho que você quer atualizar.

    A página Detalhes dos fluxos de trabalho é exibida.

  3. Clique em Editar.

  4. Para limpar o botão de opção Chave de criptografia gerenciada pelo cliente (CMEK), selecione Chave de criptografia gerenciada pelo Google.

  5. Clique em Próxima.

  6. Para salvar suas alterações e implantar o fluxo de trabalho atualizado, clique em Implantar.

gcloud

gcloud workflows deploy WORKFLOW_NAME \
    --source=SOURCE_FILE \
    --clear-kms-key \
    --service-account=SERVICE_ACCOUNT

Isso desativa a CMEK para a revisão de fluxo de trabalho atual, e todas as execuções subsequentes são criadas sem criptografia da CMEK. As revisões e execuções de fluxo de trabalho atuais permanecem criptografadas com as chaves com que foram criptografadas anteriormente.

Desativar o Cloud KMS

Se você quiser revogar o acesso a dados ao seu fluxo de trabalho ou às execuções dele, siga um destes procedimentos para desativar o Cloud KMS:

  • Desative ou destroy a versão da chave primária da chave de criptografia gerenciada pelo cliente. Desativar uma versão de chave CMEK suspende o acesso a todos os dados protegidos por essa versão. A destruição permanente de uma versão de chave é a contraparte permanente dessa ação. Ambos afetam apenas os fluxos de trabalho e as execuções associadas à chave específica. Não é possível criar novas execuções ou visualizar os recursos associados à chave desativada ou destruída. Qualquer execução ativa falhará com uma mensagem de erro correspondente.

  • Revogue o papel do IAM cloudkms.cryptoKeyEncrypterDecrypter do agente de serviço do Workflows. Isso afeta todos os fluxos de trabalho no projeto do Google Cloud com suporte à criptografia usando CMEK. Não é possível criar novos fluxos de trabalho e execuções integrados à CMEK ou visualizar recursos criptografados por CMEK. Qualquer execução ativa falhará com uma mensagem de erro correspondente.

Embora nenhuma das operações garanta a revogação do acesso instantâneo, as alterações do IAM geralmente são propagadas mais rapidamente. Para mais informações, consulte Consistência de recursos do Cloud KMS e Propagação da alteração de acesso.

Solução de problemas

É possível que você encontre erros ao usar o Cloud KMS com o Workflows. A tabela a seguir descreve diferentes problemas e como resolvê-los.

Problema Descrição
Permissão cloudkms.cryptoKeyVersions.useToEncrypt negada A chave do Cloud KMS fornecida não existe ou a permissão não está configurada corretamente.

Solução:

A versão da chave não está ativada A versão da chave do Cloud KMS fornecida foi desativada.

Solução: reativar a versão da chave do Cloud KMS.

A região do keyring não corresponde ao recurso a ser protegido A região do keyring do KMS fornecida é diferente da região do fluxo de trabalho.

Solução: use um keyring do Cloud KMS e um fluxo de trabalho protegido da mesma região. Elas podem estar em projetos diferentes. Para mais informações, consulte Locais do Cloud KMS e Locais dos fluxos de trabalho.

O limite de cota do Cloud KMS foi excedido Seu limite de cota para solicitações do Cloud KMS foi atingido.

Solução: limite o número de chamadas do Cloud KMS ou aumente o limite da cota. Para mais informações, acesse Cotas do Cloud KMS.

Como um status de chave indisponível é tratado

Se por algum motivo o Cloud KMS não estiver disponível, talvez o Workflows não consiga recuperar o status da sua chave no Cloud KMS.

Se o status da chave não estiver disponível, o fluxo de trabalho ou a execução dele retornará um valor state: UNAVAILABLE e detalhes relacionados no campo stateError.

Se o status da chave ficar indisponível durante a execução de uma execução de fluxo de trabalho (por exemplo, se uma permissão for revogada durante um callback), ocorrerá um erro de ambiente de execução, retornando um valor state: FAILED e detalhes relacionados no campo error.

Preços

Essa integração não gera outros custos além das operações de chave, que são faturadas no seu projeto do Google Cloud. Para informações sobre preços atuais, consulte Preços do Cloud KMS.