Usar chaves de criptografia gerenciadas pelo cliente

Por padrão, o Cloud Tasks criptografa os dados armazenados em repouso. O Google Cloud gerencia essa criptografia padrão para você sem nenhuma outra ação da sua parte.

Se você tiver requisitos regulatórios ou de compliance específicos relacionados às chaves que protegem seus dados, poderá usar chaves de criptografia gerenciadas pelo cliente (CMEK) para o Cloud Tasks. Sua tarefa e os dados associados (corpo e cabeçalho) em repouso são protegidos usando uma chave de criptografia que só você pode acessar e que pode ser controlada e gerenciada usando o Cloud Key Management Service (Cloud KMS).

O que é protegido com a CMEK

Quando você ativa a CMEK no Cloud Tasks, ela é ativada para uma região. Quando ativado, o corpo e o cabeçalho das tarefas criadas nessa região são protegidos com sua chave quando estão em repouso. Se uma tarefa foi criada enquanto a CMEK estava ativada e a chave for desativada posteriormente (ao desativar ou excluir a chave ou desativando a CMEK), a tarefa será criptografada com sua chave, mas não poderá ser executada.

As tarefas não são protegidas com a CMEK nos seguintes casos:

  • A tarefa foi criada antes da ativação da CMEK
  • A tarefa não está na região para a qual a CMEK está ativada
  • A tarefa é afetada por uma limitação de compatibilidade

Limitações de compatibilidade

A integração do Cloud Tasks com CMEK não oferece suporte ao seguinte:

  • Versões google-gax abaixo de 4.0.0: o pacote NPM google-gax para Node.js tem suporte limitado nas versões abaixo de 4.0.0. Para essas versões, a CMEK é suportada apenas na região us-central1. Mesmo que você tenha apenas tarefas nessa região, é recomendável fazer upgrade para a versão 4.0.0 ou mais recente.

  • Serviço de fila de tarefas integrado ao App Engine: as tarefas criadas usando o serviço de fila de tarefas integrado do App Engine não são protegidas pela CMEK, mesmo se estão em uma região para a qual ela está ativada. A ativação da CMEK não impede a criação ou operação (por exemplo, execução ou exclusão) dessas tarefas.

  • Filas pull: se você ativar a CMEK, poderá criar e executar tarefas em filas pull, mas essas tarefas não serão protegidas pela CMEK. As filas pull são incomuns. Para verificar se a fila é pull, execute o seguinte comando da CLI gcloud no terminal:

    gcloud beta tasks queues describe QUEUE_NAME
    

    Substitua QUEUE_NAME pelo nome da fila.

    Se o type listado for pull, sua fila será pull. Se o type listado for push, essa limitação não afetará as tarefas na sua fila.

  • Roteamento no nível da fila:quando a CMEK está ativada, não é possível aplicar o roteamento no nível da fila. E se o roteamento no nível da fila estiver ativado, não será possível ativar a CMEK. Para verificar se o roteamento no nível da fila está ativado, faça o seguinte:

    1. Execute o seguinte comando da CLI gcloud no seu terminal:

      gcloud beta tasks queues describe QUEUE_NAME
      Substitua QUEUE_NAME pelo nome da fila.

    2. Na saída, procure o campo httpTarget e verifique se o uriOverride foi definido. Se um host for especificado, sua fila terá o roteamento no nível da fila ativado e não será compatível com a CMEK. Para remover o roteamento no nível da fila, consulte Atualizar ou remover o roteamento no nível da fila. Se a saída não mostrar uriOverride com um host especificado, sua fila não usará o roteamento no nível da fila.

  • TTL da tarefa:quando a CMEK está ativada, não é possível definir task_ttl como mais de 60 dias. E se você tiver um task_ttl definido para mais de 60 dias, não será possível ativar a CMEK.

Antes de começar

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

  1. Ative as APIs.

    Console

    1. Ative as APIs Cloud KMS and Cloud Tasks.

      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. Defina o projeto padrão. Precisa ser o projeto que contém os recursos do Cloud Tasks que você quer proteger com a CMEK. Se você precisar executar um comando em um projeto diferente, como o projeto que contém os recursos do Cloud KMS, esta página incluirá a sinalização --project no comando da CLI gcloud e informará qual projeto especificar.

      gcloud config set project PROJECT_ID
      

      Substitua PROJECT_ID pelo ID do projeto que contém os recursos do Cloud Tasks.

    3. Atualize os componentes de gcloud.

      gcloud components update
      

    4. Ative as APIs Cloud KMS e Cloud Tasks para o projeto que vai armazenar suas chaves de criptografia.

      gcloud services enable cloudkms.googleapis.com cloudtasks.googleapis.com 
      --project=PROJECT_ID

      Substitua PROJECT_ID pelo ID do projeto que vai armazenar suas chaves de criptografia. Pode ser o mesmo projeto que os recursos do Cloud Tasks. No entanto, para limitar o acesso às chaves do Cloud KMS, considere Como configurar o Cloud KMS em um projeto separado.

  2. O Cloud KMS produz registros de auditoria do Cloud quando as chaves são ativadas, desativadas ou usadas pelos recursos do Cloud Tasks 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 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.

  3. Acessar papéis do Identity and Access Management.

    Para ter as permissões necessárias para usar a CMEK com o Cloud Tasks, peça ao administrador para conceder a você os seguintes papéis do IAM no seu projeto:

    • Ative ou desative a CMEK: roles/cloudtasks.admin
    • Confira a chave em uso: roles/cloudtasks.viewer

    Para mais informações sobre como conceder papéis, consulte Gerenciar acesso.

    Talvez você também consiga receber as permissões necessárias por meio de papéis personalizados ou outros papéis predefinidos.

