Kafka 代理程式的驗證類型

本頁說明用戶端應用程式連線至 Google Cloud Managed Service for Apache Kafka 代理程式時,支援的驗證方法。

對於在 Google Kubernetes Engine、Compute Engine、Cloud Run 或 Cloud Run functions 等 Google Cloud 服務上執行的 Google Cloud Managed Service for Apache Kafka 用戶端應用程式,您有下列驗證選項:

  • SASL/OAUTHBEARER (建議使用):這是 Google Cloud內用戶端最流暢且安全的方法。並使用應用程式預設憑證 (ADC),自動找出與環境相關聯的服務帳戶身分。這樣就不需要管理及發布服務帳戶金鑰等靜態憑證檔案。

  • SASL/PLAIN:這是早期開發的實用方法。 用戶端會使用長期有效的服務帳戶金鑰進行驗證。

  • mTLS:如果貴機構的標準是採用憑證驗證,則可選擇這個選項。應用程式已在 Google Cloud 設定用戶端憑證和金鑰。

如果用戶端應用程式在 Google Cloud以外的環境中執行 (例如地端部署資料中心或其他雲端服務供應商),請考慮使用下列驗證方法。根據貴機構的安全狀態和現有身分基礎架構,選擇最合適的方法。

  • 使用 SASL/OAUTHBEARER 的 Workload Identity Federation (建議使用):這是外部用戶端最安全的方法。您可以透過這項功能,授權外部系統 (例如 AWS、Microsoft Azure,或 ADFS 等內部部署身分識別提供者) 的身分,模擬Google Cloud 服務帳戶。用戶端會使用偏好的憑證取得短期 Google Cloud 存取權杖,而非管理長期服務帳戶金鑰。接著,用戶端會使用這個權杖進行驗證,大幅降低與靜態憑證檔案相關的安全性風險。

  • mTLS:這個方法與供應商無關,如果貴機構已使用公用金鑰基礎架構 (PKI) 管理服務身分識別的 TLS 憑證,就很適合採用這個方法。這項功能可讓用戶端在沒有 Google Cloud特定身分的情況下進行驗證。不過,與使用服務帳戶金鑰類似,這個方法需要您管理長期憑證 (例如用戶端憑證) 的生命週期和發布作業。

  • 使用服務帳戶金鑰的 SASL/PLAIN:這個方法可讓外部用戶端直接以 Google Cloud 身分驗證。您會下載服務帳戶金鑰 JSON 檔案,並在用戶端的 SASL/PLAIN 設定中使用該檔案。一般不建議在正式版工作負載中使用這種方法,因為這需要在用戶端管理及保護長期有效的靜態憑證。

SASL 和 mTLS 的功能比較

Managed Service for Apache Kafka 的主要驗證機制是 SASL (簡單驗證和安全層),可直接與Google Cloud的身分識別服務整合。做為基準,SASL 會使用 Google Cloud IAM 主體 (例如服務帳戶) 驗證用戶端。SASL 提供彈性授權機制:您可以使用精細的 IAM 角色和 Kafka 的存取控制清單 (ACL),管理叢集的存取權。

相較之下,mTLS 提供與供應商無關的驗證方法,不依賴 Google Cloud IAM。mTLS 會根據用戶端的 TLS 憑證驗證用戶端,身分則衍生自憑證的主體名稱。

這項區別導致授權處理方式出現重大差異。 與 SASL 主體不同,mTLS 主體只能使用 Kafka ACL 授權,無法透過 Google Cloud IAM 角色管理。

我們強烈建議為叢集設定 Kafka ACL。如果未設定任何 ACL,Kafka 預設行為會授予所有經過驗證的主體 (無論是使用 SASL 或 mTLS) 叢集的完整存取權。如要進一步瞭解如何設定 Kafka ACL,請參閱「建立 Managed Service for Apache Kafka ACL」。

Managed Service for Apache Kafka 支援 mTLS 驗證,並使用憑證授權單位服務核發的用戶端憑證。如果貴機構使用外部信任根,您可以在 CA 服務中建立從屬 CA,並鏈結至外部 CA,即可整合該信任根。

