本文說明如何使用 Google Cloud Identity and Access Management (IAM),在 Google Cloud Managed Service for Apache Kafka 中控管存取權。
IAM 可在 Google Cloud 資源層級控管存取權:
IAM 控制項可決定哪些使用者能透過 Google Cloud API 和工具管理 Managed Service for Apache Kafka 資源,例如叢集、主題或 ACL。這類工具包括Google Cloud 控制台、gcloud CLI 或用戶端程式庫。
使用標準 Apache Kafka 用戶端時,這些控制項也會決定誰有權首次連線至 Managed Service for Apache Kafka 叢集。
如要進一步瞭解 IAM,請參閱 IAM 說明文件。
IAM 總覽
IAM 可對特定Google Cloud 資源授予精細的存取權,避免未經授權者存取其他資源。IAM 採用最低權限安全原則,可確保您僅授予使用者必要的資源存取權限。
您可以透過 IAM 控管「哪些主體」具備「哪些資源」的「何種存取權」(角色)。
主體
主體可以是 Google 帳戶 (用於使用者)、服務帳戶 (用於應用程式和虛擬機器)、Google 群組,或者是能存取資源的 Google Workspace 或 Cloud Identity 網域。
詳情請參閱「IAM 總覽:主體」。
特殊主體:代管型 Kafka 服務代理
Google Cloud Managed Service for Apache Kafka 會使用稱為服務代理的 Google Cloud 代管服務帳戶存取資源。如果您已啟用 API,系統會建立服務代理。服務代理可透過電子郵件識別:
service-PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com。
Managed Service for Apache Kafka 服務代理需要專案的「Managed Kafka Service Agent」(roles/managedkafka.serviceAgent) 角色,才能管理 Managed Service for Apache Kafka 資源。啟用 API 時,系統會自動授予這個角色。如果撤銷這個角色,Managed Service for Apache Kafka 就無法建立、更新或刪除叢集。
資源
您可以在 Managed Service for Apache Kafka 中授予存取權的資源範例包括:專案、叢集、主題和消費者群組。
部分 API 方法需要多項資源的權限。舉例來說,「建立 Connect 叢集」工作需要 Connect 叢集資源父項位置的 managedkafka.connectClusters.create 權限,以及叢集資源的 managedkafka.clusters.attachConnectCluster 權限。
角色
角色是一組權限。權限決定能對資源執行哪些作業。授予角色之後,主體就會取得該角色具備的所有權限。
您可以將一或多個角色授予主體。
與其他 Google Cloud 產品類似,Managed Service for Apache Kafka 支援三種角色:
基本角色:在 IAM 推出前就存在的高度放任角色。如要進一步瞭解基本角色,請參閱「基本角色」。
預先定義的角色:可精細控管特定資源的存取權。 Google Cloud 如要進一步瞭解預先定義的角色,請參閱預先定義的角色。本節稍後會介紹 Managed Service for Apache Kafka 預先定義的角色。
自訂角色:有助於強制執行最低權限原則。如要進一步瞭解自訂角色,請參閱自訂角色。
舉例來說,Managed Kafka Viewer (roles/managedkafka.viewer) 預先定義的角色提供 Managed Service for Apache Kafka 資源的唯讀存取權。具有這個角色的主體可以查看叢集、主題和消費者群組,但無法建立、更新或刪除這些項目。
如要進一步瞭解如何指派角色,請參閱授予、變更及撤銷存取權的說明文件。
如要判斷特定工作需要哪些權限,請參閱「Managed Service for Apache Kafka 角色和權限」參考頁面。
存取權控管的運作方式
使用 Google Cloud API 存取 Managed Service for Apache Kafka 的授權是由 IAM 處理。使用 SASL 驗證的開放原始碼 Apache Kafka 用戶端存取授權,會由 IAM 檢查。
當用戶端使用 SASL 連線時,IAM 會先檢查主體是否具有
managedkafka.clusters.connect權限。如果檢查失敗,系統就會拒絕連線。當用戶端使用 mTLS 連線時,系統會略過這項初始 IAM 權限檢查,授權作業則完全由 Kafka ACL 處理。
如要全面提升安全性,請設定下列項目:
管理存取權的 IAM 權限。
使用 SASL 時,連線存取權的 IAM 權限。
Kafka ACL,可透過開放原始碼 Apache Kafka 用戶端存取叢集內資料及執行作業,不受驗證方法影響。
舉例來說,假設您要禁止主體編輯主題。您可以透過下列方式達成此目的:
完全透過 IAM。拒絕主體的「代管 Kafka 主題編輯者」 (
roles/managedkafka.topicEditor) 和「代管 Kafka 用戶端」 (roles/managedkafka.client) 角色。這項設定會完全限制透過 API 編輯主題,並禁止使用 SASL 存取任何 Kafka API。 Google Cloud這項設定不會禁止使用 mTLS 的連線。搭配使用 Kafka ACL 和 IAM。如果主體使用 mTLS 或需要 SASL 存取權才能執行其他作業,就必須使用這個方法。使用 Kafka ACL 限制下列作業:
在叢集層級建立 (用於建立主題)。
在主題層級進行 Alter、AlterConfigs、Delete (用於修改和刪除主題)。
您可以根據主體是否需要存取 Kafka API,以及使用的驗證方法,選擇適當的方法。
在專案層級設定存取權控管
如要在專案層級設定存取權控管選項,請參閱「管理專案、資料夾和機構的存取權」一文。
在資源層級設定存取權控管
部分 Managed Service for Apache Kafka 要求 (例如叢集建立或更新) 是長時間執行的作業。如要允許主體執行這些動作,除了特定叢集資源外,請授予主體 managedkafka.googleapis.com/Operation 資源的存取權。
這項設定可確保主體能啟動作業並監控進度。
以下範例是在名為 "test-topic" 的主題上設定的 IAM 條件:
{'expression': 'resource.name.endsWith('test-topic') 'title': 'SampleIAMCondition'}`.
這個範例顯示的 IAM 條件會檢查資源名稱是否以 test-topic 結尾。如果是,則條件為 true。這項特定條件稱為 SampleIAMCondition,可用於 IAM 政策,限制只有這個特定主題的存取權。
部分 Managed Service for Apache Kafka 要求 (例如叢集建立或更新) 會傳回長時間執行的作業。如要在叢集層級授予存取權,除了每個叢集資源的條件外,請一併納入類型為 managedkafka.googleapis.com/Operation 的所有資源存取權。這個程序可確保主體能啟動作業並監控進度。
跨專案存取權控管
如要授權其他專案中的用戶端存取叢集,請將「Managed Kafka Client」 (roles/managedkafka.client) 角色授予叢集專案中用戶端的服務帳戶。
舉例來說,如要允許 project-B 中的 Compute Engine VM 存取 project-A 中的叢集,請在 project-A 中將「Managed Kafka Client」(roles/managedkafka.client) 角色授予 project-B 中 Compute Engine VM 的服務帳戶。
後續步驟
如要進一步瞭解身分與存取權管理 (IAM) 的基本概念,請參閱身分與存取權管理總覽。
如要瞭解 IAM 政策的各個元件,請參閱「IAM 政策」。
如要瞭解如何使用 Kafka ACL 存取叢集內資料,請參閱「Kafka ACL」。
如要查看 Managed Service for Apache Kafka 角色和權限的完整清單,請參閱「Managed Service for Apache Kafka 角色和權限」。