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 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:

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 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:

  1. Na Google Cloud 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

  1. In the Google Cloud console, activate Cloud Shell.

    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.

  2. 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-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
Tendo em conta uma estrutura de preços em que as operações criptográficas custam 0,03 USD por 10 000 operações, a utilização acima custaria aproximadamente 0,07 USD. Consulte os preços do Cloud KMS para ver as informações de preços mais atuais.

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.

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.