Por predefinição, o Pub/Sub encripta o conteúdo do cliente em repouso. O Pub/Sub processa a encriptação por si sem ações adicionais da sua parte. Esta opção chama-se Encriptação predefinida da Google.
Se quiser controlar as suas chaves de encriptação, pode usar chaves de encriptação geridas pelo cliente (CMEK) no Cloud KMS com serviços integrados com CMEK, incluindo o Pub/Sub. A utilização de chaves do Cloud KMS dá-lhe controlo sobre o respetivo nível de proteção, localização, programação de rotação, utilização, autorizações de acesso e limites criptográficos. A utilização do Cloud KMS também permite monitorizar a utilização das chaves, ver registos de auditoria e controlar os ciclos de vida das chaves. Em vez de a Google possuir e gerir as chaves de encriptação de chaves (KEKs) simétricas que protegem os seus dados, controla e gere estas chaves no Cloud KMS.
Depois de configurar os seus recursos com CMEKs, a experiência de acesso aos seus recursos do Pub/Sub é semelhante à utilização da encriptação predefinida da Google. Para mais informações acerca das suas opções de encriptação, consulte o artigo Chaves de encriptação geridas pelo cliente (CMEK).
CMEK com chave automática do Cloud KMS
Pode criar CMEKs manualmente para proteger os seus recursos do Pub/Sub ou usar a chave automática do Cloud KMS. Com a Autokey, os conjuntos de chaves e as chaves são gerados a pedido como parte da criação de recursos no Pub/Sub. Os agentes de serviço que usam as chaves para operações de encriptação e desencriptação são criados se ainda não existirem e recebem as funções de gestão de identidade e de acesso (IAM) necessárias. Para mais informações, consulte a vista geral do Autokey.
Como funciona a CMEK com o Pub/Sub
Quando configura o Pub/Sub com a CMEK, o serviço encripta automaticamente todos os dados com a chave especificada. A utilização do Cloud KMS para CMEK pode incorrer em custos adicionais consoante os seus padrões de utilização.
Todas as mensagens são encriptadas nos seguintes estados e camadas:
-
- Camada de hardware
- Camada de infraestrutura
- Camada de aplicação
Na camada de aplicação, o Pub/Sub encripta individualmente as mensagens recebidas assim que são recebidas. Esta implementação adiciona as seguintes funcionalidades:
- Mantém as mensagens encriptadas em links internos do centro de dados
- Ativa as chaves de encriptação geridas pelo cliente (CMEK)
Padrão de encriptação de envelope
O Pub/Sub usa o padrão de encriptação em envelope com CMEK. Nesta abordagem, as mensagens não são encriptadas pelo Cloud KMS. Em alternativa, o Cloud KMS é usado para encriptar as chaves de encriptação de dados (DEKs) criadas pelo Pub/Sub para cada tópico. Estas DEKs são armazenadas apenas de forma encriptada ou protegida pelo Pub/Sub. Antes de armazenar uma DEK, o serviço envia a DEK para o Cloud KMS para ser encriptada com a chave de encriptação de chaves (KEK) especificada no tópico. É gerada uma nova DEK para cada tópico aproximadamente a cada seis horas.
Antes de o Pub/Sub publicar mensagens numa subscrição, este encripta-as através da DEK mais recente que foi gerada para o tópico. O Pub/Sub desencripta as mensagens pouco antes de serem entregues aos subscritores.
Configure as CMEK com o Pub/Sub
Pode configurar a CMEK manualmente ou através do Autokey.
Antes de começar
Pode configurar a CMEK para o Pub/Sub através da Google Cloud consola ou da CLI do Google Cloud.
Conclua as seguintes tarefas:
Ative a API Cloud KMS.
Crie um conjunto de chaves e uma chave no Cloud KMS. Não é possível eliminar chaves nem conjuntos de chaves.
Para obter instruções sobre como realizar estas tarefas, crie um conjunto de chaves e crie uma chave.
Uma vez que os recursos do Pub/Sub são globais, recomendamos vivamente que use chaves do Cloud KMS globais para configurar tópicos com CMEK ativada. Consoante as localizações dos publicadores e subscritores de um tópico, a utilização de uma chave do Cloud KMS regional pode introduzir dependências desnecessárias em links de rede entre regiões.
Funções e autorizações necessárias
O Pub/Sub usa um Google Cloud agente de serviço para aceder ao Cloud KMS. O agente do serviço é mantido internamente pelo Pub/Sub para cada projeto e não é visível na página Contas de serviço na consola Google Cloud por predefinição.
O agente do serviço Pub/Sub tem o formato
service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com
.
O Pub/Sub requer autorizações específicas para encriptar e desencriptar dados através das CMEK.
Conclua os passos seguintes para configurar o acesso necessário:
Conceda ao agente de serviço do Pub/Sub a função de encriptador/desencriptador 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 o seguinte:
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 a concessão de funções de gestão de identidades e acessos, consulte o artigo Conceder funções num recurso.
Configure um tópico manualmente com a CMEK
Pode configurar manualmente a CMEK para um tópico através da Google Cloud consola ou da CLI gcloud.
Consola
Para criar um tópico com CMEK, siga estes passos:
Na Google Cloud consola, aceda à página Tópicos do Pub/Sub.
Clique em Criar tópico.
No campo ID do tópico, introduza um ID para o seu tópico.
Para mais informações sobre a atribuição de nomes a tópicos, consulte as diretrizes de nomenclatura.
Para Encriptação, clique em Chave do Cloud KMS.
Selecione o tipo de chave. Se não vir o menu pendente Selecionar uma chave gerida pelo cliente, certifique-se de que ativou a API Cloud KMS para o projeto.
Clique em 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 o seguinte:
-
TOPIC_ID: o ID ou o nome do tópico.
Para mais informações sobre como atribuir um nome a um tópico, consulte as diretrizes para atribuir um nome a um tópico, uma subscrição, um esquema ou uma captura instantânea.
-
ENCRYPTION_KEY: ID da CMEK a usar para o tópico.
O formato é
projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY
.
-
Atualize um tópico CMEK manualmente
Tem a flexibilidade de alterar a CMEK associada a um tópico do Pub/Sub. Pode usar a CLI gcloud para atualizar a CMEK. No entanto, esta alteração não se aplica retroativamente.
As mensagens publicadas no tópico antes da alteração da chave permanecem encriptadas com a chave original. Se um tópico foi criado sem uma CMEK, pode adicionar uma mais tarde. As mensagens existentes continuam a ser protegidas com a encriptação predefinida Google-owned and Google-managed encryption keys. A alteração da CMEK de um tópico não volta a encriptar as mensagens publicadas anteriormente. Estas mensagens continuam a estar protegidas com a chave com a qual foram originalmente encriptadas.
O Pub/Sub tem um mecanismo de colocação em cache para chaves que dura aproximadamente 5 minutos. O Pub/Sub pode demorar até este período a reconhecer e começar a usar a nova versão da chave.
Configure um tópico com a chave automática do Cloud KMS
Para mais informações sobre a utilização da chave automática do Cloud KMS com o Pub/Sub, consulte o artigo Cloud KMS com chave automática.
Registos de auditoria
O Cloud KMS produz registos de auditoria quando as chaves são ativadas, desativadas ou usadas pelo Pub/Sub para encriptar e desencriptar mensagens. Isto é útil na depuração de problemas com a disponibilidade de publicação ou fornecimento.
As chaves do Cloud KMS estão associadas aos registos de auditoria dos recursos de tópicos do Pub/Sub. O Pub/Sub não inclui outras informações relacionadas com o Cloud KMS.
Preços e custo
Para os seguintes pedidos do Pub/Sub, a utilização de CMEK incorre em custos de acesso ao serviço Cloud KMS com base nos preços do Pub/Sub:
Para cada tópico que usa CMEK, é encriptada e armazenada uma nova DEK a cada seis horas.
A chave é usada para desencriptar DEKs a cada seis minutos. A desencriptação ocorre três vezes, uma vez para cada zona na região onde o serviço Pub/Sub é executado.
Por exemplo, considere um tópico com:
Pelo menos, uma subscrição
Clientes publicadores e subscritores na mesma região
O número de operações criptográficas do Cloud KMS pode ser estimado da seguinte forma:
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 obtidas com maior ou menor frequência, consoante os padrões de acesso. Use estes números apenas como estimativas.
Monitorização e resolução de problemas
Os problemas com o acesso à chave podem ter os seguintes efeitos:
Atrasos na entrega de mensagens
Erros de publicação
Monitorize os erros de publicação e de pedido de obtenção através das seguintes métricas, 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%. Isto indica que o stream terminou e não que os pedidos estão a falhar. Para monitorizar o StreamingPull, procure o FAILED_PRECONDITION
código de resposta.
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 ver detalhes, consulte a secção Desativar e reativar chaves nesta página.
Se estiver a usar chaves geridas externamente através do Cloud EKM, consulte a referência de erros do Cloud EKM.
Para subscrições push, não existe forma de detetar diretamente problemas de entrega específicos da CMEK. Em alternativa:
Monitorize o tamanho e a antiguidade da lista de pendências de uma subscrição push através de
subscription/num_unacked_messages
.Monitorize
subscription/oldest_unacked_message_age
para detetar picos invulgares.Use erros de publicação e registos de auditoria da CMEK para detetar problemas.
Desativar e reativar chaves
Existem duas formas de impedir que o Pub/Sub desencripte os dados das suas mensagens:
Recomendado: desative a chave do Cloud KMS que associou ao tópico através do Pub/Sub. Esta abordagem afeta apenas os tópicos e as subscrições do Pub/Sub que estão associados a essa chave específica.
Revogue a função encriptar/desencriptar do CryptoKey do Pub/Sub da conta de serviço do Pub/Sub (
service-$PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com
) através do IAM. Esta abordagem afeta todos os tópicos do Pub/Sub do projeto e as subscrições que contêm mensagens encriptadas através da CMEK.
Embora nenhuma das operações confirme a revogação instantânea do acesso, as alterações do IAM propagam-se geralmente mais rapidamente. Para saber mais, consulte os artigos Consistência dos recursos do Cloud KMS e Propagação das alterações de acesso.
Quando o Pub/Sub não consegue aceder a uma chave do Cloud KMS, a publicação e a entrega de mensagens com StreamingPull ou pull falham com erros FAILED_PRECONDITION
. A entrega de mensagens a pontos finais push vai parar. Para
retomar o fornecimento e a publicação,
restaure o acesso à chave do
Cloud KMS.
Assim que a chave do Cloud KMS estiver acessível ao Pub/Sub, a publicação fica disponível no prazo de 12 horas e a entrega de mensagens é retomada no prazo de 2 horas.
Embora as indisponibilidades intermitentes de menos de um minuto do Cloud KMS tenham pouca probabilidade de interromper significativamente a publicação e a entrega, a indisponibilidade prolongada do Cloud KMS tem o mesmo efeito que a revogação de chaves.