在 Managed Service for Apache Kafka 中,您可以結合使用 Identity and Access Management (IAM) 權限和 Kafka 存取控制清單 (ACL),控管 Kafka 叢集和主題的存取權:
使用 IAM 授予管理存取權限,並允許用戶端在使用 SASL 驗證時連線至叢集。
使用 Kafka ACL,從開放原始碼 Apache Kafka 用戶端存取資料及執行作業。
本頁面概略說明這些存取控管選項。
代管型 Kafka 服務代理
Managed Service for Apache Kafka 會使用服務代理存取 Google Cloud資源。啟用 Managed Kafka API 後,系統會建立 Managed Kafka 服務代理。
Managed Kafka 服務代理是 ID 為 service-PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com 的主體,其中 PROJECT_NUMBER 是您的 Google Cloud 專案編號。
這項服務代理需要專案的代管 Kafka 服務代理 (roles/managedkafka.serviceAgent) IAM 角色。啟用 API 時,系統會自動授予這個角色。如果撤銷這個角色,Managed Service for Apache Kafka 就無法建立、更新或刪除叢集。
如要執行某些工作,代管 Kafka 服務代理需要額外角色。舉例來說,如果您使用 Kafka Connect,可能需要授予服務代理存取來源和接收端的權限,例如 Pub/Sub 或 BigQuery。
用戶端存取控管
一般來說,您可以透過兩種方式對 Managed Service for Apache Kafka 資源執行作業:
Managed Kafka API。這個選項包括直接呼叫 REST API,以及使用 Google Cloud CLI、 Google Cloud 控制台或用戶端程式庫。
開放原始碼 Apache Kafka API。許多開放原始碼 Kafka 用戶端都使用這個 API。
使用 Managed Kafka API 控管存取權
使用 Managed Kafka API 時,授權作業會由 Identity and Access Management (IAM) 執行。如要對資源執行作業,主體必須具備該作業所需的 Managed Kafka API 權限。每項工作的說明文件都會列出該工作所需的 IAM 角色。舉例來說,如要允許主體建立 Kafka 主題,請授予代管 Kafka 主題編輯者角色。
使用 Apache Kafka API 控管存取權
使用 Apache Kafka API 的用戶端會透過 SASL 或雙向 TLS (mTLS) 驗證進行驗證。
如果用戶端使用 SASL 連線,驗證主體需要
managedkafka.clusters.connectIAM 權限。如要授予這項權限,請將代管 Kafka 用戶端 (roles/managedkafka.client) 角色授予主體。如果用戶端使用 mTLS 連線,則不需要
managedkafka.clusters.connect權限。而是使用用戶端憑證進行驗證。
用戶端連線後,服務會使用 Kafka ACL 授權用戶端執行作業,例如讀取或變更資源。
合併存取控管
為確保全面安全,請務必設定下列項目:
管理存取權的 IAM 權限。
如果用戶端使用 SASL,則需要連線至叢集的 IAM 權限。
Kafka ACL:用於叢集內資料存取,以及開放原始碼 Apache Kafka 用戶端的作業,無論驗證方式為何。
舉例來說,假設您想禁止主體編輯主題。為此,您需要設定下列存取控管機制:
拒絕授予主體
managedkafka.topics.update權限,防止主體使用 Managed Kafka API 更新主題 (例如使用 Google Cloud 控制台)。您也可以選擇拒絕主體的
managedkafka.clusters.connect權限,防止主體使用 SASL 驗證連線至叢集。如果主體因其他原因需要 SASL 存取權,或使用 mTLS 連線,請建立 Kafka ACL,拒絕對主題執行
ALTER、ALTER_CONFIGS和DELETE作業。如需具體範例,請參閱「拒絕修改所有主題」。
資源層級存取控管
如要將主體的 IAM 權限限制在專案內特定的 Managed Service for Apache Kafka 資源 (例如個別叢集或主題),請使用 IAM 條件。
以下範例顯示的 IAM 條件,僅在資源類型為 managedkafka.googleapis.com/Topic 且資源名稱結尾為 "test-topic" 時,才允許存取:
{
"expression": "resource.name.endsWith(\"topic-1\") &&\nresource.type == \"managedkafka.googleapis.com/Topic\"",
"title": "topic-1",
"description": "Grant access only to topic-1"
}
部分 Managed Service for Apache Kafka 要求 (例如建立或更新叢集) 會傳回長時間執行的作業。如果您在叢集層級授予存取權,除了每個叢集資源條件外,也請一併納入 managedkafka.googleapis.com/Operation 類型所有資源的存取權。這項權限可確保主體能啟動作業並監控進度。
後續步驟
如要進一步瞭解 IAM 的基本概念,請參閱「IAM 總覽」。
如要瞭解 IAM 政策的不同元件,請參閱「IAM 政策」。
如要瞭解如何使用 Kafka ACL 存取叢集內資料,請參閱「Kafka ACL」。