下表比較了各種驗證方法的功能。

功能 SASL/OAUTHBEARER SASL/PLAIN mTLS
主要身分 Google Cloud IAM 主體 Google Cloud IAM 主體 憑證主體名稱
憑證類型 應用程式預設憑證 (ADC) 或 OAuth 2.0 權杖 Base64 編碼的服務帳戶金鑰 用戶端憑證和私密金鑰
授權方法 Google Cloud IAM 角色或 Kafka ACL Google Cloud IAM 角色或 Kafka ACL 僅限 Kafka ACL
用途 Google Cloud上的用戶端;使用 Workload Identity 聯盟的外部用戶端 簡單的用戶端、測試情境或需要使用服務帳戶金鑰的舊版系統。 與供應商無關,非常適合地端部署、多雲端或現有 PKI 應用程式。
用戶端設定 使用專用登入處理常式類別 (Java) 或本機驗證伺服器 (非 Java) 的 JAAS 設定 使用標準 PlainLoginModule 的 JAAS 設定 (Java) 金鑰儲存區和信任儲存區屬性 (例如 security.protocol=SSL)
叢集可用性 所有叢集 所有叢集 2025 年 6 月 24 日後建立的叢集

選擇 SASL 或 mTLS

驗證方式的選擇取決於貴機構的安全政策和現有基礎架構。在大多數情況下,建議您搭配使用 SASL 和 Google Cloud IAM。

透過 SASL 搭配 Google Cloud IAM 或 Workload Identity Federation,可享有最靈活且整合的驗證和授權體驗。並使用 Google Cloud的身分識別系統做為管理權限的單一可靠資料來源。如要執行下列操作,請選擇這個路徑:

  • 使用熟悉的Google Cloud IAM 角色,集中管理 Kafka 用戶端的權限。

  • 避免在用戶端管理靜態憑證。

  • 啟用來自其他雲端 (例如 AWS、Azure) 的用戶端,或地端身分識別提供者 (例如 Okta 或 ADFS),使用 Workload Identity Federation 進行驗證。這種方法提供安全且與雲端無關的身分識別解決方案,不需要切換至其他驗證通訊協定。

如果貴機構嚴格要求採用憑證驗證,請選擇 mTLS。如果您要遷移現有的內部部署 Kafka 部署作業,且該作業已使用 TLS 憑證進行身分識別,或是公司政策規定所有應用程式都必須使用用戶端憑證,就會有這項需求。雖然 mTLS 提供強大的傳輸層安全防護,但請注意,mTLS 用戶端的授權必須完全透過 Kafka ACL 管理,這與 Google Cloud IAM 無關。

設定 SASL/PLAIN 或 SASL/OAUTHBEARER 的工作流程

