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:
- Mantém as mensagens criptografadas em links internos do data center.
- Ativa chaves de criptografia gerenciadas pelo cliente (CMEK).
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:
No console Trusted Cloud , acesse a página Tópicos do Pub/Sub.
Selecione Criar tópico.
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.
Em Criptografia, clique em Chave do Cloud KMS.
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.
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:
-
TOPIC_ID: o ID ou nome do tópico.
Para mais informações sobre como nomear um tópico, consulte Diretrizes para nomear um tópico, uma assinatura, um esquema ou um snapshot.
-
ENCRYPTION_KEY: ID da CMEK a ser usada para o tópico.
O formato é
projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY
.
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.
A chave do Cloud KMS pode estar desativada. Para mais detalhes, consulte Como desativar e reativar chaves nesta página.
Se você estiver usando chaves gerenciadas externamente pelo Cloud EKM, consulte a referência de erros do Cloud EKM.
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.