Configurar a criptografia de mensagens

Por padrão, o Pub/Sub criptografa o conteúdo do cliente em repouso. O Pub/Sub executa a criptografia, e você não precisa fazer nada. Essa opção é chamada de criptografia padrão do Google.

Se você quiser controlar suas chaves de criptografia, use chaves de criptografia gerenciadas pelo cliente (CMEKs) no Cloud KMS com serviços integrados a CMEKs, incluindo o Pub/Sub. Ao usar chaves do Cloud KMS, é possível controlar o nível de proteção, o local, a programação de rotação, as permissões de uso e acesso e os limites criptográficos. Com o Cloud KMS, também é possível visualizar registros de auditoria e controlar ciclos de vida de chaves. Em vez de o Google ser proprietário e gerente de chaves de criptografia de chaves (KEKs) simétricas que protegem seus dados, você controla e gerencia essas chaves no Cloud KMS.

Depois de configurar os recursos com CMEKs, a experiência de acesso aos recursos do Pub/Sub é semelhante à criptografia padrão do Google. Para saber mais sobre suas opções de criptografia, consulte Chaves de criptografia gerenciadas pelo cliente (CMEK).

Como a CMEK funciona com o Pub/Sub

Quando você configura o Pub/Sub com a 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:

Padrão de criptografia de envelope

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.

Configurar a CMEK com o Pub/Sub

É possível configurar a CMEK manualmente ou usando a chave automática.

Antes de começar

É possível configurar a CMEK para o Pub/Sub usando o console Cloud de Confiance 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 Criar um keyring e Criar uma chave.

Papéis e permissões necessárias

O Pub/Sub usa um Cloud de Confiance 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 Cloud de Confiance 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 Identity and Access Management, consulte Conceder papéis em um recurso.

Configurar um tópico manualmente com CMEK

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

Console

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

  1. No console Cloud de Confiance , 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 um tópico da CMEK manualmente

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 5 minutos. Pode levar até esse período para que o Pub/Sub reconheça e comece a usar a nova versão da chave.

Configurar um tópico com o Cloud KMS Autokey

Para mais informações sobre como usar o Cloud KMS Autokey com o Pub/Sub, consulte Cloud KMS com Autokey.

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.