Como configurar a criptografia de mensagens

Por padrão, o Pub/Sub criptografa mensagens com chaves de criptografia gerenciadas pelo Google. Não é necessário realizar nenhuma configuração ou instalação. Também não é necessário acessar o serviço de outra maneira. Toda mensagem é criptografada 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:

Como usar chaves de criptografia gerenciadas pelo cliente

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.

O Pub/Sub usa uma conta de serviço do Google Cloud para acessar o Cloud KMS. A conta de serviço é mantida internamente pelo Pub/Sub para cada projeto e não ficará visível em sua lista de contas de serviço. A conta de serviço tem o formato service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com. Para que o recurso de CMEK funcione, é necessário conceder a esta conta o papel Criptografador/Descriptografador do Cloud KMS CryptoKey no Identity and Access Management.

Como configurar tópicos

É possível configurar a CMEK usando o console do Google Cloud ou a ferramenta de linha de comando gcloud. Para os pré-requisitos, você precisa ter:

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

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.

Use o console do Google Cloud

Use a caixa de diálogo de criação de tópicos do console do Google Cloud para adicionar suas chaves de criptografia. Consulte o guia de início rápido do console do Google Cloud para informações sobre como acessar essa caixa de diálogo.

Se você não vir a lista suspensa "Selecionar uma chave gerenciada por cliente",
         certifique-se de que ativou a API KMS para o projeto.

O console do Google Cloud

  • simplifica a configuração do IAM e garante que a conta de serviço do Pub/Sub tenha as permissões apropriadas;

  • permite configurar a criptografia na caixa de diálogo de criação de tópicos.

Como usar a linha de comando

Este exemplo ilustra como usar a Google Cloud CLI para configurar a CMEK em um tópico:


   # Grant the Pub/Sub service account the Cloud KMS CryptoKey
   # Encrypter/Decrypter role. This service account is different
   # from the service account you are using to authorize requests to Google Cloud.

   gcloud projects add-iam-policy-binding ${PROJECT_ID} --member=\
      "serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com" \
      --role='roles/cloudkms.cryptoKeyEncrypterDecrypter'

   # Create a topic that uses customer-managed encryption, using the
   # --topic-encryption-key argument to specify the Cloud KMS key to use
   # for protecting message data.

   KEY_ID=projects/${PROJECT_ID}/locations/global/keyRings/my-key-ring/cryptoKeys/my-crypto-key
   alias pubsub="gcloud pubsub"
   pubsub topics create $TOPIC_NAME --topic-encryption-key=$KEY_ID

   # Confirm that the topic is configured for customer-managed encryption,
   # indicated by the presence of the kmsKeyName specified on the topic.

   pubsub topics describe $TOPIC_NAME
     

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 pricing:

  • 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
Considerando uma estrutura de preços em que as operações criptográficas custam US $0,03 por 10.000 operações, o uso acima custaria aproximadamente US $0,07. Clique aqui para as informações de preços do Cloud KMS 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 metrics, 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 garanta a revogação do acesso instantâneo, as alterações do IAM geralmente são propagadas mais rapidamente. Para saber mais, consulte Consistência de recursos do Cloud KMS e Propagação da alteração de 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.

É improvável que as interrupções intermitentes de menos de um minuto no Cloud KMS interrompam significativamente a publicação e a entrega, mas a indisponibilidade prolongada do Cloud KMS tem o mesmo efeito que a revogação da chave.