Configurar a criptografia de mensagens

Este documento explica como configurar chaves de criptografia gerenciadas pelo cliente (CMEK) para o Pub/Sub.

O Pub/Sub criptografa mensagens com Google Cloud-powered encryption keys por padrão. Nenhuma configuração adicional é necessária para usar o Google Cloud-powered encryption keys.

Sobre a CMEK

As CMEKs são chaves de criptografia de sua propriedade, 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 gerenciar 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:

  • Em repouso

    • Camada de hardware
    • Camada de infraestrutura
    • Camada do aplicativo
  • A caminho

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 consoleTrusted 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.

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

O Pub/Sub usa um Trusted Cloud agente de serviço 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 no console Trusted Cloud por padrão.

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

O Pub/Sub exige permissões específicas para criptografar e descriptografar dados usando a 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 chave criptografada 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.s3ns-system.iam.gserviceaccount.com \
        --role=roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    Substitua:

    • CLOUD_KMS_KEY_NAME: o nome da chave do Cloud KMS.

      A chave está no formato projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY.

      Por 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 CMEK

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

Console

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

  1. No console Trusted 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 vir o menu suspenso Selecionar uma chave gerenciada pelo cliente, verifique se ativou a API Cloud KMS para o projeto.

  6. Selecione Criar tópico.

gcloud

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 a CMEK para um tópico

Você tem a flexibilidade de mudar a CMEK vinculada a um tópico do Pub/Sub. É possível usar a CLI gcloud para atualizar a CMEK. No entanto, essa mudança não é retroativa.

As mensagens publicadas no tópico antes da mudança de chave permanecem criptografadas com a chave original. Se um tópico foi criado sem uma CMEK, é possível adicionar uma depois. As mensagens atuais continuam protegidas com oGoogle Cloud-powered encryption keyspadrão. A mudança da CMEK de um tópico não criptografa novamente as mensagens publicadas anteriormente. Essas mensagens continuam sendo protegidas com a chave usada na criptografia original.

O Pub/Sub tem um mecanismo de 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.

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.s3ns-system.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 seja improvável que interrupções intermitentes de menos de um minuto no Cloud KMS interrompam significativamente a publicação e a entrega, a indisponibilidade prolongada do Cloud KMS tem o mesmo efeito que a revogação da chave.