Configure a encriptação de mensagens

Este documento aborda a configuração de chaves de encriptação geridas pelo cliente (CMEK) para o Pub/Sub.

Por predefinição, o Pub/Sub encripta as mensagens com Google-owned and Google-managed encryption keys . Não é necessária nenhuma configuração adicional para usar o Google-owned and Google-managed encryption keys.

Acerca das CMEK

As CMEKs são chaves de encriptação que lhe pertencem e são geridas e armazenadas no Cloud Key Management Service (Cloud KMS). Se precisar de mais controlo sobre as chaves de encriptação usadas para proteger os dados do Pub/Sub, pode usar CMEKs. Algumas organizações também exigem a utilização de CMEKs.

As CMEKs dão-lhe controlo total sobre as suas chaves de encriptação, permitindo-lhe gerir o respetivo ciclo de vida, rotação e políticas de acesso. Quando configura o Pub/Sub com uma CMEK, o serviço encripta automaticamente todos os dados com a chave especificada. A utilização do Cloud KMS para CMEK pode incorrer em custos adicionais consoante os seus padrões de utilização.

Todas as mensagens são encriptadas nos seguintes estados e camadas:

Na camada de aplicação, o Pub/Sub encripta individualmente as mensagens recebidas assim que são recebidas. Esta implementação adiciona as seguintes funcionalidades:

CMEK para o Pub/Sub

O Pub/Sub usa o padrão de encriptação em envelope com CMEK. Nesta abordagem, as mensagens não são encriptadas pelo Cloud KMS. Em alternativa, o Cloud KMS é usado para encriptar as chaves de encriptação de dados (DEKs) criadas pelo Pub/Sub para cada tópico. Estas DEKs são armazenadas apenas de forma encriptada ou protegida pelo Pub/Sub. Antes de armazenar uma DEK, o serviço envia a DEK para o Cloud KMS para ser encriptada com a chave de encriptação de chaves (KEK) especificada no tópico. É gerada uma nova DEK para cada tópico aproximadamente a cada seis horas.

Antes de o Pub/Sub publicar mensagens numa subscrição, este encripta-as através da DEK mais recente que foi gerada para o tópico. O Pub/Sub desencripta as mensagens pouco antes de serem entregues aos subscritores.

Antes de começar

Pode configurar a CMEK para o Pub/Sub através da Google Cloud consola ou da CLI Google Cloud.

Conclua as seguintes tarefas:

  • Ative a API Cloud KMS.

  • Crie um conjunto de chaves e uma chave no Cloud KMS. Não é possível eliminar chaves nem conjuntos de chaves.

Para ver instruções sobre como realizar estas tarefas, consulte o guia de início rápido do Cloud KMS.

Uma vez que os recursos do Pub/Sub são globais, recomendamos vivamente que use chaves do Cloud KMS globais para configurar tópicos com CMEK ativada. Consoante as localizações dos publicadores e subscritores de um tópico, a utilização de uma chave do Cloud KMS regional pode introduzir dependências desnecessárias em links de rede entre regiões.

Funções e autorizações necessárias para configurar a CMEK

O Pub/Sub usa um Google Cloud agente de serviço para aceder ao Cloud KMS. O agente do serviço é mantido internamente pelo Pub/Sub para cada projeto e não é visível na página Contas de serviço na consola Google Cloud por predefinição.

O agente do serviço Pub/Sub tem o formato service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com.

O Pub/Sub requer autorizações específicas para encriptar e desencriptar dados através das CMEK.

Conclua os passos seguintes para configurar o acesso necessário:

  • Conceda ao agente de serviço do Pub/Sub a função de encriptar/desencriptar do CryptoKey do Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter).

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

    Substitua o seguinte:

    • CLOUD_KMS_KEY_NAME: o nome da chave do Cloud KMS.

      A chave tem o formato projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY.

      Um exemplo é projects/test-project/locations/us-central1/keyRings/test-keyring/cryptoKeys/test-key.

    • PROJECT_NUMBER: o número do projeto do projeto do Pub/Sub.

Para mais informações sobre a concessão de funções de IAM, consulte o artigo Conceder funções num recurso.

Configure um tópico com CMEK

Pode configurar a CMEK para um tópico através da Google Cloud consola ou da CLI gcloud.

Consola

Para criar um tópico com CMEK, siga estes passos:

  1. Na Google Cloud consola, aceda à página Tópicos do Pub/Sub.

    Aceder a Tópicos

  2. Clique em Criar tópico.

  3. No campo ID do tópico, introduza um ID para o tópico.

    Para mais informações sobre a atribuição de nomes a tópicos, consulte as diretrizes de nomenclatura.

  4. Para Encriptação, clique em Chave do Cloud KMS.

  5. Selecione o tipo de chave. Se não vir o menu pendente Selecionar uma chave gerida pelo cliente, certifique-se de que ativou a API Cloud KMS para o projeto.

  6. Clique em Criar tópico.

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. Para criar um tópico com CMEK, execute o comando gcloud pubsub topics create:

        gcloud pubsub topics create TOPIC_ID --topic-encryption-key=ENCRYPTION_KEY
        

    Substitua o seguinte:

Atualize a CMEK para um tópico

Tem a flexibilidade de alterar a CMEK associada a um tópico do Pub/Sub. Pode usar a CLI gcloud para atualizar a CMEK. No entanto, esta alteração não se aplica retroativamente.

