Configurar a autenticação SASL

Os clientes podem se conectar aos clusters do Serviço Gerenciado para Apache Kafka usando a API de código aberto do Apache Kafka. Todas as conexões precisam ser criptografadas usando TLS. A comunicação em texto simples não é aceita. A autenticação é processada por um de dois mecanismos compatíveis, cada um com um tipo de credencial diferente: SASL ou mTLS.

Neste documento, descrevemos como fazer a autenticação usando o método SASL. Os clientes são autenticados usando as credenciais de um principal autorizado do Identity and Access Management, como uma conta de serviço. O Serviço Gerenciado para Apache Kafka gerencia os certificados do broker do lado do servidor para todas as conexões.

Antes de começar

Saiba mais sobre estes assuntos:

Conceda o papel de cliente do Kafka gerenciado à conta de serviço

Você precisa conceder o papel do IAM roles/managedkafka.client no projeto que contém o cluster à conta de serviço que será usada para se conectar a ele.

O papel de cliente do Managed Kafka inclui a permissão managedkafka.clusters.connect necessária para todas as conexões. Para conceder o papel de cliente do Kafka gerenciado à conta de serviço, siga estas etapas:

Console

  1. No console do Google Cloud , acesse a página IAM.
    Acessar o IAM
  2. Verifique se o projeto está definido como o projeto de consumidor que o cliente do Serviço gerenciado para Apache Kafka acessaria.
  3. Clique em Conceder acesso.
  4. Na nova página, em Adicionar principais, insira o endereço de e-mail da conta de serviço que você está usando.
  5. Em Atribuir papéis, selecione o papel Cliente gerenciado do Kafka.
  6. Clique em Salvar.

CLI da gcloud

  1. No console do Google Cloud , ative o Cloud Shell.

    Ativar o Cloud Shell

    Na parte de baixo do console Google Cloud , uma sessão do Cloud Shell é iniciada e exibe um prompt de linha de comando. O Cloud Shell é um ambiente shell com a CLI do Google Cloud já instalada e com valores já definidos para o projeto atual. A inicialização da sessão pode levar alguns segundos.

  2. Execute o comando gcloud projects add-iam-policy-binding:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member serviceAccount:SERVICE_ACCOUNT_EMAIL \
      --role roles/managedkafka.client

    Substitua:

    • PROJECT_ID é o ID do projeto.

    • SERVICE_ACCOUNT_EMAIL é o endereço de e-mail da conta de serviço.

Configure o cliente Kafka para autenticação em Google Cloud

É possível autenticar clientes do Kafka no Google Cloud usando um dos seguintes mecanismos:

OAUTHBEARER (recomendado): esse mecanismo exige o uso de Application Default Credentials (ADC). O ADC é uma estratégia usada pelas bibliotecas de autenticação do Google para encontrar credenciais automaticamente com base no ambiente do aplicativo. Para mais informações sobre onde o ADC procura credenciais e em que ordem, consulte Como o Application Default Credentials funciona.

SASL/PLAIN: esse mecanismo exige o uso de um nome de usuário e uma senha que podem ser derivados de um arquivo JSON de chave de conta de serviço ou de um token de acesso.

Em geral, OAUTHBEARER é a opção recomendada. No entanto, o SASL/PLAIN pode ser um mecanismo mais conveniente para testes.

Autenticação OAuthBearer

Para informações sobre como autenticar na API Kafka de código aberto, consulte a documentação no GitHub.

Autenticação SASL/PLAIN

O Serviço Gerenciado para Apache Kafka oferece suporte à autenticação SASL/PLAIN com um arquivo JSON de chave de conta de serviço ou um token de acesso.

Arquivo JSON da chave da conta de serviço

