Usar chaves de criptografia gerenciadas pelo cliente

Por padrão, o Workflows criptografa o conteúdo do cliente em repouso. Workflows processam 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 Workflows. 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 a você monitorar o uso de chaves, visualizar registros de auditoria e controlar 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 Workflows é semelhante à criptografia padrão do Google. Para mais informações sobre suas opções de criptografia, consulte Chaves de criptografia gerenciadas pelo cliente (CMEK).

É possível proteger seu fluxo de trabalho e os dados associados em repouso usando uma chave de criptografia que só você pode acessar e controlar e gerenciar usando o 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:

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

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

Antes de começar

Antes de usar a CMEK nos Workflows, siga estas etapas:

  1. Ative as APIs.

    Console

    1. Enable the Cloud KMS and Workflows APIs.

      Enable the APIs

    gcloud

    1. In the Google Cloud console, activate Cloud Shell.

      Activate Cloud Shell

      At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

    2. Atualize os componentes gcloud.
      gcloud components update
    3. Ative as APIs Cloud KMS e Workflows no projeto que 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 seu projeto e se você decidiu quais permissões e papéis específicos de geração de registros se aplicam ao seu caso de uso. Para mais informações, consulte Informações sobre 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. No keyring, você pode adicionar uma nova chave ou usar uma chave existente.

  1. Crie um keyring.

  2. Crie uma chave para um keyring especificado.

Extrair o ID do recurso de uma chave do Cloud KMS

O ID do recurso de uma chave do Cloud KMS é necessário quando você ativa a CMEK para um fluxo de trabalho. Neste documento, consulte Ativar 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 da 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 de uma versão da chave é o ID da chave, mais uma barra (/) e o ID da versão. Para listar todas as versões de uma chave:

    1. Clique no nome da chave.
    2. Para 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 de uma versão da 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

É necessário conceder ao agente de serviço do Workflows o papel de Criptografador/Identity and Access Management do Cloud KMS CryptoKey (IAM) para que ele possa acessar a chave do Cloud KMS:

Console

Ao ativar a CMEK para um fluxo de trabalho no console, você precisa conceder o papel Criptografador/Descriptografador da CryptoKey do Cloud KMS à 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)"

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

Ativar o CMEK para um fluxo de trabalho

Ao criar um fluxo de trabalho ou atualizá-lo depois, você pode especificar a chave do Cloud KMS que o fluxo de trabalho precisa 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 do Cloud KMS.

  5. Selecione um Tipo de chave.

    Você pode gerenciar suas chaves manualmente ou usar o Autokey, que permite gerar chaves e chaveiros sob demanda. Se a opção Autokey estiver desativada, ela ainda não estará integrada ao tipo de recurso atual.

  6. Na lista Selecionar uma chave do Cloud KMS, selecione ou filtre uma chave do Cloud KMS.

  7. 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.

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

  9. Clique em Próxima.

  10. Para salvar as 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 do recurso da chave no formato projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME. É possível extrair o ID da chave.

  • LOCATION: o local do fluxo de trabalho

  • SERVICE_ACCOUNT: a conta de serviço que seu fluxo de trabalho vai 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 recursos do Google Cloud.

Observe o seguinte:

  • As revisões e execuções do fluxo de trabalho são criptografadas com a chave especificada no momento da implantação. Os recursos criptografados anteriormente com uma chave anterior permanecem criptografados com essa chave anterior. 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 todas as execuções subsequentes vão usar a nova chave.
  • As revisões e execuções de fluxos de trabalho não criptografados por CMEK anteriormente 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 a criptografia da CMEK. Neste documento, consulte Desativar a CMEK para um fluxo de trabalho. As revisões e execuções de fluxo de trabalho existentes permanecem criptografadas com as chaves com as 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 Details.

    O valor Criptografia mostra o ID de 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 usada para proteger o fluxo de trabalho e a execução dele.

Desativar o CMEK para um fluxo de trabalho

É possível desativar o CMEK para que um fluxo de trabalho 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 do Cloud KMS, selecione Chave de criptografia gerenciada pelo Google.

  5. Clique em Próxima.

  6. Para salvar as 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 atual do fluxo de trabalho, e todas as execuções posteriores são criadas sem a criptografia da CMEK. As revisões e execuções de fluxo de trabalho existentes permanecem criptografadas com as chaves com as que foram criptografadas anteriormente.

Desativar o Cloud KMS

Se você quiser revogar o acesso a dados do seu fluxo de trabalho ou das execuções dele, faça o seguinte para desativar o Cloud KMS:

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

  • Revogue o papel cloudkms.cryptoKeyEncrypterDecrypter do IAM do agente de serviço do Workflows. Isso afeta todos os fluxos de trabalho no projeto do Google Cloud que aceitam criptografia usando CMEK. Não é possível criar novos fluxos de trabalho e execuções integrados a CMEK nem acessar recursos criptografados por CMEK. Todas as execuções ativas vão 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 de alterações no acesso.

Solução de problemas

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

Problema Descrição
A permissão cloudkms.cryptoKeyVersions.useToEncrypt foi 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: reative 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. Eles podem estar em projetos diferentes. Para mais informações, consulte Locais do Cloud KMS e Locais de 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 de cota. Para mais informações, consulte Cotas do Cloud KMS.

Como um status de chave indisponível é tratado

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

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

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

Preços

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