As mensagens publicadas no tópico antes da alteração da chave permanecem encriptadas com a chave original. Se um tópico foi criado sem uma CMEK, pode adicionar uma mais tarde. As mensagens existentes continuam a ser protegidas com a encriptação predefinida Google-owned and Google-managed encryption keys. A alteração da CMEK de um tópico não volta a encriptar as mensagens publicadas anteriormente. Estas mensagens continuam a estar protegidas com a chave com a qual foram originalmente encriptadas.

O Pub/Sub tem um mecanismo de colocação em cache para chaves que dura aproximadamente 5 minutos. Pode demorar até esta duração para que o Pub/Sub reconheça e comece a usar a nova versão da chave.

Registos de auditoria

O Cloud KMS produz registos de auditoria quando as chaves são ativadas, desativadas ou usadas pelo Pub/Sub para encriptar e desencriptar mensagens. Isto é útil para depurar problemas com a disponibilidade de publicação ou fornecimento.

As chaves do Cloud KMS estão associadas aos registos de auditoria dos recursos de tópicos do Pub/Sub. O Pub/Sub não inclui outras informações relacionadas com o Cloud KMS.

Preços e custo

Para os seguintes pedidos do Pub/Sub, a utilização de CMEK incorre em custos de acesso ao serviço Cloud KMS com base nos preços do Pub/Sub:

  • Para cada tópico que usa CMEK, é encriptada e armazenada uma nova DEK a cada seis horas.

  • A chave é usada para desencriptar DEKs a cada seis minutos. A desencriptação ocorre três vezes, uma para cada zona na região onde o serviço Pub/Sub é executado.

Por exemplo, considere um tópico com:

  • Pelo menos, uma subscrição

  • Clientes publicadores e subscritores na mesma região

O número de operações criptográficas do Cloud KMS pode ser estimado da seguinte forma:

1 key access for ENCRYPT * (30 days / month * 24 hours / day) / 6 hours
 + 3 key accesses for DECRYPT
   * (30 days / month * 24 hours / day * 60 minutes / hour ) / 6 minutes
   = 21,720 Cloud KMS key access events
Tendo em conta uma estrutura de preços em que as operações criptográficas custam 0,03 USD por 10 000 operações, a utilização acima custaria aproximadamente 0,07 USD. Consulte os preços do Cloud KMS para ver as informações de preços mais atuais.

Na prática, as chaves podem ser obtidas com maior ou menor frequência, consoante os padrões de acesso. Use estes números apenas como estimativas.

Monitorização e resolução de problemas

Os problemas de acesso às chaves podem ter os seguintes efeitos:

  • Atrasos na entrega de mensagens

  • Erros de publicação

Monitorize os erros de publicação e de pedido de obtenção através das seguintes métricas, agrupadas por response_class e response_code:

  • topic/send_request_count
  • subscription/pull_request_count
  • subscription/streaming_pull_response_count

A resposta StreamingPull tem uma taxa de erro de 100%. Isto indica que o stream terminou e não que os pedidos estão a falhar. Para monitorizar o StreamingPull, procure o FAILED_PRECONDITION código de resposta.

A publicação e a entrega de mensagens podem falhar com erros FAILED_PRECONDITION por vários motivos.

Para subscrições push, não existe forma de detetar diretamente problemas de entrega específicos da CMEK. Em alternativa:

  • Monitorize o tamanho e a antiguidade da lista de pendências de uma subscrição push através de subscription/num_unacked_messages.

  • Monitorize subscription/oldest_unacked_message_age para detetar picos invulgares.

  • Use erros de publicação e registos de auditoria da CMEK para detetar problemas.

Desativar e reativar chaves

Existem duas formas de impedir que o Pub/Sub desencripte os dados das suas mensagens:

  • Recomendado: desative a chave do Cloud KMS que associou ao tópico através do Pub/Sub. Esta abordagem afeta apenas os tópicos e as subscrições do Pub/Sub que estão associados a essa chave específica.

  • Revogue a função encriptar/desencriptar do CryptoKey do Pub/Sub da conta de serviço do Pub/Sub (service-$PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com) através do IAM. Esta abordagem afeta todos os tópicos do Pub/Sub do projeto e as subscrições que contêm mensagens encriptadas através da CMEK.

Embora nenhuma das operações confirme a revogação instantânea do acesso, as alterações do IAM propagam-se geralmente mais rapidamente. Para saber mais, consulte os artigos Consistência dos recursos do Cloud KMS e Propagação das alterações de acesso.

Quando o Pub/Sub não consegue aceder a uma chave do Cloud KMS, a publicação e a entrega de mensagens com StreamingPull ou pull falham com erros FAILED_PRECONDITION. A entrega de mensagens a endpoints push é interrompida. Para retomar o fornecimento e a publicação, restaure o acesso à chave do Cloud KMS.

Assim que a chave do Cloud KMS estiver acessível ao Pub/Sub, a publicação fica disponível no prazo de 12 horas e a entrega de mensagens é retomada no prazo de 2 horas.

Embora as indisponibilidades intermitentes de menos de um minuto do Cloud KMS tenham pouca probabilidade de interromper significativamente a publicação e a entrega, a indisponibilidade prolongada do Cloud KMS tem o mesmo efeito que a revogação de chaves.