Criar um keyring e uma chave do Cloud KMS

Se você já tiver um keyring na mesma região dos recursos do Cloud Tasks e quiser usá-los, pule esta seção. Caso contrário, use estas instruções para criar a chave e o keyring do Cloud KMS.

  1. Crie um keyring.

  2. Crie uma chave para um keyring especificado.

Recuperar o ID de uma chave do Cloud KMS

O ID do recurso de uma chave do Cloud KMS é necessário quando você ativa a CMEK para o Cloud Tasks.

Console

  1. No console do Google Cloud, acesse a página Gerenciamento de chaves e selecione a guia Inventário de chaves.

    Acessar "Inventário de chaves"

  2. Na chave referente ao ID de recurso que você está recuperando, clique em Ações.

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

gcloud

  1. Liste todas as chaves em um determinado keyring:

    gcloud kms keys list --keyring=KEY_RING --location=LOCATION --project=PROJECT_ID
    

    Substitua:

    • KEY_RING: o nome do keyring;
    • LOCATION: a região do keyring.
    • PROJECT_ID: o ID do projeto que contém o keyring

    A saída inclui o ID de cada chave. Exemplo:

    NAME: projects/PROJECT_NAME/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME
    

Conceder ao agente de serviço do Cloud Tasks acesso à chave

Conceda ao agente de serviço do Cloud Tasks o papel Criptografador/Descriptografador de CryptoKey do Cloud KMS para que ele possa acessar a chave do Cloud KMS:

Console

  1. No console do Google Cloud, acesse a página "Identity and Access Management".

    Acessar IAM

  2. Marque a caixa de seleção Incluir concessões de papel fornecidas pelo Google.

  3. Encontre a conta de serviço do Cloud Tasks digitando cloudtasks.iam.gserviceaccount.com no filtro.

    A conta de serviço do Cloud Tasks tem o formato service-PROJECT_NUMBER@gcp-sa-cloudtasks.iam.gserviceaccount.com.

  4. Clique no ícone de lápis Editar principal.

  5. No painel que será aberto, clique em Adicionar outro papel.

  6. Pesquise e selecione o papel Criptografador/Descriptografador do Cloud KMS CryptoKey.

  7. Clique em Save.

gcloud

gcloud kms keys add-iam-policy-binding KEY_ID \
    --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudtasks.iam.gserviceaccount.com \
    --role=roles/cloudkms.cryptoKeyEncrypterDecrypter

Substitua:

  • KEY_ID: o ID de recurso totalmente qualificado da chave. Para instruções sobre como encontrar isso, consulte Recuperar o ID de uma chave do Cloud KMS. Não inclua um número de versão de chave. Incluir um número de versão de chave pode fazer com que este comando falhe.
  • PROJECT_NUMBER: o número do projeto do Google Cloud. Você encontra o número do projeto na página de Boas-vindas do console do Google Cloud ou executando o seguinte comando:

    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, uma tarefa na região ativada para CMEK poderá criptografar e descriptografar os dados usando a chave de CMEK. Se você revogar esse papel ou desativar ou destruir a chave de CMEK, esses dados não poderão ser acessados. Neste documento, consulte Desativar o Cloud KMS.

Ativar CMEK para o Cloud Tasks

É possível ativar a CMEK usando a API ou a CLI gcloud. Para o Cloud Tasks, as CMEKs são ativadas por região. Ela não é ativada por tarefas individuais. Quando a CMEK está ativada para uma determinada região no Cloud Tasks, todas as tarefas nessa região são protegidas pela CMEK.

API

É possível ativar a CMEK chamando o método Update CMEK config. A API Cloud Tasks fornece o método Update CMEK config nas APIs REST e RPC:

gcloud

Para ativar a CMEK usando a Google Cloud CLI, use o seguinte comando:

gcloud tasks cmek-config update --location=LOCATION --kms-key-name=KEY_ID

