用戶端可以使用開放原始碼 Apache Kafka API 連線至 Managed Service for Apache Kafka 叢集。所有連線都必須使用 TLS 加密,不支援純文字通訊。驗證作業會透過兩種支援機制之一進行處理,每種機制都有不同的憑證類型:SASL 或 mTLS。
本文說明如何使用 SASL 方法進行驗證。用戶端會使用授權的 Identity and Access Management 主體 (例如服務帳戶) 憑證進行驗證。Managed Service for Apache Kafka 會管理所有連線的伺服器端代理程式憑證。
事前準備
建議您進一步瞭解下列主題:
將代管 Kafka 用戶端角色授予服務帳戶
您必須在包含叢集的專案中,將 roles/managedkafka.client IAM 角色授予要用來連線至叢集的服務帳戶。
代管 Kafka 用戶端角色包含所有連線所需的權限 managedkafka.clusters.connect。如要將「代管 Kafka 用戶端」角色授予服務帳戶,請按照下列步驟操作:
控制台
- 前往 Google Cloud 控制台的「IAM」(身分與存取權管理) 頁面。
前往 IAM - 確認專案已設為 Managed Service for Apache Kafka 用戶端要存取的消費者專案。
- 按一下「授予存取權」。
- 在新頁面中,在「新增主體」中輸入您使用的服務帳戶電子郵件地址。
- 在「指派角色」部分,選取「Managed Kafka 用戶端」角色。
- 按一下 [儲存]。
gcloud CLI
-
在 Google Cloud 控制台中啟用 Cloud Shell。
Google Cloud 主控台底部會開啟一個 Cloud Shell 工作階段,並顯示指令列提示。Cloud Shell 是已安裝 Google Cloud CLI 的殼層環境,並已針對您目前的專案設定好相關值。工作階段可能要幾秒鐘的時間才能初始化。
-
執行
gcloud projects add-iam-policy-binding指令:gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:SERVICE_ACCOUNT_EMAIL \ --role roles/managedkafka.client
更改下列內容:
-
PROJECT_ID 是專案 ID。
-
SERVICE_ACCOUNT_EMAIL 是服務帳戶的電子郵件地址。
-
設定 Kafka 用戶端,以便向 Google Cloud
您可以使用下列其中一種機制,向 Google Cloud 驗證 Kafka 用戶端:
OAUTHBEARER (建議使用):這個機制需要使用應用程式預設憑證 (ADC)。驗證程式庫會使用 ADC 策略,根據應用程式環境自動尋找憑證。如要進一步瞭解 ADC 尋找憑證的位置和順序,請參閱「應用程式預設憑證的運作方式」一文。
SASL/PLAIN:這個機制需要使用可從服務帳戶金鑰 JSON 檔案或存取權杖衍生的使用者名稱和密碼。
一般來說,建議使用 OAUTHBEARER。不過,SASL/PLAIN 可能更適合用於測試。
OAuthBearer 驗證
如要瞭解如何驗證開放原始碼 Kafka API,請參閱 GitHub 上的說明文件。
SASL/PLAIN 驗證
Managed Service for Apache Kafka 支援使用服務帳戶金鑰 JSON 檔案或存取權杖的 SASL/PLAIN 驗證。
服務帳戶金鑰 JSON 檔案
這個方法適用於所有 Kafka 用戶端。
為要用於用戶端的服務帳戶下載服務帳戶金鑰 JSON 檔案。
使用 Base64 編碼服務帳戶檔案,做為驗證字串。假設檔案名稱為
my_service_account_key.json。在 Linux 或 macOS 系統上,使用
base64指令 (通常預設會安裝),如下所示:base64 -w 0 < my_service_account_key.json > password.txt這個指令會執行下列動作:
base64 < my_service_account_key.json: 讀取名為my_service_account_key.json的檔案內容。使用 Base64 編碼方式編碼檔案內容。Base64 編碼可將二進位資料 (例如服務帳戶檔案中的 JSON 資料) 表示為 ASCII 文字。這通常用於透過專為文字設計的管道傳輸資料。
> password.txt:將base64指令的輸出內容 (服務帳戶檔案的 Base64 編碼版本) 重新導向至名為password.txt的新檔案。
您可以使用密碼檔案的內容,透過下列參數進行驗證。
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";更改下列內容:
SERVICE_ACCOUNT_EMAIL_ADDRESS:要用於驗證的服務帳戶電子郵件地址。CONTENTS_OF_BASE64_ENCODED_PASSWORD_FILE:您在上一個步驟取得的 Base64 編碼密碼檔案內容。這必須是單行。
驗證叢集的連入連線時,Managed Service for Apache Kafka 會檢查下列項目:
提供的使用者名稱與密碼中使用的金鑰所屬服務帳戶相符。
提供的服務帳戶主體在叢集上具有
managedkafka.clusters.connect權限 (包含在roles/managedkafka.clientIAM 角色中)。
存取權杖
取得要用於驗證的主體存取權杖。 舉例來說,取得目前 gcloud CLI 主體的存取權杖:
gcloud auth print-access-token您可以使用存取權杖,透過下列參數進行驗證。
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";更改下列內容:
PRINCIPAL_EMAIL_ADDRESS:您用來取得存取權杖的主體電子郵件地址。ACCESS_TOKEN_VALUE:您在上一個步驟中取得的存取權杖值。
驗證叢集的連入連線時,Managed Service for Apache Kafka 會檢查下列項目:
存取權杖有效且尚未過期。
所提供的使用者名稱與存取權杖相關聯的主體電子郵件地址相符。
存取權杖的主體在叢集上具有
managedkafka.clusters.connect權限 (包含在roles/managedkafka.clientIAM 角色中)。
Workload Identity Federation for GKE
Managed Service for Apache Kafka 支援使用 Workload Identity Federation for GKE,向開放原始碼 Apache Kafka API 進行驗證。SASL/PLAIN 和 SASL/OAUTHBEARER 都支援驗證。
如要搭配使用 Workload Identity Federation for GKE 與 Managed Service for Apache Kafka,您必須符合下列規定:
- 使用 GKE
1.31.1-gke.1241000以上版本。 使用
iam.gke.io/return-principal-id-as-email: "true"註解 Kubernetes 服務帳戶。 例如:apiVersion: v1 kind: ServiceAccount metadata: name: kafka-service-account annotations: iam.gke.io/return-principal-id-as-email: "true"如果您使用本機驗證伺服器,請確認您也使用
2.40.3以上版本的 google-auth 套件。
確認 GKE 主體具有 managedkafka.clusters.connect 權限 (包含在 roles/managedkafka.client IAM 角色中)。
Managed Service for Apache Kafka 不支援使用 Fleet 工作負載身分驗證開放原始碼 Apache Kafka API。或者,您也可以將 Kubernetes 服務帳戶連結至 IAM 服務帳戶。
疑難排解
如要瞭解如何排解 SASL 驗證問題,請參閱「驗證錯誤」。