Configurar a criptografia de mensagens

Neste documento, explicamos como configurar a criptografia gerenciada pelo cliente (CMEK) para o Pub/Sub.

O Pub/Sub criptografa as mensagens Chaves de propriedade e gerenciadas pelo Google por padrão. Nenhuma configuração adicional é necessária para usar chaves de criptografia gerenciadas pelo Google.

Sobre a CMEK

CMEKs são chaves de criptografia de sua propriedade que são gerenciadas e armazenadas o Cloud Key Management Service (Cloud KMS). Se você precisar de mais controle de criptografia de dados usadas para proteger o Pub/Sub é possível usar as CMEKs. Algumas organizações também exigem o uso de CMEKs.

As CMEKs oferecem controle total sobre as chaves de criptografia, permitindo ciclo de vida, rotação e políticas de acesso. Ao configurar no Pub/Sub com uma CMEK, o serviço criptografa automaticamente todos os dados usando a chave especificada. o uso do Cloud KMS para A 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 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 da entrega aos assinantes.

Antes de começar

É possível configurar a CMEK para o Pub/Sub usando a 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. Chaves e chaves anéis não podem ser excluídos.

Para obter 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.

Permissões e papéis necessários para configurar a CMEK

O Pub/Sub usa uma Google Cloud agente de serviço para acessar o Cloud KMS. O agente de serviço é mantido internamente no Pub/Sub de cada projeto e não está visível na a página Contas de serviço no 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 requer permissões específicas para criptografar e descriptografar dados usando CMEK.

Conclua as etapas a seguir para configurar o acesso necessário:

  • Conceda ao agente de serviço do Pub/Sub Criptografador/descriptografador de chaves criptográficas 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 Projeto do Pub/Sub.

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

Configurar um tópico com a CMEK

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

Console

Para criar um tópico com a 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 Código do tópico, insira um código 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 não encontrar a opção Selecione uma conta de cliente gerenciada key, verifique se você ativou a API Cloud KMS para o projeto.

  6. Selecione Criar tópico.

gcloud

  1. No Console do Google Cloud, ative o Cloud Shell.

    Ativar o Cloud Shell

    Na parte inferior do Console do Google Cloud, uma sessão do Cloud Shell é iniciada e exibe um prompt de linha de comando. O Cloud Shell é um ambiente shell com a CLI do Google Cloud já instalada e com valores já definidos para o projeto atual. A inicialização da sessão pode levar alguns segundos.

  2. Para criar um tópico com a 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 alterar a CMEK vinculada a um tópico do Pub/Sub. É possível usar CLI gcloud para atualizar a CMEK. No entanto, essa mudança não é aplicada de forma retroativa.

As mensagens publicadas no tópico antes das mudanças principais permanecem criptografadas com a chave original. Se um tópico tiver sido criado sem uma CMEK, será possível adicionar uma mais tarde. As mensagens existentes continuam protegidas com o padrão gerenciado pelo Google criptografia. Alterar a CMEK de um tópico não recriptografa os publicados anteriormente e envio de mensagens. Essas mensagens continuam protegidas com a chave com a qual foram criptografados originalmente.

O Pub/Sub tem um mecanismo de armazenamento em cache para chaves que duram aproximadamente 5 minutos. Pode levar até essa duração para Pub/Sub para reconhecer e começar 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
Com uma estrutura de preços em que as operações criptográficas custa US $0,03 por 10.000 operações, o uso acima custaria aproximadamente US $0,07. Consulte os preços do Cloud KMS para conhecer as informações sobre preços.

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.

Nenhuma das operações confirma a revogação do acesso instantâneo, As alterações do IAM geralmente se propagam 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.

Embora as interrupções intermitentes de menos de um minuto para o Cloud KMS muito provavelmente interromper significativamente a publicação e a entrega, o Cloud KMS estendido e indisponibilidade tem o mesmo efeito que a revogação de chaves.