Substitua:

  • LOCATION: a região do seu recurso do Cloud Tasks
  • KEY_ID: o ID de recurso totalmente qualificado da chave. Para instruções sobre como encontrar isso, consulte Recuperar o ID de uma chave do Cloud KMS. Não inclua um número de versão da chave. Incluir um número de versão de chave pode fazer com que esse comando falhe.

Para verificar se a chave foi ativada, siga as instruções na seção Identificar a chave em uso.

Ativar para tarefas pré-existentes

A CMEK não protege tarefas criadas antes da ativação da CMEK para o Cloud Tasks. Para proteger tarefas preexistentes com a CMEK:

  1. Ative a CMEK. Consulte a seção sobre como ativar a CMEK.
  2. Substitua as tarefas atuais. Há duas maneiras principais de fazer isso. A melhor maneira de fazer isso depende do que é importante para você:

    • Execução contínua: para garantir a execução contínua ("pela entrega pelo menos uma vez"), é possível recriar a tarefa e excluir a pré-existente depois de verificar se a nova tarefa funciona conforme o esperado. Isso pode resultar em execuções duplicadas, porque a tarefa antiga e a nova podem ser executadas antes da exclusão da tarefa antiga.

    • Prevenção duplicada: para evitar execuções duplicadas (entrega no máximo uma vez), é possível excluir a tarefa antiga e recriá-la em seguida. Isso pode resultar em execuções perdidas devido ao tempo decorrido entre a exclusão da tarefa antiga e a criação da nova.

Identifique a chave em uso

Para identificar a chave CMEK em uso para seus recursos do Cloud Tasks, execute o seguinte comando da CLI gcloud no seu terminal:

gcloud tasks cmek-config describe --location=LOCATION

Substitua LOCATION pela região dos seus recursos do Cloud Tasks.

Se não houver saída, a CMEK não será configurada para o local especificado.

Desativar CMEK para o Cloud Tasks

É possível desativar a CMEK usando a API ou a CLI gcloud. No Cloud Tasks, as CMEKs são desativadas por região. Ela não é desativada por tarefas individuais. Quando a CMEK está desativada para uma determinada região no Cloud Tasks, as tarefas nessa região não são protegidas pela CMEK.

A desativação da CMEK afeta as tarefas criadas no futuro, não as criadas anteriormente:

  • Novas tarefas:não são protegidas pela CMEK.
  • Tarefas pré-existentes:tarefas criadas enquanto a CMEK estava ativada permanecem criptografadas e continuam sendo executadas enquanto a chave do Cloud KMS permanecer ativa.

API

Para desativar a CMEK, chame o método Update CMEK config e limpe a chave do Cloud KMS substituindo-a por uma string vazia. A API Cloud Tasks fornece o método Update CMEK config nas APIs REST e RPC:

gcloud

Para desativar a CMEK usando a Google Cloud CLI, use o seguinte comando:

gcloud tasks cmek-config update --location=LOCATION --clear-kms-key

Substitua:

  • LOCATION: a região do recurso do Cloud Tasks.

Remover o Cloud KMS

Se você quiser revogar o acesso a dados às suas tarefas, remova o Cloud KMS. Existem três maneiras de fazer isso:

  • Desative a chave de criptografia gerenciada pelo cliente. Desativar uma chave CMEK suspende o acesso a todos os dados protegidos por essa versão enquanto a chave estiver desativada. Não é possível acessar ou criar tarefas com uma chave desativada. A tentativa de executar uma tarefa protegida pela CMEK enquanto a chave estiver desativada resulta em um erro UNKNOWN no Cloud Logging. É possível reativar a chave mais tarde, se quiser. Quando você desativa uma chave de criptografia gerenciada pelo cliente, pode levar até cinco minutos para que a alteração seja aplicada.

  • Destrua a chave de criptografia gerenciada pelo cliente. A destruição de uma chave CMEK suspende permanentemente o acesso a todos os dados protegidos por essa versão da chave. Não é possível acessar ou criar tarefas com uma chave que foi destruída. Se uma tarefa tiver sido criada enquanto a CMEK estava ativada e a chave for destruída posteriormente, a tarefa será criptografada com ela, mas não poderá ser executada. Se a tarefa for executada, o Cloud Logging registrará um erro UNKNOWN. Quando você destrói uma chave de criptografia gerenciada pelo cliente, pode levar até cinco minutos para que a alteração seja aplicada.

  • Revogue o papel do IAM cloudkms.cryptoKeyEncrypterDecrypter do agente de serviço do Cloud Tasks. Isso afeta todas as tarefas no projeto do Google Cloud que oferecem suporte à criptografia usando CMEK. Não é possível criar novas tarefas integradas à CMEK ou visualizar recursos criptografados por CMEK.

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

Preços

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