Este documento discute como configurar chaves de criptografia gerenciadas pelo cliente (CMEK, na sigla em inglês) para o Pub/Sub.
O Pub/Sub criptografa mensagens com chaves de propriedade e gerenciadas pelo Google por padrão. Não é necessária nenhuma configuração extra para usar chaves de criptografia gerenciadas pelo Google.
Sobre a CMEK
As CMEKs são chaves de criptografia que você possui e são 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 que você gerencie 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:
-
- Camada de hardware
- Camada de infraestrutura
- Camada do aplicativo
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 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. 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.
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 um agente de serviço do Google Cloud 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 do 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 o papel de criptografador/descriptografador de CryptoKey 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 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 o 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 CMEK, siga estas etapas:
No Console do Google 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 encontrar a lista suspensa Selecionar uma chave gerenciada pelo cliente, verifique se ativou a API Cloud KMS para o projeto.
Selecione Criar tópico.
gcloud
-
In the Google Cloud console, 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.
-
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 CMEK para um tema
Você tem a flexibilidade de mudar o CMEK vinculado a um tópico do Pub/Sub. Use a CLI gcloud para atualizar o CMEK. No entanto, essa mudança não é aplicada retroativamente.
As mensagens publicadas no tópico antes das mudanças na chave permanecem criptografadas com a chave original. Se um tópico foi criado sem uma CMEK, você pode adicionar uma depois. As mensagens atuais continuam protegidas com a criptografia padrão gerenciada pelo Google. Mudar o CMEK de um tópico não criptografa novamente as mensagens publicadas anteriormente. 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 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.
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
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.
A chave do Cloud KMS pode ser 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.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 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.