如要設定用戶端,透過 SASL 驗證機制搭配 Managed Service for Apache Kafka 使用,請先授予用戶端身分權限,然後根據所選的 SASL 機制設定用戶端應用程式。以下是必要工作流程的總覽。如需設定 SASL 的詳細操作說明,請參閱「設定 SASL 驗證」。

  1. 授予 IAM 權限。您必須先將「Managed Kafka Client」(代管 Kafka 用戶端) (roles/managedkafka.client) 角色授予用戶端用於驗證的服務帳戶。這個角色提供必要的 managedkafka.clusters.connect 權限,可連線至專案中的 Kafka 叢集。

  2. 設定 Kafka 用戶端。具體用戶端設定取決於您使用 SASL/OAUTHBEARER 或 SASL/PLAIN 機制。

    適用於 SASL/OAUTHBEARER (建議使用):這項機制會使用應用程式預設憑證 ADC。設定方式取決於用戶端的語言:

    • Java 用戶端:將專用的 Google Cloud 驗證程式庫新增至應用程式的類別路徑。然後設定 Kafka 用戶端屬性,使用提供的 GcpLoginCallbackHandler 類別,系統就會自動使用 ADC 處理驗證。

      GcpLoginCallbackHandler 類別與 Kafka 的 OAUTHBEARER 驗證機制搭配使用,專為 Managed Service for Apache Kafka 設計。這個外掛程式會處理從 Google 身分識別提供者取得 JSON Web Token (JWT) 的程序,讓 Kafka 用戶端能使用 ADC 向服務進行驗證。

    • 非 Java 用戶端:在用戶端電腦上執行提供的本機驗證伺服器。這個伺服器會使用 ADC 擷取憑證,並提供給 Kafka 用戶端。接著,用戶端會設定為從這個本機伺服器的端點取得驗證權杖。

    適用於 SASL/PLAIN

    這項機制會使用使用者名稱和密碼組合。用戶端應用程式必須設定為使用 SASL_SSL 安全性通訊協定、PLAIN 機制,以及指定 PlainLoginModule 類別的 JAAS 設定。

    使用者名稱是服務帳戶的電子郵件地址。您可以透過下列兩種方式產生密碼:

    • 將服務帳戶金鑰 JSON 檔案進行 Base64 編碼。

    • 取得短期存取憑證。

  3. 設定授權。用戶端使用 SASL 成功完成驗證後,系統會根據叢集上 IAM 角色或 Kafka ACL 中定義的權限控管存取權。

SASL 限制

SASL 驗證方法有下列限制:

  • SASL 驗證本質上與 IAM 主體相關聯。如果貴機構需要嚴格區分身分,或使用非 Google 身分,則不適合使用這項功能,除非您設定了 Workload Identity Federation。Google Cloud

  • SASL 不會使用用戶端憑證進行驗證。如果機構依賴現有的 PKI 來識別應用程式,這項功能就不適合。

設定 mTLS 的工作流程

為 Managed Service for Apache Kafka 設定 mTLS 時,需要設定憑證授權單位、Kafka 叢集和 Kafka 用戶端。如需設定 mTLS 的詳細操作說明,請參閱「設定 mTLS 驗證」。

  1. 設定憑證授權單位 (CA)。您必須先在憑證授權單位服務 (CA 服務) 中建立及設定 CA 集區。如果您建立的 CA 集區位於其他專案,請務必授予 Managed Service for Apache Kafka 服務代理 (service-PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com) 存取這些集區的權限。您必須在 CA 集區內建立根憑證和從屬憑證。

  2. 設定 Kafka 叢集。建立或更新叢集,並提供已設定 CA 集區的資源 ID,即可啟用 mTLS。我們也建議設定 ssl.principal.mapping.rules 代理程式屬性,建立簡化的主體名稱,以供 ACL 使用。您可以使用 Google Cloud CLI 指令執行這項操作。

  3. 設定 Kafka 用戶端。從 CA 取得用戶端憑證,並安裝在用戶端環境中,例如 Java 金鑰儲存區。接著,用戶端應用程式必須設定正確的安全防護通訊協定 (SSL) 和金鑰存放區位置,才能連線至叢集的專屬 mTLS 啟動通訊埠 (9192)。

  4. 監控 mTLS。設定完成後,請監控 managedkafka.googleapis.com/mtls_truststore_update_count 指標,確認叢集是否定期從 CA 服務集區重新整理 CA 憑證。您也可以使用 Cloud Logging

mTLS 限制

mTLS 功能有下列限制:

  • 您只能在 2025 年 6 月 24 日後建立的 Managed Service for Apache Kafka 叢集上使用 mTLS 功能。

  • 您必須使用 Kafka ACL 設定 mTLS 主體的授權。 您無法使用 IAM 角色繫結授權 mTLS 用戶端。

  • 服務只會驗證提供 CA 服務所管理憑證的用戶端。不過,您可以在 CA 服務中建立從屬 CA,並鏈結至外部 CA,藉此整合外部信任根。

  • 您可以設定叢集,最多信任 10 個 CA 集區。

後續步驟

Apache Kafka® 是 The Apache Software Foundation 或其關聯企業在美國與/或其他國家/地區的註冊商標。