Configurar a criptografia de mensagens

Este documento mostra como configurar chaves de criptografia gerenciadas pelo cliente (CMEK) para um cluster do Google Cloud Managed Service para Apache Kafka.

O Serviço Gerenciado para Apache Kafka criptografa mensagens em repouso com Google-owned and Google-managed encryption keys por padrão. Nenhuma configuração adicional é necessária para usar o Google-owned and Google-managed encryption keys.

Sobre a CMEK

As CMEKs são chaves de criptografia de sua propriedade, 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 em repouso do Managed Service para Apache Kafka, use as CMEKs.

Quando você configura um cluster do Serviço Gerenciado para Apache Kafka com uma CMEK, o serviço criptografa automaticamente todos os dados do cluster em repouso usando a chave especificada. O uso do Cloud KMS para CMEK pode gerar custos adicionais, dependendo dos seus padrões de uso.

Uma CMEK associada a um cluster do Serviço gerenciado para Apache Kafka é uma chave de criptografia de chaves (KEK). A KEK é usada para criptografar uma chave de criptografia de dados (DEK). A DEK é usada para ler e gravar dados em repouso em discos permanentes conectados a brokers e dados em armazenamento em camadas no Cloud Storage.

Para mais informações sobre a criptografia de disco, consulte Sobre a criptografia de disco. Para mais informações sobre criptografia no Cloud Storage, consulte Chaves de criptografia gerenciadas pelo cliente na documentação do Cloud Storage.

Alternar chaves

Para fazer isso, crie uma nova versão de chave e defina-a como principal para a chave.

Para os discos anexados aos brokers, a nova KEK só entra em vigor depois que um broker é reiniciado. É possível forçar uma reinicialização gradual dos brokers atualizando a configuração de capacidade de um cluster. Por exemplo, é possível mudar a quantidade de RAM do cluster.

Todos os novos arquivos de segmento de partição são gravados no armazenamento em camadas usando a nova versão da chave primária. Pode haver um atraso de vários minutos depois que uma nova versão da chave primária é escolhida.

Configurar o cluster do Serviço Gerenciado para Apache Kafka para CMEK

É possível configurar a CMEK para um cluster do serviço gerenciado para Apache Kafka usando o consoleGoogle Cloud ou a Google Cloud CLI.

Antes de começar

Realize as tarefas a seguir:

  • Ative a API Cloud KMS.

  • Crie um keyring e uma chave no Cloud KMS. Não é possível excluir chaves e keyrings. Como os recursos do Serviço gerenciado para Apache Kafka são regionais, recomendamos que você crie CMEKs na mesma região em que o cluster do Kafka está localizado.

Para instruções sobre como realizar essas tarefas, consulte o guia de início rápido do Cloud KMS.

Papéis e permissões necessários para configurar a CMEK

O Serviço gerenciado para Apache Kafka usa um Google Cloud agente de serviço para acessar o Cloud KMS. O agente de serviço do seu projeto Google Cloud é criado automaticamente depois que você cria seu primeiro cluster do Managed Service para Apache Kafka.

O agente de serviço é mantido internamente pelo Serviço Gerenciado para Apache Kafka em cada projeto e não fica visível na página Contas de serviço no console Google Cloud por padrão.

O agente de serviço do Serviço gerenciado para Apache Kafka tem o formato service-PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com.

O Serviço Gerenciado para Apache Kafka exige permissões específicas para criptografar e descriptografar dados usando a CMEK.

Siga estas etapas para configurar o acesso necessário:

  1. Opcional: crie o agente de serviço do serviço gerenciado para Apache Kafka manualmente usando o comando gcloud beta services identity create.

    Se você já tiver criado um cluster no projeto, o agente do Serviço gerenciado para Apache Kafka já estará criado, e você poderá pular esta etapa.

    gcloud beta services identity create \
        --service=managedkafka.googleapis.com \
        --project=PROJECT_ID
    

    Substitua PROJECT_ID pela ID do seu projeto.

  2. Conceda ao agente de serviço do Serviço gerenciado para Apache Kafka o papel de 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-managedkafka.iam.gserviceaccount.com \
        --role=roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    Substitua:

    • CLOUD_KMS_KEY_NAME: o nome da chave do Cloud KMS.

      A chave está no 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 Serviço Gerenciado para Apache Kafka.