Esse método é aplicável a todos os clientes do Kafka.

  1. Faça o download de um arquivo JSON de chave de conta de serviço para a conta de serviço que você pretende usar para seu cliente.

  2. Codifique o arquivo da conta de serviço usando base64-encode para usar como sua string de autenticação. Suponha que o nome de arquivo seja my_service_account_key.json.

    Em sistemas Linux ou macOS, use o comando base64 (geralmente instalado por padrão) da seguinte maneira:

    base64 -w 0 < my_service_account_key.json > password.txt
    

    Esse comando realiza as ações a seguir:

    • base64 < my_service_account_key.json: lê o conteúdo do arquivo chamado my_service_account_key.json.

    • Codifica o conteúdo do arquivo usando a codificação em base64. A codificação Base64 é uma maneira de representar dados binários (como dados JSON no arquivo da sua conta de serviço) como texto ASCII. Isso é usado com frequência para transmitir dados por canais projetados para texto.

    • > password.txt: redireciona a saída do comando base64 (a versão codificada em base64 do arquivo da sua conta de serviço) para um novo arquivo chamado password.txt.

  3. Use o conteúdo do arquivo de senha para autenticação com os seguintes parâmetros.

    security.protocol=SASL_SSL
    sasl.mechanism=PLAIN
    sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
    username="SERVICE_ACCOUNT_EMAIL_ADDRESS" \
    password="CONTENTS_OF_BASE64_ENCODED_PASSWORD_FILE";
    

    Substitua:

    • SERVICE_ACCOUNT_EMAIL_ADDRESS: o endereço de e-mail da conta de serviço que você quer usar para autenticação.
    • CONTENTS_OF_BASE64_ENCODED_PASSWORD_FILE: o conteúdo do arquivo de senha codificado em base64 que você obteve na etapa anterior. Precisa ser uma única linha.

Ao autenticar conexões recebidas para o cluster, o Serviço Gerenciado para Apache Kafka verifica o seguinte:

  1. O nome de usuário fornecido corresponde à conta de serviço cuja chave é usada na senha.

  2. O principal da conta de serviço fornecida tem a permissão managedkafka.clusters.connect (incluída no papel do IAM roles/managedkafka.client no cluster).

Token de acesso

  1. Receba um token de acesso para o principal que você quer usar na autenticação. Por exemplo, receba um token de acesso para o principal atual da CLI gcloud:

    gcloud auth print-access-token
    
  2. É possível usar o token de acesso para autenticação com os seguintes parâmetros.

    security.protocol=SASL_SSL
    sasl.mechanism=PLAIN
    sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
    username="PRINCIPAL_EMAIL_ADDRESS" \
    password="ACCESS_TOKEN_VALUE";
    
    

    Substitua:

    • PRINCIPAL_EMAIL_ADDRESS: o endereço de e-mail do principal que você usou para receber o token de acesso.
    • ACCESS_TOKEN_VALUE: o valor do token de acesso que você recebeu na etapa anterior.

Ao autenticar conexões recebidas para o cluster, o Serviço Gerenciado para Apache Kafka verifica o seguinte:

  1. O token de acesso é válido e não expirou.

  2. O nome de usuário fornecido corresponde ao e-mail principal associado ao token de acesso.

  3. O principal do token de acesso tem a permissão managedkafka.clusters.connect (incluída no papel do IAM roles/managedkafka.client ) no cluster.

Federação de Identidade da Carga de Trabalho para GKE

O Serviço Gerenciado para Apache Kafka é compatível com a autenticação na API de código aberto do Apache Kafka usando a federação de identidade da carga de trabalho para GKE. A autenticação é compatível com SASL/PLAIN e SASL/OAUTHBEARER.

Para usar a Federação de Identidade da Carga de Trabalho para GKE com o Serviço Gerenciado para Apache Kafka, é necessário atender aos seguintes requisitos:

  1. Use o GKE versão 1.31.1-gke.1241000 ou mais recente.
  2. Anote sua conta de serviço do Kubernetes com iam.gke.io/return-principal-id-as-email: "true". Por exemplo:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: kafka-service-account
      annotations:
        iam.gke.io/return-principal-id-as-email: "true"
    
  3. Se você usa o servidor de autenticação local, verifique se também usa a versão 2.40.3 ou mais recente do pacote google-auth.

Verifique se o principal do GKE tem a permissão managedkafka.clusters.connect (incluída no papel do IAM roles/managedkafka.client).

O Serviço Gerenciado para Apache Kafka não oferece suporte à autenticação na API Apache Kafka de código aberto usando a identidade da carga de trabalho da frota. Como alternativa, vincule sua conta de serviço do Kubernetes a uma conta de serviço do IAM.

Resolver problemas

Para informações sobre como resolver problemas de autenticação SASL, consulte Erros de autenticação.

A seguir

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