Configurar a criptografia de mensagens

Este documento discute como configurar chaves de criptografia gerenciadas pelo cliente (CMEK, na sigla em inglês) para o Pub/Sub.

O Pub/Sub criptografa mensagens com chaves de propriedade e gerenciadas pelo Google por padrão. Não é necessária nenhuma configuração extra para usar chaves de criptografia gerenciadas pelo Google.

Sobre a CMEK

As CMEKs são chaves de criptografia que você possui e são gerenciadas e armazenadas no Cloud Key Management Service (Cloud KMS). Se você precisar de mais controle sobre as chaves de criptografia usadas para proteger os dados do Pub/Sub, use as CMEKs. Algumas organizações também exigem o uso de CMEKs.

As CMEKs oferecem controle total sobre as chaves de criptografia, permitindo que você gerencie o ciclo de vida, a rotação e as políticas de acesso delas. Quando você configura o Pub/Sub com uma CMEK, o serviço criptografa automaticamente todos os dados usando a chave especificada. O uso do Cloud KMS para CMEK pode gerar custos adicionais, dependendo dos seus padrões de uso.

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

Na camada do aplicativo, o Pub/Sub criptografa individualmente as mensagens recebidas assim que elas chegam. Essa implementação adiciona os seguintes recursos:

CMEK para o Pub/Sub

O Pub/Sub usa o padrão de criptografia de envelope com o CMEK. Nessa abordagem, as mensagens não são criptografadas pelo Cloud KMS. Em vez disso, o Cloud KMS é usado para criptografar chaves de criptografia de dados (DEKs, na sigla em inglês) criadas pelo Pub/Sub para cada tópico. Essas DEKs são armazenadas apenas em formato criptografado ou agrupado pelo Pub/Sub. Antes de armazenar uma DEK, o serviço a envia para o Cloud KMS para ser criptografada com a chave de criptografia de chaves (KEK, na sigla em inglês) especificada no tópico. Uma nova DEK é gerada para cada tópico aproximadamente a cada seis horas.

Antes de o Pub/Sub publicar mensagens em uma assinatura, ele as criptografa usando a DEK mais recente que foi gerada para o tópico. O Pub/Sub descriptografa as mensagens pouco antes de elas serem entregues aos assinantes.

Antes de começar

É possível configurar a CMEK para o Pub/Sub usando o Console do Google Cloud ou a Google Cloud CLI.

Realize as tarefas a seguir:

  • Ative a API Cloud KMS.

  • Crie um keyring e uma chave no Cloud KMS. As chaves e os keyrings não podem ser excluídos.

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

Como os recursos do Pub/Sub são globais, é altamente recomendável que você use chaves globais do Cloud KMS para configurar tópicos compatíveis com a CMEK. Dependendo da localização dos editores e assinantes de um tópico, o uso de uma chave regional do Cloud KMS pode introduzir dependências desnecessárias em links de rede entre regiões.

Papéis e permissões necessários para configurar a CMEK

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

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

O Pub/Sub exige permissões específicas para criptografar e descriptografar dados usando o CMEK.

Siga estas etapas para configurar o acesso necessário:

  • Conceda ao agente de serviço do Pub/Sub o papel de criptografador/descriptografador de 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:

    • 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 Pub/Sub.

Para mais informações sobre como conceder papéis do IAM, consulte Conceder papéis em um recurso.

Configurar um tópico com o CMEK

É possível configurar a CMEK para um tópico usando o console do Google Cloud ou a CLI gcloud.

Console

Para criar um tópico com CMEK, siga estas etapas:

  1. No Console do Google Cloud, acesse a página Tópicos do Pub/Sub.

    Acesse Tópicos

  2. Selecione Criar tópico.

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

    Para mais informações sobre como nomear tópicos, consulte as diretrizes de nomenclatura.

  4. Em Criptografia, clique em Chave do Cloud KMS.

  5. Selecione o tipo de chave. Se você não encontrar a lista suspensa Selecionar uma chave gerenciada pelo cliente, verifique se ativou a API Cloud KMS para o projeto.

  6. Selecione 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:

Atualizar CMEK para um tema