Para mais informações sobre como conceder papéis do IAM, consulte Conceder papéis em um recurso.

Criar um cluster com CMEK

Use o console do Google Cloud ou a CLI gcloud para adicionar suas chaves de criptografia ao criar o cluster do Kafka.

Enable the Apache Kafka for BigQuery, Compute Engine, Cloud DNS, and Cloud KMS APIs.

Roles required to enable APIs

To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

Enable the APIs

Antes de criar um cluster, revise a documentação das propriedades do cluster.

Para criar um cluster com CMEK, siga estas etapas:

Console

  1. No Google Cloud console, acesse a página Clusters.

    Acessar Clusters

  2. Selecione Criar.

    A página Criar cluster do Kafka é aberta.

  3. Em Nome do cluster, insira uma string.

    Para mais informações sobre como nomear um cluster, consulte Diretrizes de nomeação de um recurso do Serviço gerenciado para Apache Kafka.

  4. Em Local, insira um local compatível.

    Para mais informações sobre os locais compatíveis, consulte Locais compatíveis com o Serviço gerenciado para Apache Kafka.

  5. Em Configuração de capacidade, insira valores para Memória e vCPUs.

    A proporção de vCPU para memória precisa estar entre 1:1 e 1:8.

    Para mais informações sobre como dimensionar um cluster do Serviço gerenciado para Apache Kafka, consulte Planejar o tamanho do cluster do Kafka.

  6. Em Configuração de rede, insira os seguintes detalhes:
    1. Projeto: o projeto em que a sub-rede está localizada. A sub-rede precisa estar na mesma região do cluster, mas o projeto pode ser diferente.
    2. Rede: a rede a que a sub-rede está conectada.
    3. Sub-rede: o nome da sub-rede.
    4. Caminho de URI da sub-rede: este campo é preenchido automaticamente. Ou insira o caminho da sub-rede aqui. O nome da sub-rede precisa estar no formato: projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_ID.
    5. Clique em Concluído.
  7. (Opcional) Adicione outras sub-redes clicando em Adicionar uma sub-rede conectada.

    É possível adicionar outras sub-redes, até um valor máximo de dez.

  8. Em Criptografia, selecione Chave do Cloud KMS.
  9. Em Tipo de chave, selecione Cloud KMS e, em Selecionar uma chave gerenciada pelo cliente, insira a CMEK que você criou.
  10. Clique em Criar.

gcloud

    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.

  1. Execute o comando gcloud managed-kafka clusters create:

    gcloud managed-kafka clusters create CLUSTER_ID \
        --location=LOCATION \
        --cpu=CPU \
        --memory=MEMORY \
        --subnets=SUBNETS \
        --encryption-key=CLOUD_KMS_KEY \

    Substitua:

    • CLUSTER_ID: o ID ou nome do cluster.

      Para mais informações sobre como nomear um cluster, consulte as diretrizes de nomeação de recursos do Serviço gerenciado para Apache Kafka.

    • LOCATION: o local do cluster.

      Para mais informações sobre os locais com suporte, consulte Locais com suporte do Serviço gerenciado para Apache Kafka.

    • CPU: o número de CPUs virtuais para o cluster. A proporção de vCPU para memória precisa ser entre 1:1 e 1:8.

      Para mais informações sobre como dimensionar um cluster do Serviço gerenciado para Apache Kafka, consulte Planejar o tamanho do cluster do Kafka.

    • MEMORY: a quantidade de memória para o cluster. Use as unidades "MB", "MiB", "GB", "GiB", "TB" ou "TiB". Por exemplo, "10GiB".

    • SUBNETS: a lista de sub-redes a serem conectadas. Use vírgulas para separar vários valores de sub-rede.

      O formato da sub-rede é projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_ID.

    • ENCRYPTION_KEY: ID da CMEK a ser usada para o cluster.

      O formato é projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY.

