Puoi configurare il cluster Managed Service per Apache Kafka per autenticare i client Kafka utilizzando mutual TLS (mTLS). Questo metodo utilizza i certificati client di Certificate Authority Service (CA Service) come base per l'autenticazione. Questa opzione fornisce un'alternativa al meccanismo SASL predefinito che utilizza i principal Identity and Access Management (IAM).
Quando utilizzi mTLS, l'autorizzazione deve essere configurata utilizzando gli ACL Kafka. Per i concetti di base, consulta i seguenti documenti:
Prima di iniziare
Prima di configurare l'autenticazione mTLS, completa le seguenti operazioni:
Conferma l'idoneità del cluster. Verifica di disporre di un cluster Managed Service per Apache Kafka esistente creato dopo il 24 giugno 2025. Solo questi cluster supportano l'autenticazione mTLS. Per verificare la data di creazione del cluster, utilizza il comando
gcloud managed-kafka clusters describeo visualizza la pagina dei dettagli del cluster nella console.Configura CA Service. Configura il servizio CA e i pool di CA che intendi utilizzare per l'emissione dei certificati client. Devi creare certificati radice e subordinati all'interno dei pool di CA.
Crea un pool di CA. Prendi nota dell'ID pool di CA.
Per saperne di più su come creare un pool di CA, vedi Creare un pool di CA.
Crea e attiva una CA radice per il pool.
Per saperne di più su come attivare una CA radice per il pool, consulta Creare una CA radice.
Crea e attiva una o più CA subordinate. Ti consigliamo di utilizzare una CA subordinata per l'emissione di certificati client anziché utilizzare direttamente una CA radice.
Per saperne di più su come creare una CA subordinata, consulta Creare un'autorità di certificazione subordinata.
Ruoli e autorizzazioni richiesti
Per configurare mTLS, devi assicurarti che sia tu (l'utente) sia l'agente di servizio Managed Service per Apache Kafka dispongano delle autorizzazioni IAM necessarie. Questo vale sia per la creazione di un nuovo cluster sia per l'aggiornamento di uno esistente per la configurazione di mTLS.
Autorizzazioni utente
Per creare o configurare un cluster Managed Service per Apache Kafka per mTLS, devi disporre
delle autorizzazioni per creare o aggiornare la risorsa cluster. Per farlo, chiedi all'amministratore di concederti il ruolo Editor cluster Kafka gestito (roles/managedkafka.clusterEditor) nel progetto contenente il cluster.
Questo ruolo predefinito contiene le autorizzazioni managedkafka.clusters.create e
managedkafka.clusters.update. Queste autorizzazioni ti consentono di creare un nuovo cluster o modificarne uno esistente per aggiungere la configurazione del pool del servizio CA (CA) richiesta per mTLS.
Non sono necessarie autorizzazioni separate per le risorse del servizio CA
per configurare mTLS sul cluster Kafka, purché tu disponga del percorso
completo della risorsa del pool di CA. Tuttavia, per visualizzare, creare o gestire pool di CA nella
consoleGoogle Cloud , avrai bisogno di ruoli aggiuntivi specifici per
CA Service, come Amministratore servizio CA (roles/privateca.admin)
o Operatore servizio CA (roles/privateca.operator).
Autorizzazioni service agent
Affinché l'integrazione mTLS funzioni, l'agente di servizio Managed Service per Apache Kafka richiede l'autorizzazione per accedere al pool di CA specificato. Il service agent è un account di serviziot gestito da Google per il tuo progetto.
Se il cluster Managed Service per Apache Kafka e il pool CA si trovano nello stesso progetto, il service agent dispone delle autorizzazioni necessarie per impostazione predefinita. Il ruolo
managedkafka.serviceAgent, concesso automaticamente all'agente di servizio del tuo progetto, include l'autorizzazioneprivateca.caPools.getrichiesta.Se il pool di CA si trova in un progetto diverso dal cluster Managed Service per Apache Kafka, devi concedere manualmente all'agente di servizio l'autorizzazione di accesso. Concedi il ruolo Lettore pool di CA privata (
roles/privateca.poolReader) all'agente di servizio nel progetto che contiene il pool di CA.
Riepilogo delle autorizzazioni richieste
Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione seguente.
Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.
Concedi all'agente di servizio l'accesso ai pool di CA
Se il pool di CA del servizio CA e il cluster Managed Service for Apache Kafka si trovano in Google Cloud progetti diversi, devi concedere all'agente di servizio del cluster l'autorizzazione di accesso al pool di CA. L'agente di servizio Managed Service per Apache Kafka
si chiama
service-CLUSTER_PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com.
Concedi il ruolo Lettore pool di CA (roles/privateca.poolReader) all'agente di servizio Managed Service per Apache Kafka a livello di singolo pool (consigliato) che contiene le tue CA o in tutti i pool del progetto.
Questo ruolo fornisce l'autorizzazione privateca.caPools.get necessaria.
Pool di CA individuale
La concessione delle autorizzazioni a un singolo pool di CA è l'approccio consigliato, in quanto segue il principio del privilegio minimo.
Esegui il comando
gcloud privateca pools add-iam-policy-binding:
gcloud privateca pools add-iam-policy-binding CA_POOL_ID \ --location=CA_POOL_LOCATION \ --member='serviceAccount:service-CLUSTER_PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com' \ --role='roles/privateca.poolReader'
Sostituisci quanto segue:
-
CA_POOL_ID: L'ID del pool di CA a cui stai concedendo l'accesso. Ad esempio,
test-mtls-pool1. CA_POOL_LOCATION: la regione Google Cloud in cui si trova il pool di CA. Ad esempio:
us-central1.-
CLUSTER_PROJECT_NUMBER: il numero del progetto contenente il cluster Managed Service per Apache Kafka. Ad esempio,
12341234123.
Tutti i pool di CA
In alternativa, puoi concedere all'agente di servizio l'autorizzazione ad accedere a tutti i pool di CA all'interno di un progetto impostando il criterio a livello di progetto.
Esegui il comando
gcloud projects add-iam-policy-binding:
gcloud projects add-iam-policy-binding CA_PROJECT_ID \ --member='serviceAccount:service-CLUSTER_PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com' \ --role='roles/privateca.poolReader'
Sostituisci quanto segue:
-
CA_PROJECT_ID: l'ID del progetto contenente i pool di CA a cui stai concedendo l'accesso. Ad esempio,
test-cas-project. -
CLUSTER_PROJECT_NUMBER: il numero del progetto contenente il cluster Managed Service per Apache Kafka. Ad esempio,
12341234123.
Abilitare mTLS su un cluster
Per attivare mTLS, fornisci al cluster i nomi delle risorse di uno o più pool di CA del servizio CA da utilizzare per l'autenticazione client. Puoi farlo quando crei un nuovo cluster o aggiornandone uno esistente creato dopo il 24 giugno 2025.
Dopo aver fornito gli identificatori del pool di CA, il servizio scarica automaticamente i certificati CA dai pool specificati e li installa nell'archivio attendibile di ogni broker nel cluster.
Console
Puoi attivare mTLS su un nuovo cluster durante la creazione o su un cluster esistente modificandolo.
Su un nuovo cluster
Nella console Google Cloud , vai alla pagina Cluster.
- Seleziona Crea.
Viene visualizzata la pagina Crea cluster Kafka.
- Segui i passaggi descritti in Creare un cluster.
- Prima del passaggio finale, individua la sezione Configurazione mTLS facoltativa.
- Inserisci il nome completo della risorsa di un pool di CA nel formato
projects/PROJECT_ID/LOCATION/LOCATION/caPools/POOL_ID. - Per aggiungerne altri, fai clic su Aggiungi pool di CA. Puoi aggiungere fino a 10 pool di CA.
- (Facoltativo) Inserisci eventuali regole di mappatura delle entità.
- Fai clic su Crea per creare il cluster con mTLS abilitato.
Su un cluster esistente
- Nella console Google Cloud , vai alla pagina Cluster.
- Fai clic sul nome del cluster da aggiornare.
- Fai clic su Modifica.
- Nella sezione Configurazione mTLS, aggiungi o modifica l'elenco dei pool di CA. Puoi aggiungere fino a 10 pool di CA.
- (Facoltativo) Inserisci o modifica le regole di mappatura delle entità.
- Fai clic su Salva.
gcloud
Su un nuovo cluster
-
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 managed-kafka clusters createcon il flag--mtls-ca-pools. In questo esempio, sono configurati due pool di CA.gcloud managed-kafka clusters create CLUSTER_ID \ --location=LOCATION \ --cpu=3 \ --memory=3GiB \ --subnets=projects/PROJECT_ID/locations/LOCATION/subnetworks/SUBNET_ID \ --mtls-ca-pools=projects/PROJECT_ID/locations/LOCATION/caPools/POOL_ID_1,projects/PROJECT_ID/locations/LOCATION/caPools/POOL_ID_2
Sostituisci quanto segue:
-
CLUSTER_ID: l'ID o il nome del cluster.
Per maggiori informazioni su come assegnare un nome a un cluster, consulta le linee guida per assegnare un nome a una risorsa Managed Service per Apache Kafka. Ad esempio,
test-mtls-cluster. -
LOCATION: la posizione del cluster.
Per saperne di più sulle località supportate, consulta Località di Managed Service per Apache Kafka supportate. Ad esempio,
us-central1. -
SUBNETS: l'elenco delle subnet a cui connettersi. Utilizza le virgole per separare più valori di subnet.
Il formato della subnet è
projects/PROJECT_ID/locations/LOCATION/subnetworks/SUBNET_ID. -
POOL_ID_2: l'ID del secondo pool di CA. Ad esempio,
test-mtls-pool2.
POOL_ID_1: l'ID del primo pool di CA.
Ad esempio, test-mtls-pool1.
Su un cluster esistente
-
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.
-
Utilizza il comando
gcloud managed-kafka clusters update. Questo comando sovrascrive l'intero insieme di pool attualmente configurati. Fornisci l'elenco completo dei pool di CA richiesti. In questo esempio, sono configurati due pool di CA.gcloud managed-kafka clusters update CLUSTER_ID \ --location=LOCATION \ --mtls-ca-pools=projects/PROJECT_ID/locations/LOCATION/caPools/POOL_ID_1,projects/PROJECT_ID/locations/LOCATION/caPools/POOL_ID_2
Sostituisci quanto segue:
-
CLUSTER_ID: l'ID o il nome del cluster.
Per maggiori informazioni su come assegnare un nome a un cluster, consulta le linee guida per assegnare un nome a una risorsa Managed Service per Apache Kafka. Ad esempio,
test-mtls-cluster. -
LOCATION: la posizione del cluster.
Per saperne di più sulle località supportate, consulta Località di Managed Service per Apache Kafka supportate. Ad esempio,
us-central1. -
POOL_ID_2: l'ID del secondo pool di CA. Ad esempio,
test-mtls-pool2.
POOL_ID_1: l'ID del primo pool di CA.
Ad esempio, test-mtls-pool1.
Configura la mappatura dei nomi principali
Quando un client esegue l'autenticazione con mTLS, per impostazione predefinita l'entità Kafka viene derivata
dal nome distinto (DN) del soggetto del certificato e ha il formato
User:CN=...,OU=...,O=...,L=...,ST=...,C=....
Crea regole di mapping per trasformare il nome distinto del soggetto del certificato in un alias pratico
più facile da utilizzare negli ACL di Kafka.
Per saperne di più sul modulo per il nome distinto del soggetto, consulta
Personalizzazione del nome utente SSL
nella documentazione di Apache Kafka.
Queste trasformazioni sono definite dalla proprietà del broker Kafka ssl.principal.mapping.rules, che utilizza espressioni regolari per estrarre e riformattare parti dell'oggetto del certificato.
Ad esempio, puoi applicare una regola per trasformare un nome distinto del soggetto completo in un alias nel seguente modo:
DN soggetto del certificato:
CN=order-processing-app,OU=marketing,O=company,C=USRegola di mappatura:
RULE:^.*[Cc][Nn]=([a-zA-Z0-9.-]*).*$/$1/L,DEFAULTEntità Kafka risultante:
order-processing-app
Questa regola di esempio estrae il nome comune (CN) dal soggetto del certificato e lo utilizza come nome principale in Kafka.
Per impostare una regola di mapping sul cluster utilizzando Google Cloud CLI, segui questi passaggi. Quando utilizzi la console, puoi impostare le regole di mappatura durante la creazione o l'aggiornamento di un cluster.
Per aggiornare il cluster, utilizza il comando
gcloud managed-kafka clusters updatecon il flag--ssl-principal-mapping-rules.gcloud managed-kafka clusters update CLUSTER_ID \ --location=REGION \ --ssl-principal-mapping-rules='MAPPING_RULE'Sostituisci quanto segue:
CLUSTER_ID: l'ID del cluster Managed Service per Apache Kafka che stai creando. Ad esempio,test-kafka-cluster.REGION: la Google Cloud regione in cui creare il cluster. Ad esempio,us-central1.MAPPING_RULE*: la regola di mappatura che vuoi applicare. Ad esempio,RULE:^.*[Cc][Nn]=([a-zA-Z0-9.-]*).*$/$1/L,DEFAULT.
Per saperne di più su come scrivere regole di mappatura, consulta Autorizzazione e ACL nella documentazione di Apache Kafka.
Configura gli ACL Kafka per i principal mTLS
Per impostazione predefinita, a qualsiasi client che esegue l'autenticazione con un certificato mTLS valido viene concesso l'accesso completo al cluster. Per applicare il principio del
privilegio minimo, devi creare ACL Kafka per definire autorizzazioni specifiche per
i tuoi principal mTLS. Il principal per un client mTLS è il nome distinto (DN) del soggetto del certificato (o un alias mappato), con il prefisso User:.
Per creare ACL Kafka, devi disporre del ruolo IAM Editor ACL Kafka gestite
(roles/managedkafka.aclEditor).
Supponiamo di avere un'applicazione identificata dal relativo certificato che produce
messaggi per orders-topic e utilizza messaggi da analytics-topic. L'entità
dell'applicazione, dopo essere stata semplificata con una regola di mappatura, è
order-processing-app. Quando crei gli ACL Kafka, devi aggiungere il prefisso User: al
principal.
Applica l'ACL
WRITEal cluster. Esegui il comandogcloud managed-kafka acls add-entryper concedere l'autorizzazioneWRITEsuorders-topic.gcloud managed-kafka acls add-entry topic/orders-topic \ --cluster=CLUSTER_ID \ --location=REGION \ --principal=User:order-processing-app \ --operation=WRITE \ --permission-type=ALLOW \ --host="*"Sostituisci quanto segue:
CLUSTER_ID: l'ID del cluster Managed Service per Apache Kafka che stai creando. Ad esempio,test-kafka-cluster.REGION: la Google Cloud regione in cui creare il cluster. Ad esempio,us-central1.
Applica l'ACL
READal cluster. Esegui il comandogcloud managed-kafka acls add-entryper concedere l'autorizzazioneREADsuanalytics-topic.gcloud managed-kafka acls add-entry topic/analytics-topic \ --cluster=CLUSTER_ID \ --location=REGION \ --principal=User:order-processing-app \ --operation=READ \ --permission-type=ALLOW \ --host="*"
Dopo aver applicato queste ACL, il client order-processing-app dispone solo delle
autorizzazioni specifiche che hai concesso. Per saperne di più su come creare ACL,
consulta Crea ACL Kafka.
Configura i client Kafka
Dopo aver configurato mTLS sul cluster, devi configurare le applicazioni client per l'autenticazione utilizzando questo metodo. La procedura prevede la creazione di un certificato client e la configurazione delle proprietà del client per utilizzarlo.
Crea e scarica un certificato client sul computer client. Esegui il comando
gcloud privateca certificates createper emettere un nuovo certificato da uno dei pool di CA che hai configurato per il tuo cluster.Questo comando scarica il certificato
client-cert.peme la relativa chiave privataclient-key.pemnell'ambiente locale.gcloud privateca certificates create CERTIFICATE_ID \ --project=PROJECT_ID \ --issuer-location=REGION \ --issuer-pool=POOL_ID \ --ca=CA_NAME \ --generate-key \ --dns-san="client.example.com" \ --subject="CN=test-client-app" \ --key-output-file=client-key.pem \ --cert-output-file=client-cert.pemSostituisci quanto segue:
CERTIFICATE_ID: un nome univoco per l'oggetto certificato. Ad esempio,order-app-cert.PROJECT_ID: l'ID del progetto contenente il pool di CA. Ad esempio,test-project-12345.REGION: la regione in cui si trova il pool di CA. Ad esempio,us-central1.POOL_ID: l'ID del pool di CA da cui emettere il certificato. Ad esempio,test-mtls-pool1.CA_NAME: il nome dell'autorità di certificazione all'interno del pool. Ad esempio,test-sub-ca.--dns-san="client.example.com": il nome alternativo del soggetto DNS. Puoi utilizzare qualsiasi valore pertinente per il tuo cliente.--subject="CN=test-client-app": il DN soggetto. Questo nome viene utilizzato come entità mTLS, a meno che tu non abbia configurato una regola di mappatura dei nomi delle entità.
Visualizza il certificato client, il soggetto del certificato e verifica
ssl.principal.mapping.rules. Esegui il comandogcloud privateca certificates describe:gcloud privateca certificates describe CERTIFICATE_ID \ --issuer-pool=POOL_ID \ --issuer-location=REGIONSostituisci quanto segue:
CERTIFICATE_ID: il nome univoco dell'oggetto certificato. Ad esempio,order-app-cert.POOL_ID: l'ID del pool di CA da cui hai emesso il certificato. Ad esempio,test-mtls-pool1.REGION: la regione in cui si trova il pool di CA. Ad esempio,us-central1.
L'output è simile al seguente:
certificateDescription: aiaIssuingCertificateUrls: - http://privateca-content-68e092f4-0000-288c-95cf-30fd3814648c.storage.googleapis.com/a6553d092bbedd752e34/ca.crt authorityKeyId: keyId: 9568aa9d2baa11a097addc2e24adeaebea0d6a2a certFingerprint: sha256Hash: 230e52b8411fd094048fca194fc6cf80e41b3e8561298aec3519e13cb1fd05eb ... subjectDescription: hexSerialNumber: 2107b74cf5a814043a38a87eeb6cd7c7891a5f lifetime: P30D notAfterTime: '2025-07-13T15:34:43Z' notBeforeTime: '2025-06-13T15:34:44Z' subject: commonName: test-client-app subjectAltName: dnsNames: - client.example.com ...Crea un archivio chiavi Java. Combina il certificato e la chiave privata in un file
PKCS#12, quindi importalo in un file Java KeyStore (.jks).# Create a password for the keystore export KEYSTORE_PASSWORD="KEYSTORE_PASSWORD" # Combine the key and cert into a PKCS#12 file openssl pkcs12 -export -inkey client-key.pem -in client-cert.pem \ -name client -out client-keystore.p12 -password "pass:$KEYSTORE_PASSWORD" # Import the PKCS#12 file into a Java KeyStore keytool -importkeystore -srckeystore client-keystore.p12 -srcstoretype pkcs12 \ -destkeystore client-keystore.jks -srcstorepass "$KEYSTORE_PASSWORD" -deststorepass "$KEYSTORE_PASSWORD"Puoi verificare che la chiave sia stata archiviata correttamente eseguendo questo comando:
keytool -v -list -keystore client-keystore.jks -storepass "$KEYSTORE_PASSWORD"L'output è simile al seguente:
Keystore type: JKS Keystore provider: SUN Your keystore contains 1 entry Alias name: client Creation date: Jun 13, 2024 Entry type: Private key entry Certificate chain length: 1 Certificate[1]: Owner: CN=test-client-app Issuer: CN=test-sub-ca ...Tieni presente che la riga
Ownermostra il nome distinto del soggetto del certificato. Per impostazione predefinita, Kafka imposta il principal Kafka su questo formato esatto:CN=...,OU=...,O=...,L=...,ST=...,C=.... Per saperne di più, consulta la sezione Autorizzazione e ACL nella documentazione di Apache Kafka.Configura le proprietà del client Kafka e l'indirizzo di bootstrap. Nell'applicazione client Kafka, imposta le seguenti proprietà per utilizzare il keystore per una connessione SSL. Inoltre, assicurati di utilizzare l'indirizzo di bootstrap corretto con la porta
9192. Per maggiori informazioni su come configurare un client, vedi Guida rapida: crea un cluster Managed Service per Apache Kafka e connetti un client.security.protocol=SSL ssl.keystore.location=KEYSTORE_LOCATION ssl.keystore.password=KEYSTORE_PASSWORD bootstrap.servers=CLUSTER_BOOTSTRAP_ADDRESSSostituisci quanto segue:
KEYSTORE_LOCATION: il percorso del file.jks.KEYSTORE_PASSWORD: la password per il keystore.CLUSTER_BOOTSTRAP_ADDRESS: l'indirizzo di bootstrap del tuo cluster. Per trovare l'indirizzo di bootstrap, consulta Visualizzare i dettagli del cluster. Assicurati di aggiungere il numero di porta come9192.
Proteggere la configurazione del client
L'esempio precedente prevede l'archiviazione locale di chiavi private e password, pertanto non lo consigliamo per gli ambienti di produzione. Per la produzione, gestisci i segreti client in modo sicuro. Sono incluse le seguenti opzioni:
Archivia il keystore e la relativa password come secret in Google Cloud Secret Manager e recuperali in fase di runtime nel codice dell'applicazione.
Se esegui il deployment dell'applicazione su GKE, utilizza il componente aggiuntivo Secret Manager per montare i secret nel file system dell'applicazione in fase di runtime.
Monitorare mTLS
Puoi monitorare lo stato degli aggiornamenti dei certificati mTLS utilizzando metriche e log in Cloud Monitoring e Cloud Logging.
Per monitorare in modo proattivo lo stato degli aggiornamenti dei certificati mTLS, utilizza la metrica
managedkafka.googleapis.com/mtls_truststore_update_count in
Monitoring. Questa metrica conteggia i tentativi di aggiornamento dell'archivio attendibile e
include un'etichetta STATUS, che può essere SUCCESS o un motivo di errore
come CA_POOL_FETCH_ERROR.
Il servizio Managed Service per Apache Kafka tenta di aggiornare l'archivio attendibile una volta all'ora per ogni cluster. Ti consigliamo di creare un avviso che si attiva quando questa metrica segnala un conteggio persistente di errori per più di tre ore, in quanto ciò potrebbe indicare una configurazione errata che richiede un intervento manuale.
Gli aggiornamenti del truststore utilizzano la quota dell'API Certificate Authority Service. È importante comprendere quanto segue:
Il processo di aggiornamento chiama il metodo
FetchCaCerts, che è soggetto alla quotaAPI requests per minute per region.Questo utilizzo della quota è attribuito al progetto che contiene il pool di CA a cui viene fatto riferimento e non al progetto Managed Service per Apache Kafka.
Il limite predefinito è di 400 query al secondo (QPS) per regione. Data la bassa frequenza di una richiesta per cluster all'ora, è improbabile che questi aggiornamenti del truststore ti facciano superare questa quota.
Puoi anche monitorare gli aggiornamenti del truststore visualizzando i log in Logging. Cerca le seguenti voci di log per verificare che gli aggiornamenti siano stati eseguiti correttamente:
Managed Service for Apache Kafka updated the mTLS trust storeAdded root CA certificate to trust store
Passaggi successivi
Scopri come creare un cluster.
Scopri come visualizzare i dettagli del cluster.