Você tem a flexibilidade de mudar o CMEK vinculado a um tópico do Pub/Sub. Use a CLI gcloud para atualizar o CMEK. No entanto, essa mudança não é aplicada retroativamente.

As mensagens publicadas no tópico antes das mudanças na chave permanecem criptografadas com a chave original. Se um tópico foi criado sem uma CMEK, você pode adicionar uma depois. As mensagens atuais continuam protegidas com a criptografia padrão gerenciada pelo Google. Mudar o CMEK de um tópico não criptografa novamente as mensagens publicadas anteriormente. Essas mensagens continuam protegidas com a chave com que foram criptografadas originalmente.

O Pub/Sub tem um mecanismo de armazenamento em cache para chaves que dura aproximadamente cinco minutos. Pode levar até esse período para que o Pub/Sub reconheça e comece a usar a nova versão da chave.

Registros de auditoria

O Cloud KMS produz registros de auditoria quando as chaves são ativadas, desativadas ou usadas pelo Pub/Sub para criptografar e descriptografar mensagens. Isso é útil na depuração de problemas com a disponibilidade de publicação ou entrega.

As chaves do Cloud KMS são anexadas a registros de auditoria para recursos de tópicos do Pub/Sub. O Pub/Sub não inclui nenhuma outra informação relacionada ao Cloud KMS.

Preços e custo

Para as seguintes solicitações de Pub/Sub, o uso da CMEK gera cobranças pelo acesso ao serviço do Cloud KMS com base nos preços do Pub/Sub:

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

  • A chave é usada para descriptografar as DEKs a cada seis minutos. A descriptografia acontece três vezes, uma vez para cada zona na região em que o serviço do Pub/Sub é executado.

Por exemplo, considere um tópico com:

  • pelo menos uma assinatura;

  • clientes editores e assinantes na mesma região.

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

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
Dada uma estrutura de preços em que as operações criptográficas custam US $0,03 por 10.000 operações, o uso excedente custaria aproximadamente US $0,07. Clique aqui para as informações de preços mais atuais.

Na prática, as chaves podem ser buscadas com maior ou menor frequência, dependendo dos padrões de acesso. Use esses números apenas como estimativas.

Monitoramento e solução de problemas

Os problemas com o acesso às chaves podem ter os efeitos a seguir:

  • Atrasos na entrega de mensagens

  • Erros de publicação

Monitore erros de solicitação de publicação e envio usando as métricas a seguir, 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%. Essa é uma indicação de que o fluxo foi finalizado, não de que as solicitações estão falhando. Para monitorar o StreamingPull, procure o código de resposta FAILED_PRECONDITION.

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

Para assinaturas de push, não há como detectar diretamente problemas de entrega específicos da CMEK. Em vez disso:

  • monitore o tamanho e a idade do acúmulo de uma assinatura de push usando subscription/num_unacked_messages;

  • monitore subscription/oldest_unacked_message_age para picos incomuns;

  • use erros de publicação e registros de auditoria da CMEK para identificar problemas.

Como desativar e reativar as chaves

Há duas maneiras de impedir que o Pub/Sub descriptografe os dados da sua mensagem:

  • Recomendado: desative a chave do Cloud KMS que você associou ao tópico usando o Pub/Sub. Essa abordagem afeta somente os tópicos e as assinaturas do Pub/Sub associados a essa chave específica.

  • Revogue o papel Criptografador/Descriptografador do Pub/Sub CryptoKey da conta de serviço do Pub/Sub (service-$PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com) usando o IAM. Essa abordagem afeta todos os tópicos do Pub/Sub do projeto e as assinaturas que contêm mensagens criptografadas usando a CMEK.

Embora nenhuma das operações confirme a revogação instantânea do acesso, as mudanças do IAM geralmente são propagadas mais rapidamente. Para saber mais, consulte Consistência de recursos do Cloud KMS e Propagação de alterações no acesso.

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

Depois que a chave do Cloud KMS estiver acessível para o Pub/Sub, a publicação estará disponível em 12 horas, e a entrega da mensagem será retomada em até 2 horas.

Embora interrupções intermitentes de menos de um minuto do Cloud KMS não interrompam significativamente a publicação e a entrega, a indisponibilidade estendida do Cloud KMS tem o mesmo efeito que a revogação da chave.