Confirmar a criação do cluster

Confirme se o cluster está configurado para CMEK executando o comando gcloud managed-kafka clusters describe.

gcloud managed-kafka clusters describe CLUSTER_ID \
    --location=LOCATION

A saída inclui a CMEK configurada.

Registros de auditoria

O Cloud KMS produz registros de auditoria quando as chaves são ativadas, desativadas ou usadas pelo Serviço gerenciado para Apache Kafka para criptografar e descriptografar mensagens. Isso é útil na depuração de problemas com a disponibilidade de publicação ou entrega.

Os IDs de chaves do Cloud KMS são anexados a registros de auditoria para recursos de cluster do Serviço Gerenciado para Apache Kafka. O Serviço gerenciado para Apache Kafka não inclui nenhuma outra informação relacionada ao Cloud KMS nos registros de auditoria.

Desativar e reativar a CMEK

Há duas maneiras de desativar a CMEK. Escolha um dos seguintes métodos:

  • Desative a chave do Cloud KMS que você associou ao cluster. Essa abordagem afeta todos os recursos do Cloud associados a essa chave.

  • Revogue o papel de criptografador/descriptografador de CryptoKey do agente de serviço do Serviço Gerenciado para Apache Kafka (service-${PROJECT_NUMBER}@gcp-sa-managedkafka.iam.gserviceaccount.com) usando o Identity and Access Management (IAM). Essa abordagem afeta todos os clusters do serviço gerenciado para Apache Kafka no projeto e as mensagens criptografadas usando a CMEK.

Embora nenhuma das operações cause a revogação instantânea do acesso, as mudanças do IAM geralmente são propagadas mais rapidamente.

Para mais informações, consulte Consistência de recursos do Cloud KMS e Propagação de mudanças no acesso.

Quando o Managed Service para Apache Kafka não consegue acessar uma chave do Cloud KMS, a publicação e a entrega de mensagens falham com erros. 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 ao Managed Service para Apache Kafka, a publicação estará disponível em 12 horas, e a entrega da mensagem será retomada em até 2 horas.

Embora seja improvável que interrupções intermitentes do Cloud KMS de menos de um minuto interrompam significativamente a publicação e a entrega, a indisponibilidade prolongada do Cloud KMS tem o mesmo efeito que a revogação da chave.

Limitações

  • A associação entre uma chave do Cloud KMS e um cluster do Managed Service para Apache Kafka é imutável. Não é possível mudar a chave associada a um cluster. Em vez disso, você pode fazer a rotação da chave criando novas versões.

  • Se você desativar uma versão de chave não primária, os discos locais vão continuar funcionando sem alterações. Cada broker baixa a nova KEK quando é reiniciado. No entanto, o Cloud Storage não pode acessar arquivos de segmentos de tópicos criptografados usando a versão original, o que pode impossibilitar o consumo de mensagens desses arquivos. Isso significa que talvez não seja possível consumir dados mais antigos.

  • Se você desativar a versão principal de uma chave, os corretores não poderão gravar novos arquivos de segmento no armazenamento em camadas, o que aumenta a utilização do disco local. Além disso, as reinicializações do broker vão falhar. Você pode iniciar uma reinicialização de forma proativa ou uma atualização iniciada pelo serviço no cluster a qualquer momento.

  • Se você remover o acesso a uma chave do agente de serviço do Managed Service para Apache Kafka, o comportamento será semelhante ao que acontece se você desativar as versões da chave primária e não primária.

  • Se você excluir uma chave, o cluster será programado para desligamento e não poderá ser recuperado.

  • Não é possível solicitar uma nova criptografia dos dados armazenados em repouso. A CMEK é usada como uma KEK, mas a recriptografia exige uma mudança nas chaves de criptografia de dados.

Apache Kafka® é uma marca registrada da The Apache Software Foundation ou afiliadas nos Estados Unidos e/ou em outros países.