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:
-
- 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 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:
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 não encontrar a opção Selecione uma conta de cliente gerenciada key, verifique se você 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 no 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 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
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 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.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 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.