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
- No Google Cloud console do, acesse a página IAM.
Acessar o IAM - Verifique se o projeto está definido como o projeto do consumidor que o cliente do Serviço Gerenciado para Apache Kafka acessaria.
- Clique em Conceder acesso.
- Na nova página, em Adicionar principais, insira o endereço de e-mail da conta de serviço que você está usando.
- Em Atribuir papéis, selecione o papel Cliente do Kafka gerenciado.
- Clique em Salvar.
CLI gcloud
-
No Google Cloud console do, ative 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.
-
Execute o
gcloud projects add-iam-policy-bindingcomando: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.
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.
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.txtEsse comando realiza as ações a seguir:
base64 < my_service_account_key.json: Lê o conteúdo do arquivo chamadomy_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 comandobase64(a versão codificada em base64 do arquivo da conta de serviço) para um novo arquivo chamadopassword.txt.
É 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:
O nome de usuário fornecido corresponde à conta de serviço cuja chave é usada na senha.
O principal da conta de serviço fornecida tem a permissão
managedkafka.clusters.connect(incluída noroles/managedkafka.clientpapel do IAM) no cluster.
Token de acesso
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É 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:
O token de acesso é válido e não expirou.
O nome de usuário fornecido corresponde ao e-mail principal ao qual o token de acesso está associado.
O principal do token de acesso tem a permissão
managedkafka.clusters.connect(incluída noroles/managedkafka.clientpapel 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:
- Use a versão
1.31.1-gke.1241000ou mais recente do GKE. 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"Se você usar o servidor de autenticação local, verifique se também está usando a versão
2.40.3ou 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.