Use chaves de encriptação geridas pelo cliente

Por predefinição, o Cloud Tasks encripta o conteúdo do cliente em repouso. O Cloud Tasks processa a encriptação por si sem ações adicionais da sua parte. Esta opção chama-se Encriptação predefinida da Google.

Se quiser controlar as suas chaves de encriptação, pode usar chaves de encriptação geridas pelo cliente (CMEK) no Cloud KMS com serviços integrados com CMEK, incluindo o Cloud Tasks. A utilização de chaves do Cloud KMS dá-lhe controlo sobre o respetivo nível de proteção, localização, programação de rotação, utilização e autorizações de acesso, bem como limites criptográficos. A utilização do Cloud KMS também permite ver registos de auditoria e controlar os ciclos de vida das chaves. Em vez de a Google possuir e gerir as chaves de encriptação de chaves (KEKs) simétricas que protegem os seus dados, controla e gere estas chaves no Cloud KMS.

Depois de configurar os seus recursos com CMEKs, a experiência de acesso aos recursos do Cloud Tasks é semelhante à utilização da encriptação predefinida da Google. Para mais informações acerca das suas opções de encriptação, consulte o artigo Chaves de encriptação geridas pelo cliente (CMEK).

O que está protegido com a CMEK

Quando ativa as CMEK no Cloud Tasks, ativa-as para uma região. Quando ativado, o corpo e o cabeçalho das tarefas criadas nessa região são protegidos com a sua chave quando estão inativos. Se uma tarefa foi criada enquanto as CMEK estavam ativadas e, posteriormente, a chave for desativada (desativando ou eliminando a chave, ou desativando as CMEK), a tarefa é encriptada com a sua chave, mas não pode ser executada.

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

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

Limitações de compatibilidade

A integração do Cloud Tasks com a CMEK não suporta o seguinte:

  • google-gax versões abaixo de 4.0.0: o pacote NPM google-gax para Node.js tem suporte limitado nas versões anteriores a 4.0.0. Para estas versões, a CMEK só é suportada na região us-central1. Mesmo que só tenha tarefas nessa região, é recomendado que atualize para a versão 4.0.0 ou posterior.

  • Serviço de fila de tarefas integrado do App Engine: as tarefas criadas através do serviço de fila de tarefas integrado do App Engine não estão protegidas pela CMEK, mesmo que estejam numa região para a qual esteja ativada. A ativação das CMEK não impede a criação nem o funcionamento (por exemplo, a execução ou a eliminação) destas tarefas.

  • Filas de obtenção: se ativar a CMEK, pode criar e executar tarefas em filas de obtenção, mas estas tarefas não estão protegidas pela CMEK. As filas de obtenção são invulgares. Para verificar se a sua fila é uma fila de obtenção, execute o seguinte comando da CLI gcloud no terminal:

    gcloud tasks queues describe QUEUE_NAME

    Substitua QUEUE_NAME pelo nome da fila.

    Se o type indicado for pull, a sua fila é uma fila de obtenção. Se o valor type indicado for push, esta limitação não afeta as tarefas na sua fila.

  • Encaminhamento ao nível da fila: quando as CMEK estão ativadas, não pode aplicar o encaminhamento ao nível da fila. Além disso, se o encaminhamento ao nível da fila estiver ativado, não pode ativar as CMEK. Para verificar se tem o encaminhamento ao nível da fila 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 for especificado um host, a sua fila tem o encaminhamento ao nível da fila ativado e não é compatível com a CMEK. Para remover o encaminhamento ao nível da fila, consulte o artigo Atualize ou remova o encaminhamento ao nível da fila. Se o resultado não mostrar uriOverride com um host especificado, a sua fila não usa o encaminhamento ao nível da fila.

  • TTL da tarefa: quando o CMEK está ativado, não pode definir task_ttl para um valor superior a 60 dias. Além disso, se tiver um task_ttl definido para mais de 60 dias, não pode ativar o CMEK.

Antes de começar

