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 regulatórios ou de compliance específicos relacionados às chaves que protegem seus dados, use chaves de criptografia gerenciadas pelo cliente (CMEK) para fluxos de trabalho. Seu fluxo de trabalho e os dados associados em repouso protegidos usando uma chave de criptografia que só você pode acessar e que pode controlar e gerenciar usando 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. Esta chave é usado 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 usando a chave.

  • Uma execução de fluxo de trabalho executa a definição de fluxo de trabalho atual (uma revisão do fluxo de trabalho). Usando a chave associada à revisão do fluxo de trabalho no momento da implantação, o fluxo de trabalho compilado e quaisquer execuções armazenadas dados de entrada, saída e ambiente de execução são criptografados. Isso inclui argumentos de execução, resultados, erros e exceções. entregue Eventos do Eventarc e solicitações e respostas de callback e HTTP.

Antes de começar

Antes de usar a CMEK nos fluxos de trabalho, 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 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. Certifique-se de que a geração de registros está ativada para a API Cloud KMS no projeto e que você decidiu quais permissões e papéis específicos do registro 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. No keyring, é possível adicionar uma nova chave ou usar uma existente.

  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 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. Para a chave cujo ID de recurso você está recuperando, 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/Descriptografador 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 a 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 roles/cloudkms.cryptoKeyEncrypterDecrypter papel, um fluxo de trabalho no projeto pode criptografar e descriptografar os dados usando a CMEK de dados. Se você revogar esse papel ou desativar ou destruir a chave CMEK, e os dados não podem 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, é possível 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 de criptografia gerenciada pelo cliente (CMEK).

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

  6. Opcional: para inserir manualmente o nome de recurso da chave, na lista Selecionar uma chave gerenciada pelo cliente, clique em Inserir chave manualmente e digite o nome do recurso da chave no em um formato específico.

  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 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. Você pode recuperar 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 permanecem sem resposta criptografados.
  • 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. Revisões de fluxo de trabalho existentes e as execuções permanecem criptografadas com as chaves usadas anteriormente criptografados.

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 a CMEK para um fluxo de trabalho

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

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 desmarcar 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 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 do fluxo de trabalho atual e qualquer são criadas sem criptografia 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 uma das seguintes ações para desativar o Cloud KMS:

  • Desativar ou destruir a versão da chave primária do uma 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 ou visualizar os recursos associados à campanha ou chave destruída. Qualquer execução ativa vai falhar com um erro correspondente mensagem.

  • Revogue o cloudkms.cryptoKeyEncrypterDecrypterPapel do IAM no Agente de serviço do Workflows. Isso afeta todos os fluxos de trabalho Projeto do Google Cloud com suporte para criptografia usando CMEK. Você não pode criar fluxos de trabalho e execuções integradas com CMEKs ou conferir recursos criptografados por CMEK. Qualquer execução ativa vai falhar com um erro mensagem de erro.

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 encontrar 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: 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 uma na mesma região. Eles 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 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 não estiver disponível, Workflows pode não conseguir recuperar o status da sua chave do 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 uma execução de fluxo de trabalho (por exemplo, uma permissão é revogada durante um callback), ocorre um erro de tempo de execução, retornando um valor state: FAILED e detalhes relacionados no campo error.

Preços

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