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'entità Identity and Access Management autorizzata, ad esempio un account di servizio. Managed Service per Apache Kafka gestisce i certificati broker lato server per tutte le connessioni.
Prima di iniziare
Scopri ulteriori informazioni su:
Concedi il ruolo Managed Kafka Client al account di servizio
Devi concedere il ruolo IAM roles/managedkafka.client nel progetto contenente il cluster al service account che utilizzerai per connetterti al cluster.
Il ruolo Managed Kafka Client include l'autorizzazione
managedkafka.clusters.connect richiesta 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.
gcloud CLI
-
Nella console Google Cloud , attiva Cloud Shell.
Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell e viene visualizzato un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installata e con valori già impostati per il progetto corrente. L'inizializzazione della sessione può richiedere alcuni secondi.
-
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 saperne di più su dove e in quale ordine ADC cerca le credenziali, 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 del account di servizio 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 del service account per il 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 codificato 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 sia 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 Workload Identity Federation for GKE. L'autenticazione è supportata sia per SASL/PLAIN sia per SASL/OAUTHBEARER.
Per utilizzare Workload Identity Federation for GKE con Managed Service per Apache Kafka, devi rispettare i seguenti requisiti:
- Utilizza GKE versione
1.31.1-gke.1241000o successive. Annota il 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.
Risoluzione dei problemi
Per informazioni su come risolvere i problemi di autenticazione SASL, consulta Errori di autenticazione.