Configurar a autenticação SASL

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

Este documento descreve como autenticar usando o método SASL. Os clientes fazem a autenticação 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 de agente do lado do servidor para todas as conexões.

Antes de começar

Saiba mais sobre estes assuntos:

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

Conceda o roles/managedkafka.client papel do IAM no projeto que contém o cluster à conta de serviço que você vai usar para se conectar ao cluster.

O papel de cliente do Kafka gerenciado 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 Google Cloud console do, acesse a página IAM.
    Acessar o IAM
  2. Verifique se o projeto está definido como o projeto do 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 do Kafka gerenciado.
  6. Clique em Salvar.

CLI gcloud

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

    Ativar o Cloud Shell

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

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

    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.

Configurar o cliente do Kafka para autenticação em Google Cloud

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

OAUTHBEARER (recomendado): esse mecanismo exige o uso do 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 por 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, o 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 de chave de 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 o cliente.

  2. Codifique o arquivo da conta de serviço usando base64-encode para usar como string de autenticação. Considere o nome do arquivo como 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 base64. A codificação Base64 é uma maneira de representar dados binários (como dados JSON no arquivo da 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 conta de serviço) para um novo arquivo chamado password.txt.

  3. É possível usar 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ê recebeu na etapa anterior. Ele precisa ser uma única linha.

Ao autenticar conexões recebidas no 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 roles/managedkafka.client papel do IAM) no cluster.

Token de acesso

  1. Receba um token de acesso para o principal que você quer usar para 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 no 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 ao qual o token de acesso está associado.

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

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

O Serviço Gerenciado para Apache Kafka oferece suporte à autenticação na API Apache Kafka de código aberto usando a Federação de Identidade da Carga de Trabalho para GKE. A autenticação é aceita para 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 a versão 1.31.1-gke.1241000 ou mais recente do GKE.
  2. Anote sua conta de serviço do Kubernetes com iam.gke.io/return-principal-id-as-email: "true". Exemplo:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: kafka-service-account
      annotations:
        iam.gke.io/return-principal-id-as-email: "true"
    
  3. Se você usar o servidor de autenticação local, verifique se também está usando 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 roles/managedkafka.client papel do IAM).

O Serviço Gerenciado para Apache Kafka não oferece suporte à autenticação na API Apache Kafka de código aberto usando Fleet identidade da carga de trabalho. Como alternativa, é possível vincular 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.