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 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 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 CLI do Google Cloud.

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

Papéis e permissões 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 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 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.

      Por 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 Conceder 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 a 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 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 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. 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 alterar a CMEK vinculada a um tópico do Pub/Sub. Use a CLI gcloud para atualizar o 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 foi criado sem uma CMEK, é possível adicionar uma depois. As mensagens atuais continuam protegidas com a criptografia padrão gerenciada pelo Google. Alterar a CMEK de um tópico não recriptografa os publicados anteriormente mensagens. 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 duram 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.

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

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