I client possono connettersi ai cluster Managed Service per Apache Kafka utilizzando l'API Apache Kafka open source. Tutte le connessioni devono essere criptate utilizzando TLS; la comunicazione in testo non crittografato non è supportata. L'autenticazione viene gestita tramite uno dei due meccanismi supportati, ognuno con un tipo di credenziale diverso: SASL o mTLS.
Questo documento descrive come eseguire l'autenticazione utilizzando il metodo SASL. I client eseguono l'autenticazione utilizzando le credenziali di un principal Identity and Access Management autorizzato, ad esempio un account di servizio. Managed Service per Apache Kafka gestisce i certificati del broker lato server per tutte le connessioni.
Prima di iniziare
Scopri ulteriori informazioni su:
Concedi il ruolo di client Kafka gestito al account di servizio
Devi concedere il ruolo IAM roles/managedkafka.client sul progetto contenente il cluster al service account che utilizzerai per connetterti al cluster.
Il ruolo client Kafka gestito include l'autorizzazione
managedkafka.clusters.connect necessaria per tutte le connessioni.
Per concedere il ruolo di client Kafka gestito al account di servizio,
segui questi passaggi:
Console
- Nella console Google Cloud , vai alla pagina IAM.
Vai a IAM - Verifica che il progetto sia impostato sul progetto consumer a cui accederà il client Managed Service per Apache Kafka.
- Fai clic su Concedi l'accesso.
- Nella nuova pagina, in Aggiungi entità, inserisci l'indirizzo email del account di servizio che stai utilizzando.
- In Assegna i ruoli, seleziona il ruolo Client Kafka gestito.
- Fai clic su Salva.
Interfaccia a riga di comando gcloud
-
In the Google Cloud console, 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.
-
Esegui il comando
gcloud projects add-iam-policy-binding:gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:SERVICE_ACCOUNT_EMAIL \ --role roles/managedkafka.client
Sostituisci quanto segue:
-
PROJECT_ID è l'ID progetto.
-
SERVICE_ACCOUNT_EMAIL è l'indirizzo email del account di servizio.
-
Configura il client Kafka per l'autenticazione su Google Cloud
Puoi autenticare i client Kafka in Google Cloud utilizzando uno dei seguenti meccanismi:
OAUTHBEARER (consigliato): questo meccanismo richiede l'utilizzo Credenziali predefinite dell'applicazione (ADC). Le credenziali predefinite dell'applicazione sono una strategia utilizzata dalle librerie di autenticazione per trovare automaticamente le credenziali in base all'ambiente dell'applicazione. Per ulteriori informazioni su dove ADC cerca le credenziali e in quale ordine, consulta Come funzionano le credenziali predefinite dell'applicazione.
SASL/PLAIN: questo meccanismo richiede l'utilizzo di un nome utente e una password che possono essere derivati da un file JSON della chiave delaccount di serviziot o da un token di accesso.
In generale, OAUTHBEARER è l'opzione consigliata. Tuttavia, SASL/PLAIN potrebbe essere un meccanismo più pratico per i test.
Autenticazione OAuthBearer
Per informazioni su come eseguire l'autenticazione all'API Kafka open source, consulta la documentazione su GitHub.
Autenticazione SASL/PLAIN
Managed Service per Apache Kafka supporta l'autenticazione SASL/PLAIN con un file JSON della chiave del service account o un token di accesso.
File JSON della chiave del service account
Questo metodo è applicabile a tutti i client Kafka.
Scarica un file JSON della chiave dell'account di servizio per l'account di servizio che intendi utilizzare per il tuo cliente.
Codifica il file del account di servizio utilizzando la codifica base64 da utilizzare come stringa di autenticazione. Supponi che il nome file sia
my_service_account_key.json.Sui sistemi Linux o macOS, utilizza il comando
base64(spesso installato per impostazione predefinita) come segue:base64 -w 0 < my_service_account_key.json > password.txtQuesto comando esegue le seguenti azioni:
base64 < my_service_account_key.json: Legge i contenuti del file denominatomy_service_account_key.json.Codifica i contenuti del file utilizzando la codifica base64. La codifica Base64 è un modo per rappresentare i dati binari (come i dati JSON nel file dell'account di servizio) come testo ASCII. Viene spesso utilizzato per trasmettere dati su canali progettati per il testo.
> password.txt: reindirizza l'output del comandobase64(la versione codificata in base64 del file del account di servizio) in un nuovo file denominatopassword.txt.
Puoi utilizzare i contenuti del file delle password per l'autenticazione con i seguenti parametri.
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";Sostituisci quanto segue:
SERVICE_ACCOUNT_EMAIL_ADDRESS: l'indirizzo email del account di servizio che vuoi utilizzare per l'autenticazione.CONTENTS_OF_BASE64_ENCODED_PASSWORD_FILE: i contenuti del file della password codificata in base64 che hai ottenuto nel passaggio precedente. Deve essere una singola riga.
Quando autentica le connessioni in entrata al cluster, Managed Service per Apache Kafka controlla quanto segue:
Il nome utente fornito corrisponde al account di servizio la cui chiave viene utilizzata nella password.
Il principal del account di servizio fornito dispone dell'autorizzazione
managedkafka.clusters.connect(inclusa nel ruolo IAMroles/managedkafka.client) sul cluster.
Token di accesso
Ottieni un token di accesso per l'entità che vuoi utilizzare per l'autenticazione. Ad esempio, ottieni un token di accesso per l'entità gcloud CLI attuale:
gcloud auth print-access-tokenPuoi utilizzare il token di accesso per l'autenticazione con i seguenti parametri.
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";Sostituisci quanto segue:
PRINCIPAL_EMAIL_ADDRESS: l'indirizzo email del principal che hai utilizzato per ottenere il token di accesso.ACCESS_TOKEN_VALUE: Il valore del token di accesso ottenuto nel passaggio precedente.
Quando autentica le connessioni in entrata al cluster, Managed Service per Apache Kafka controlla quanto segue:
Il token di accesso è valido e non è scaduto.
Il nome utente fornito corrisponde all'email principale a cui è associato il token di accesso.
L'entità del token di accesso dispone dell'autorizzazione
managedkafka.clusters.connect(inclusa nel ruolo IAMroles/managedkafka.client) sul cluster.
Workload Identity Federation for GKE
Managed Service per Apache Kafka supporta l'autenticazione all'API Apache Kafka open source utilizzando la federazione delle identità per i carichi di lavoro per GKE. L'autenticazione è supportata sia per SASL/PLAIN sia per SASL/OAUTHBEARER.
Per utilizzare la federazione delle identità per i carichi di lavoro per GKE con Managed Service per Apache Kafka, devi rispettare i seguenti requisiti:
- Utilizza GKE versione
1.31.1-gke.1241000o successive. Aggiungi un'annotazione al account di servizio Kubernetes con
iam.gke.io/return-principal-id-as-email: "true". Ad esempio:apiVersion: v1 kind: ServiceAccount metadata: name: kafka-service-account annotations: iam.gke.io/return-principal-id-as-email: "true"Se utilizzi il server di autenticazione locale, verifica di utilizzare anche la versione
2.40.3o successive del pacchetto google-auth.
Verifica che l'entità GKE disponga dell'autorizzazione
managedkafka.clusters.connect (inclusa nel ruolo IAM roles/managedkafka.client).
Managed Service per Apache Kafka non supporta l'autenticazione all'API Apache Kafka open source utilizzando la workload identity di Fleet. In alternativa, puoi collegare il account di servizio Kubernetes a un service account IAM.
Risolvere gli errori di autenticazione
Se un client Managed Service per Apache Kafka non può autenticarsi a Managed Service per Apache Kafka, viene visualizzato un messaggio di errore simile al seguente:
Exception in thread "main" java.util.concurrent.ExecutionException:
org.apache.kafka.common.errors.SaslAuthenticationException:
Authentication failed: Invalid username or password
Per risolvere il problema, controlla le seguenti cause:
La password non è formattata correttamente e non rappresenta un blob JSON della chiave di un account di servizio valido dopo la decodifica in base64 o un token di accesso valido.
L'entità di autenticazione non dispone dell'autorizzazione
managedkafka.clusters.connectsul cluster.Il nome utente fornito non corrisponde all'entità delle credenziali.
Se un client subisce disconnessioni frequenti ogni 30 minuti, il problema potrebbe essere dovuto al fatto che il client non supporta la riautenticazione periodica.
I broker Managed Service per Apache Kafka richiedono ai client di eseguire nuovamente l'autenticazione ogni
30 minuti, applicata dalla proprietà del broker connections.max.reauth.ms.
Verifica che la versione della libreria client Kafka sia 2.2.0 o successive e supporti
la riautenticazione.