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, autorizações de acesso e 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 ativados, 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 sua 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 valor 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 mais de 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.

      Roles required to enable APIs

      To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

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