Antes de usar as CMEK no Cloud Tasks, conclua os seguintes passos:

  1. Ative as APIs.

    Consola

    1. Enable the Cloud KMS and Cloud Tasks 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. Defina o projeto predefinido. Este deve ser o projeto que contém os recursos do Cloud Tasks que quer proteger com a CMEK. Se precisar de executar um comando num projeto diferente, como o projeto que contém os seus recursos do Cloud KMS, esta página inclui a flag --project no comando da CLI gcloud e indica o projeto que deve especificar.

      gcloud config set project PROJECT_ID

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

    3. Atualize os componentes gcloud.

      gcloud components update

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

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

      Substitua PROJECT_ID pelo ID do projeto que vai armazenar as suas chaves de encriptação. Este pode ser o mesmo projeto que os seus recursos do Cloud Tasks, mas para limitar o acesso às suas chaves do Cloud KMS, considere configurar o Cloud KMS num projeto separado.

  2. O Cloud KMS produz registos de auditoria na nuvem quando as chaves são ativadas, desativadas ou usadas por recursos do Cloud Tasks para encriptar e desencriptar dados. Certifique-se de que o registo está ativado para a API Cloud KMS no seu projeto e que decidiu que autorizações e funções específicas do registo se aplicam ao seu exemplo de utilização. Para mais informações, consulte as informações de registo de auditoria do Cloud KMS.

  3. Obtenha funções de gestão de identidade e de acesso.

    Para receber as autorizações necessárias para usar as CMEK com o Cloud Tasks, peça ao seu administrador para lhe conceder as seguintes funções da IAM no seu projeto:

    • Ative ou desative as CMEK: roles/cloudtasks.admin
    • Veja a chave em utilização: roles/cloudtasks.viewer

    Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

    Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

  4. Crie um conjunto de chaves e uma chave do Cloud KMS

    Se já tiver um conjunto de chaves na mesma região que os seus recursos do Cloud Tasks e quiser usar essa chave e conjunto de chaves, ignore esta secção. Caso contrário, use estas instruções para criar a chave e o conjunto de chaves do Cloud KMS.

    1. Crie um conjunto de chaves.

    2. Crie uma chave para um conjunto de chaves especificado.

    Obtenha o ID de uma chave do Cloud KMS

    O ID de recurso de uma chave do Cloud KMS é obrigatório quando ativa a CMEK para o Cloud Tasks.

    Consola

    1. Na Google Cloud consola, aceda à página Gestão de chaves e selecione o separador Inventário de chaves.

      Aceda a Inventário principal

    2. Para a chave cujo ID de recurso está a obter, 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 num determinado conjunto de chaves:

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

      Substitua o seguinte:

      • KEY_RING: o nome do conjunto de chaves
      • LOCATION: a região do conjunto de chaves
      • PROJECT_ID: o ID do projeto que contém o conjunto de chaves

      A saída inclui o ID da chave para cada chave. Por exemplo:

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

    Conceda ao agente do serviço Cloud Tasks acesso à chave

    Tem de conceder ao agente de serviço do Cloud Tasks a função de encriptador/desencriptador de CryptoKey do Cloud KMS do Identity and Access Management (IAM) para que possa aceder à chave do Cloud KMS:

    Consola

    1. Na Google Cloud consola, aceda à página IAM (gestão de identidade e de acesso).

      Aceda ao IAM

    2. Selecione a caixa de verificação Incluir concessões de funções fornecidas pela Google.

    3. Encontre a conta de serviço do Cloud Tasks escrevendo 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 apresentado, clique em Adicionar outra função.

    6. Pesquise e selecione a função Encriptador/desencriptador de CryptoKey do Cloud KMS.

    7. Clique em Guardar.

    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 o seguinte:

    • KEY_ID: o ID do recurso totalmente qualificado da sua chave. Para obter instruções sobre como encontrar este ID, consulte o artigo Obtenha o ID de uma chave do Cloud KMS. Não inclua um número de versão da chave. A inclusão de um número da versão da chave pode fazer com que este comando falhe.
    • PROJECT_NUMBER: o número do seu Google Cloud projeto. Pode encontrar o número do projeto na página Boas-vindas da Google Cloud consola ou executando o seguinte comando:

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

    Enquanto o agente de serviço tiver a função roles/cloudkms.cryptoKeyEncrypterDecrypter, uma tarefa na sua região com CMEK pode encriptar e desencriptar os respetivos dados através da chave CMEK. Se revogar esta função ou desativar ou destruir a chave CMEK, não é possível aceder a esses dados. Neste documento, consulte a secção Desative as CMEK para o Cloud Tasks.

    Ative as CMEK para o Cloud Tasks

    Pode ativar a CMEK através da API ou da CLI gcloud. Para o Cloud Tasks, a CMEK é ativada por região. Não está ativada por tarefas individuais. Quando a CMEK está ativada para uma determinada região no Cloud Tasks, todas as tarefas nessa região estão protegidas pela CMEK.

    gcloud

    Para ativar as CMEK através da CLI do Google Cloud, execute o seguinte comando:

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

    Substitua o seguinte:

    • LOCATION: a região do recurso do Cloud Tasks
    • KEY_ID: o ID do recurso totalmente qualificado da sua chave. Para obter instruções sobre como encontrar esta informação, consulte o artigo Obtenha o ID de uma chave do Cloud KMS. Não inclua um número de versão da chave. A inclusão de um número da versão da chave pode fazer com que este comando falhe.

    REST

    Pode ativar as CMEK chamando o método Update CMEK config. A API Cloud Tasks fornece o método Update CMEK config nas APIs REST e RPC:

    Para verificar se a chave foi ativada com êxito, siga as instruções na secção Identifique a chave em utilização.

    Ative para tarefas pré-existentes

    As CMEK não protegem as tarefas criadas antes de ativar as CMEK para o Cloud Tasks. Para proteger tarefas pré-existentes com CMEK:

    1. Ative as CMEK (consulte a secção sobre a ativação das CMEK).
    2. Substituir as tarefas preexistentes. Existem duas formas principais de o fazer. A melhor forma de o fazer depende do que é importante para si:

      • Execução contínua: para garantir a execução contínua ("pelo menos uma vez"), pode recriar primeiro a tarefa e, em seguida, eliminar a tarefa preexistente depois de verificar se a nova tarefa funciona como esperado. Isto pode resultar em execuções duplicadas, porque a tarefa antiga e a nova podem ser executadas antes de eliminar a tarefa antiga.

      • Prevenção de duplicados: para evitar execuções duplicadas ("no máximo uma vez"), pode eliminar primeiro a tarefa antiga e, em seguida, recriá-la. Isto pode resultar em execuções perdidas devido ao tempo decorrido entre a eliminação da tarefa antiga e a criação da nova.

    Identifique a chave em utilização

    Para identificar a chave CMEK em utilização para os seus recursos do Cloud Tasks, execute o seguinte comando da CLI gcloud:

    gcloud tasks cmek-config describe --location=LOCATION

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

    Se não houver saída, significa que a CMEK não está configurada para a localização especificada.

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

    O Cloud Tasks está integrado com duas restrições de políticas da organização para ajudar a garantir a utilização de CMEK numa organização:

    • constraints/gcp.restrictNonCmekServices é usado para exigir a proteção CMEK.
    • constraints/gcp.restrictCmekCryptoKeyProjects é usado para limitar as chaves do Cloud KMS que são usadas para a proteção CMEK.

    Esta integração permite-lhe especificar os seguintes requisitos de conformidade de encriptação para recursos do Cloud Tasks na sua organização:

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

    Antes de aplicar quaisquer políticas organizacionais de CMEK, deve ter em atenção o seguinte.

    Prepare-se para um atraso na propagação

    Depois de definir ou atualizar uma política da organização, a nova política pode demorar até 15 minutos a entrar em vigor.

    Considere os recursos existentes

    Os recursos existentes não estão sujeitos às políticas da organização criadas recentemente. Por exemplo, uma política da organização não se aplica retroativamente às tarefas existentes. Esses recursos continuam acessíveis sem uma CMEK e, se aplicável, continuam encriptados com as chaves existentes. Se quiser aplicar a política a tarefas existentes, tem de ativar as CMEK para tarefas pré-existentes.

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

    A autorização para definir ou atualizar a política da organização pode ser difícil de adquirir para fins de teste. Tem de ter a função de administrador da política da organização, que só pode ser concedida ao nível da organização (em vez do nível do projeto ou da pasta).

    Embora a função tenha de ser concedida ao nível da organização, continua a ser possível especificar uma política que se aplique apenas a um projeto ou uma pasta específicos.

    Exija CMEKs para todos os novos recursos do Cloud Tasks

    Pode usar a restrição constraints/gcp.restrictNonCmekServices para exigir que as CMEKs sejam usadas para proteger todos os novos recursos do Cloud Tasks numa organização.

    Se estiver definida, esta política da organização faz com que todos os pedidos de criação de recursos sem uma chave do Cloud KMS especificada falhem.

    Depois de definir esta política, aplica-se apenas aos novos recursos no projeto. Todos os recursos existentes sem chaves do Cloud KMS aplicadas continuam a existir e são acessíveis sem problemas.

    Consola

    1. Na Google Cloud consola, aceda à página Políticas da organização.

      Aceda às políticas da organização

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

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

    4. Clique em Gerir política.

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

    9. No campo Valores personalizados, introduza o seguinte:

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

    gcloud

    1. Crie um ficheiro 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 onde está a aplicar esta 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 com êxito, pode tentar criar uma fila no projeto. O processo falha, a menos que especifique uma chave do Cloud KMS.

    Restrinja as chaves do Cloud KMS para um projeto do Cloud Tasks

    Pode usar a restrição constraints/gcp.restrictCmekCryptoKeyProjects para restringir as chaves do Cloud KMS que pode usar para proteger um recurso num projeto do Cloud Tasks.

    Por exemplo, pode especificar uma regra semelhante à seguinte: "Para todos os recursos do Cloud Tasks em projects/my-company-data-project, as chaves do Cloud KMS usadas neste projeto têm de ser provenientes de projects/my-company-central-keys OU projects/team-specific-keys."

    Consola

    1. Na Google Cloud consola, aceda à página Políticas da organização.

      Aceda às políticas da organização

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

      constraints/gcp.restrictCmekCryptoKeyProjects
      
    3. Na coluna Nome, clique em Restrinja os projetos que podem fornecer CryptoKeys do KMS para CMEK.

    4. Clique em Gerir política.

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

      under:projects/KMS_PROJECT_ID
      

      Substitua KMS_PROJECT_ID pelo ID do projeto onde se encontram as chaves do Cloud KMS que quer usar.

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

    10. Clique em Concluído e, de seguida, em Definir política.

    gcloud

    1. Crie um ficheiro 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 o seguinte

      • PROJECT_ID: o ID do projeto onde está a aplicar esta restrição.
      • KMS_PROJECT_ID: o ID do projeto onde se encontram as chaves do Cloud KMS que quer usar.
    2. Execute o comando org-policies set-policy:

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

    Para verificar se a política foi aplicada com êxito, pode tentar criar uma fila com uma chave do Cloud KMS de um projeto diferente. O processo vai falhar.

    Desative as CMEK para o Cloud Tasks

    Pode desativar a CMEK através da API ou da CLI gcloud. Para o Cloud Tasks, a CMEK está desativada por região. 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 estão protegidas pela CMEK.

    A desativação da CMEK afeta as tarefas criadas no futuro e não as tarefas criadas no passado:

    • Novas tarefas: não estão protegidas pela CMEK
    • Tarefas pré-existentes: as tarefas criadas enquanto as CMEK estavam ativadas permanecem encriptadas e continuam a ser executadas desde que a chave do Cloud KMS permaneça ativa.

    gcloud

    Para desativar as CMEK através da CLI do Google Cloud, use o seguinte comando:

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

    Substitua o seguinte:

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

    REST

    Pode desativar as 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:

    Remova o Cloud KMS

    Se quiser revogar o acesso aos dados das suas tarefas, pode remover o Cloud KMS. Existem três formas de o fazer:

    • Desative a chave de encriptação gerida pelo cliente. A desativação de uma chave CMEK suspende o acesso a todos os dados protegidos por essa versão da chave enquanto a chave estiver desativada. Não pode aceder nem criar tarefas com uma chave desativada. A tentativa de executar uma tarefa protegida por CMEK enquanto a chave está desativada resulta num erro UNKNOWN no Cloud Logging. Pode reativar a chave mais tarde, se quiser. Quando desativa uma chave de encriptação gerida pelo cliente, a alteração pode demorar até 5 minutos a ser aplicada.

    • Destrua a chave de encriptação gerida 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 pode aceder nem criar tarefas com uma chave que tenha sido destruída. Se uma tarefa tiver sido criada enquanto as CMEK estavam ativadas e a chave for destruída posteriormente, a tarefa é encriptada com a sua chave, mas não pode ser executada. Se a tarefa tentar ser executada, o Cloud Logging regista um erro UNKNOWN. Quando destrói uma chave de encriptação gerida pelo cliente, a alteração pode demorar até 5 minutos a ser aplicada.

    • Revogue a função do IAM do agente de serviço do Cloud Tasks.cloudkms.cryptoKeyEncrypterDecrypter Isto afeta todas as tarefas no Google Cloud projeto que suportam a encriptação através da CMEK. Não pode criar novas tarefas integradas com CMEK nem ver recursos encriptados com CMEK.

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

    Preços

    Esta integração não incorre em custos adicionais além das operações principais, que são faturadas ao seu projeto Google Cloud . Para ver informações de preços atuais, consulte os preços do Cloud KMS.