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
- No console do Google Cloud , acesse a página IAM.
Acessar o IAM - Verifique se o projeto está definido como o projeto de 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 gerenciado do Kafka.
- Clique em Salvar.
CLI da gcloud
-
No console do Google Cloud , ative 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.
-
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.
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.
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.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 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 comandobase64(a versão codificada em base64 do arquivo da sua conta de serviço) para um novo arquivo chamadopassword.txt.
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:
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 no papel do IAMroles/managedkafka.clientno cluster).
Token de acesso
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É 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:
O token de acesso é válido e não expirou.
O nome de usuário fornecido corresponde ao e-mail principal associado ao token de acesso.
O principal do token de acesso tem a permissão
managedkafka.clusters.connect(incluída no papel do IAMroles/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:
- Use o GKE versão
1.31.1-gke.1241000ou mais recente. 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"Se você usa o servidor de autenticação local, verifique se também usa 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 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.