Configura l'autenticazione SASL

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 normale 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 del broker lato server per tutte le connessioni.

Prima di iniziare

Scopri di più informazioni su:

Concedi il ruolo Managed Kafka Client al account di servizio

Devi concedere il roles/managedkafka.client ruolo IAM al 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 Managed Kafka Client al account di servizio:

Console

  1. Nella Google Cloud console vai alla pagina IAM.
    Vai a IAM
  2. Verifica che il progetto sia impostato sul progetto consumer a cui il client Managed Service per Apache Kafka accederà.
  3. Fai clic su Concedi l'accesso.
  4. Nella nuova pagina, in Aggiungi entità, inserisci l'indirizzo email del account di servizio che stai utilizzando.
  5. In Assegna i ruoli, seleziona il ruolo Managed Kafka Client.
  6. Fai clic su Salva.

gcloud CLI

  1. Nella Google Cloud console, attiva Cloud Shell.

    Attiva Cloud Shell

    Nella parte inferiore della Google Cloud console 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à inclusa e installata e con valori già impostati per il progetto corrente. L'inizializzazione della sessione può richiedere alcuni secondi.

  2. Esegui il gcloud projects add-iam-policy-binding comando:

    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 a Google Cloud

Puoi autenticare i client Kafka utilizzando uno dei seguenti meccanismi: Google Cloud

OAUTHBEARER (consigliato): questo meccanismo richiede l'utilizzo delle Credenziali predefinite dell'applicazione (ADC). ADC è una strategia utilizzata dalle librerie di autenticazione per trovare automaticamente le credenziali in base all'ambiente dell'applicazione. Per saperne di più 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 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.

  1. Scarica un file JSON della chiave del service account per il account di servizio che intendi utilizzare per il client.

  2. Codifica il file del account di servizio utilizzando la codifica base64 da utilizzare come stringa di autenticazione. Supponiamo 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.txt
    

    Questo comando esegue le seguenti azioni:

    • base64 < my_service_account_key.json: Legge i contenuti del file denominato my_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 del account di servizio) come testo ASCII. Viene spesso utilizzata per la trasmissione di dati su canali progettati per il testo.

    • > password.txt: reindirizza l'output del comando base64 (la versione con codifica base64 del file del account di servizio) in un nuovo file denominato password.txt.

  3. Puoi utilizzare i contenuti del file della 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 con codifica 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:

  1. Il nome utente fornito corrisponde al account di servizio la cui chiave viene utilizzata nella password.

  2. L'entità del account di servizio fornita ha l'autorizzazione managedkafka.clusters.connect (inclusa nel roles/managedkafka.client ruolo IAM) sul cluster.

Token di accesso

  1. 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 corrente:

    gcloud auth print-access-token
    
  2. Puoi 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 dell'entità 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:

  1. Il token di accesso è valido e non è scaduto.

  2. Il nome utente fornito corrisponde all'email dell'entità a cui è associato il token di accesso.

  3. L'entità del token di accesso ha l'autorizzazione managedkafka.clusters.connect (inclusa nel roles/managedkafka.client ruolo IAM) 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:

  1. Utilizza GKE versione 1.31.1-gke.1241000 o successive.
  2. Annota il tuo 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"
    
  3. Se utilizzi il server di autenticazione locale, verifica di utilizzare anche la versione 2.40.3 o successive del pacchetto google-auth.

Verifica che l'entità GKE abbia l'autorizzazione managedkafka.clusters.connect (inclusa nel roles/managedkafka.client ruolo IAM).

Managed Service per Apache Kafka non supporta l'autenticazione all'API Apache Kafka open source utilizzando l'identità del carico di lavoroFleet. In alternativa, puoi collegare il tuo 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.

Passaggi successivi

Apache Kafka® è un marchio registrato di Apache Software Foundation o delle sue affiliate negli Stati Uniti e/o in altri paesi.