Usar chaves de criptografia gerenciadas pelo cliente

Por padrão, o Cloud Tasks criptografa o conteúdo do cliente em repouso. O Cloud Tasks processa 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, como o Cloud Tasks. Ao usar chaves do Cloud KMS, é possível 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. Com o Cloud KMS, também é possível visualizar registros de auditoria e controlar ciclos de vida de chaves. 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 Cloud Tasks é semelhante à criptografia padrão do Google. Para saber mais sobre suas opções de criptografia, consulte Chaves de criptografia gerenciadas pelo cliente (CMEK).

O que é protegido com a CMEK

Quando você ativa a CMEK no Cloud Tasks, ela é ativada para uma região. Quando ativados, 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 foi desativada posteriormente (por desativação ou exclusão da chave ou por desativação da CMEK), a tarefa é criptografada com sua chave, mas não pode 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 em que 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 é compatível com o seguinte:

  • Versões do google-gax abaixo de 4.0.0:o pacote NPM google-gax para Node.js tem suporte limitado em versões anteriores a 4.0.0. Para essas versões, a CMEK só é aceita 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 do App Engine:as tarefas criadas usando o serviço de fila de tarefas integrado do App Engine não são protegidas por CMEK, mesmo que estejam em uma região em que ele esteja ativado. A ativação da CMEK não impede a criação ou operação (por exemplo, execução ou exclusão) dessas tarefas.

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

    gcloud tasks queues describe QUEUE_NAME

    Substitua QUEUE_NAME pelo nome da sua fila.

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

  • Roteamento no nível da fila:quando a CMEK está ativada, não é possível aplicar o roteamento no nível da fila. Além disso, 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 terminal:

      gcloud tasks queues describe QUEUE_NAME
      Substitua QUEUE_NAME pelo nome da sua 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 para mais de 60 dias. Se você tiver um task_ttl definido como 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 etapas a seguir:

  1. Ative as APIs.

    Console

    1. Ative as APIs Cloud KMS e Cloud Tasks, se alguma delas ainda não estiver ativada.

      Funções necessárias para ativar APIs

      Para ativar APIs, você precisa da permissão serviceusage.services.enable. Se você criou o projeto, provavelmente já tem essa permissão pelo papel de proprietário (roles/owner). Caso contrário, é possível receber essa permissão pelo papel de administrador do Service Usage (roles/serviceusage.serviceUsageAdmin). Saiba como conceder papéis.

      Ativar as APIs

    gcloud

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

      Ativar o Cloud Shell

      Na parte de baixo do console 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 seu projeto padrão. Esse precisa ser o projeto que contém os recursos do Cloud Tasks que você quer proteger com CMEK. Se você precisar executar um comando em um projeto diferente, como o projeto que contém seus recursos do Cloud KMS, esta página incluirá a flag --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 seus recursos do Cloud Tasks.

    3. Atualize os componentes gcloud.

      gcloud components update

    4. Ative as APIs Cloud KMS e Cloud Tasks no projeto que vai armazenar as 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 as chaves de criptografia. Pode ser o mesmo projeto dos recursos do Cloud Tasks, mas para limitar o acesso às chaves do Cloud KMS, considere 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 por 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 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.

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

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

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

    Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

    Também é possível conseguir as permissões necessárias usando 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 seus recursos do Cloud Tasks e quiser usar essa chave e esse keyring, pule esta seção. Caso contrário, use estas instruções para criar sua chave e seu 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 o inventário de chaves

  2. Na chave referente ao ID de recurso que está sendo recuperado, 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 é parecido com este:

    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 do Identity and Access Management (IAM) Criptografador/descriptografador de CryptoKey do Cloud KMS para que ele possa acessar a chave do Cloud KMS:

Console

  1. No console Google Cloud , acesse a página IAM (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 participante.

  5. No painel que abrir, clique em Adicionar outro papel.

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

  7. Clique em Salvar.

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 do 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 da chave pode fazer com que esse comando falhe.
  • 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:

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

Desde que o agente de serviço tenha a função roles/cloudkms.cryptoKeyEncrypterDecrypter, uma tarefa na região habilitada para CMEK 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 a CMEK para o Cloud Tasks.

Ativar a CMEK para o Cloud Tasks

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

gcloud

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

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

Substitua:

  • LOCATION: a região do recurso do Cloud Tasks
  • KEY_ID: o ID do 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 da chave pode fazer com que esse comando falhe.

REST

Para habilitar a CMEK, chame o método Update CMEK config. A API Cloud Tasks oferece o método Update CMEK config nas APIs REST e RPC:

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 preexistentes. 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 (entrega "pelo menos uma vez"), recrie a tarefa e exclua a tarefa 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 de você excluir a tarefa antiga.

    • Prevenção de duplicação:para evitar execuções duplicadas ("no máximo uma vez" de entrega), primeiro exclua a tarefa antiga e depois recrie-a. Isso pode resultar em execuções perdidas devido ao tempo decorrido entre a exclusão da tarefa antiga e a criação da nova.

Identificar a chave em uso

Para identificar a chave da CMEK em uso nos recursos do Cloud Tasks, execute o seguinte comando da CLI gcloud:

gcloud tasks cmek-config describe --location=LOCATION

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

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

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

O Cloud Tasks está integrado a duas restrições de política da organização para ajudar a garantir o uso da CMEK em uma organização:

  • constraints/gcp.restrictNonCmekServices é usado para exigir proteção de CMEK.
  • constraints/gcp.restrictCmekCryptoKeyProjects é usado para limitar quais chaves do Cloud KMS são usadas para proteção com CMEK.

Essa integração permite especificar os seguintes requisitos de conformidade de criptografia para recursos do Cloud Tasks na sua organização:

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

Antes de aplicar qualquer políticas da organização de CMEK, esteja ciente do seguinte.

Preparar-se para um atraso na propagação

Depois que você define ou atualiza uma política da organização, pode levar até 15 minutos para a nova política entrar em vigor.

Considerar os recursos atuais

Os recursos atuais não estão sujeitos às políticas da organização recém-criadas. Por exemplo, uma política da organização não se aplica retroativamente às tarefas atuais. Esses recursos ainda podem ser acessados sem uma CMEK e, se aplicável, ainda são criptografados com as chaves atuais. Se você quiser aplicar a política a tarefas atuais, ative a CMEK para tarefas preexistentes.

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

Pode ser difícil obter a permissão para definir ou atualizar a política da organização para fins de teste. É necessário receber o papel de administrador da política da organização, que só pode ser concedido no nível da organização, não no nível do projeto ou da pasta.

Embora o papel precise ser concedido no nível da organização, ainda é possível especificar uma política que se aplica apenas a um projeto ou pasta específicos.

Exigir CMEKs para todos os novos recursos do Cloud Tasks

É possível usar a restrição constraints/gcp.restrictNonCmekServices para exigir que as CMEKs sejam usadas para proteger todos os novos recursos do Cloud Tasks em uma organização.

Se definida, essa política da organização faz com que todas as solicitações de criação de recursos sem uma chave especificada do Cloud KMS falhem.

Após definir essa política, ela será aplicada somente a novos recursos no projeto. Os recursos atuais sem as chaves do Cloud KMS aplicadas continuam existindo e podem ser acessados sem problemas.

Console

  1. No console do Google Cloud , acesse a página Políticas da organização.

    Acessar a página Políticas da organização

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

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

  4. Clique em Gerenciar política.

  5. Na página Editar política, em Origem da política, selecione Substituir política 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 Negar.

  9. No campo Valores personalizados, insira o seguinte:

    is:cloudtasks.googleapis.com
    
  10. Clique em Concluído e em Definir política.

gcloud

  1. Crie um arquivo temporário /tmp/policy.yaml para armazenar a política:

      name: projects/PROJECT_ID/policies/gcp.restrictNonCmekServices
      spec:
        rules:
        - values:
            deniedValues:
            - is:cloudtasks.googleapis.com

    Substitua PROJECT_ID pelo ID do projeto em que você está aplicando essa restrição.

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

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

Para verificar se a política foi aplicada, tente criar uma fila no projeto. O processo falhará a menos que você especifique uma chave do Cloud KMS.

Restringir chaves do Cloud KMS para um projeto do Cloud Tasks

É possível usar a restrição constraints/gcp.restrictCmekCryptoKeyProjects para restringir as chaves do Cloud KMS que podem ser usadas para proteger um recurso em um projeto do Cloud Tasks.

Por exemplo, é possível especificar uma regra semelhante a esta: "Para todos os recursos do Cloud Tasks em projects/my-company-data-project, as chaves do Cloud KMS usadas neste projeto precisam vir de projects/my-company-central-keys OU projects/team-specific-keys".

Console

  1. No console do Google Cloud , acesse a página Políticas da organização.

    Acessar a página Políticas da organização

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

    constraints/gcp.restrictCmekCryptoKeyProjects
    
  3. Na coluna "Nome", clique em Restringir quais projetos podem fornecer CryptoKeys do KMS para CMEK.

  4. Clique em Gerenciar política.

  5. Na página Editar política, em Origem da política, selecione Substituir política 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, insira o seguinte:

    under:projects/KMS_PROJECT_ID
    

    Substitua KMS_PROJECT_ID pelo ID do projeto em que as chaves do Cloud KMS que você quer usar estão.

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

  10. Clique em Concluído e em Definir política.

gcloud

  1. Crie um arquivo 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:

    • PROJECT_ID: o ID do projeto em que você está aplicando essa restrição.
    • KMS_PROJECT_ID: o ID do projeto em que as chaves do Cloud KMS que você quer usar estão localizadas.
  2. Execute o comando org-policies set-policy:

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

Para verificar se a política foi aplicada, tente criar uma fila usando uma chave do Cloud KMS de um projeto diferente. O processo falhará.

Desativar CMEK para o Cloud Tasks

É possível desativar a CMEK usando a API ou a CLI gcloud. No Cloud Tasks, a CMEK é desativada por região. Ela não é desativada por tarefas individuais. Quando a CMEK é 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 no passado:

  • Novas tarefas:não são protegidas pela CMEK.
  • Tarefas preexistentes:as tarefas criadas enquanto a CMEK estava ativada permanecem criptografadas e continuam sendo executadas enquanto a chave do Cloud KMS estiver ativa.

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.

REST

É possível desativar a CMEK chamando o método Update CMEK config e limpando 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:

Remover o Cloud KMS

Se quiser revogar o acesso aos dados das suas tarefas, remova o Cloud KMS. Há três maneiras de fazer isso:

  • Desative a chave de criptografia gerenciada pelo cliente. A desativação de uma chave CMEK suspende o acesso a todos os dados protegidos por essa versão da chave enquanto ela estiver desativada. Não é possível acessar nem criar tarefas com uma chave desativada. A tentativa de executar uma tarefa protegida por CMEK enquanto a chave está desativada resulta em um erro UNKNOWN no Cloud Logging. Você pode reativar a chave mais tarde, se quiser. Quando você desativa uma chave de criptografia gerenciada pelo cliente, pode levar até 5 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 foi criada enquanto a CMEK estava ativada e a chave foi destruída depois, a tarefa será criptografada com sua chave, mas não poderá ser executada. Se a tarefa tentar ser executada, o Cloud Logging vai registrar um erro UNKNOWN. Quando você destrói uma chave de criptografia gerenciada pelo cliente, pode levar até 5 minutos para a mudança ser aplicada.

  • Revogue o papel do IAM cloudkms.cryptoKeyEncrypterDecrypter do agente de serviço do Cloud Tasks. Isso afeta todas as tarefas no projeto doGoogle Cloud que são compatíveis com criptografia usando CMEK. Não é possível criar novas tarefas integradas à CMEK nem acessar recursos criptografados com CMEK.

Embora nenhuma dessas operações garanta a revogação instantânea do acesso, 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 custos adicionais além das operações com chaves, que são faturadas no seu projeto do Google Cloud . Para informações sobre preços atuais, consulte Preços do Cloud KMS.