Configure a encriptação de mensagens

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

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:

  • Em repouso

    • Camada de hardware
    • Camada de infraestrutura
    • Camada de aplicação
  • Em viagem

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:

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 Cloud de Confiance 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.

Funções e autorizações necessárias

O Pub/Sub usa um Cloud de Confiance 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 Cloud de Confiance por predefinição.

O agente do serviço Pub/Sub tem o formato service-${PROJECT_NUMBER}@gcp-sa-pubsub.s3ns-system.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.s3ns-system.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 Cloud de Confiance consola ou da CLI gcloud.

Consola

Para criar um tópico com CMEK, siga estes passos:

  1. Na Cloud de Confiance consola, aceda à página Tópicos do Pub/Sub.

    Aceda a Tópicos

  2. Clique em Criar tópico.

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

  4. Para Encriptação, clique em Chave do Cloud KMS.

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

  6. Clique em 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 o seguinte:

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

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.

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