建立代管 Kafka ACL

透過代管 Kafka 存取控制清單 (ACL),您可以對 Managed Service for Apache Kafka 叢集內的操作進行精細授權。建立 Managed Kafka ACL 資源時,會為特定 Kafka 資源模式定義一組權限規則。如需基本概念,請參閱「使用 IAM 和 Kafka ACL 控管存取權」。

事前準備

請確認您已有 Managed Service for Apache Kafka 叢集

必要角色和權限

如要取得建立代管 Kafka ACL 所需的權限,請要求管理員授予您專案的代管 Kafka ACL 編輯者 (roles/managedkafka.aclEditor) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

這個預先定義的角色具備 managedkafka.acls.create 權限,可建立代管 Kafka ACL。

您或許還可透過自訂角色或其他預先定義的角色取得這項權限。

代管 Kafka ACL 的屬性

建立代管 Kafka ACL 資源時,您必須定義下列屬性:

ACL ID

ACL ID 是叢集中代管 Kafka ACL 資源的專屬 ID。ACL ID 也會定義 ACL 適用的叢集資源。ACL ID 的命名模式如下:

  • 適用於叢集的 ACL: cluster

  • 適用於叢集中特定資源的 ACL:

    • 主題:topic/RESOURCE_NAME
    • 消費者群組:consumerGroup/RESOURCE_NAME
    • 交易 ID:transactionalId/RESOURCE_NAME

    RESOURCE_NAME 替換為資源名稱。

    舉例來說,如要授予名為 my-topic 的主題權限,ACL ID 為 topic/my-topic

  • 適用於符合前置字元資源的 ACL:

    • 主題:topicPrefixed/PREFIX
    • 消費者群組:consumerGroupPrefixed/PREFIX
    • 交易 ID:transactionalIdPrefixed/PREFIX

    PREFIX 替換為要比對的前置字串。

    舉例來說,如要授予以 test- 開頭的所有主題權限,ACL ID 為 topicPrefixed/test-

  • 適用於特定類型所有資源的 ACL:

    • 所有主題:allTopics
    • 所有消費者群組:allConsumerGroups
    • 所有交易 ID:allTransactionalIds

建立 Managed Kafka ACL 後,就無法變更 ACL ID。

ACL 項目

ACL 項目會定義主體對符合 ACL 的叢集資源擁有的特定權限。建立代管 Kafka ACL 時,您必須指定至少一個 ACL 項目。您可以在現有 ACL 中新增或移除 ACL 項目。

每個代管 Kafka ACL 資源最多可有 100 個 ACL 項目。 如果單一資源模式需要更多規則,您必須使用標準 Apache Kafka 工具直接管理 ACL。

每個 ACL 項目都包含下列欄位:

主體
權限適用的使用者或服務帳戶。請使用下列格式:User:PRINCIPAL_EMAIL。將 PRINCIPAL_EMAIL 替換為主體的電子郵件地址。您也可以將這個欄位設為 User:*,這會比對每個主體。
作業類型
權限適用的 Kafka 作業,例如 ALLREADWRITECREATEDELETEALTERDESCRIBECLUSTER_ACTIONDESCRIBE_CONFIGSALTER_CONFIGSIDEMPOTENT_WRITE。這個值不區分大小寫。如要瞭解有效的作業和資源類型組合,請參閱 Apache Kafka 說明文件中的「Operations and Resources on Protocols
權限類型
權限類型。支援的值為 ALLOWDENY (不區分大小寫)。
主機
這個欄位必須設為 Managed Service for Apache Kafka 的萬用字元 (*)。

僅供輸出的 ACL 屬性

建立代管 Kafka ACL 時,服務會為其設定下列屬性:

  • 資源類型:ACL 資源類型。可以是 CLUSTERTOPICGROUPTRANSACTIONAL_ID

  • 資源名稱:ACL 資源名稱或相符的前置字元。對於 CLUSTER 資源類型,值一律為 "kafka-cluster"。可以是萬用字元常值 "*"

  • ACL 模式類型:LITERALPREFIXED

這些欄位僅供輸出。您可以使用這些角色,將代管 Kafka ACL 資源對應至 Kafka ACL 繫結。

ETag

建立、查看或更新代管 Kafka ACL 時,回應會包含 ETag。ETag 用於開放式並行控制。更新代管 Kafka ACL 的作業時,必須包含 ETag,確保變更套用至 Kafka 叢集中現有的相同版本。詳情請參閱「取代 Managed Kafka ACL 中的 ACL 項目」。

如果 ETag 包含終端 'T' 字元,表示 ACL 項目遭到截斷。Kafka 叢集上還有更多 ACL 項目,但由於重複欄位有上限,因此無法在 ACL 說明中傳回。

建立 ACL

建立受管理 Kafka ACL 時,您可以直接在指令列中指定 ACL 項目,也可以建立包含 ACL 項目內容的檔案。

在指令列中指定 ACL 項目

gcloud

請執行 gcloud managed-kafka acls create 指令。

gcloud managed-kafka acls create ACL_ID \
  --cluster=CLUSTER_ID \
  --location=LOCATION \
  --acl-entry=principal=PRINCIPAL,operation=OPERATION,permission-type=PERMISSION_TYPE,host=*

更改下列內容:

  • ACL_ID:新 ACL 資源的 ID。這個 ID 會定義 ACL 適用的叢集資源。詳情請參閱「ACL ID」。

  • CLUSTER_ID Kafka 叢集的 ID。

  • LOCATION Kafka 叢集的區域。

針對每個 ACL 項目,指定個別的 --acl-entry 旗標,並取代下列項目:

  • PRINCIPAL:ACL 項目適用的主體

  • OPERATION作業類型,例如 READCREATE

  • PERMISSION_TYPE:主體對作業擁有的權限。請指定 ALLOWDENY

在檔案中指定 ACL 項目

gcloud

  1. 建立本機檔案,以 YAML 格式定義 ACL 項目:

    ---
    aclEntries:
    - principal: PRINCIPAL
      operation: OPERATION
      permissionType: PERMISSION_TYPE
      host: "*"
    - principal: ...
      operation: ...
      permissionType: ...
      host: "*"
    

    aclEntries 清單中,針對每個 ACL 項目,請替換下列項目:

    • PRINCIPAL:ACL 項目適用的主體

    • OPERATION作業類型,例如 READCREATE

    • PERMISSION_TYPE:主體對作業擁有的權限。請指定 ALLOWDENY

  2. 請執行 gcloud managed-kafka acls create 指令。

    gcloud managed-kafka acls create ACL_ID \
      --cluster=CLUSTER_ID \
      --location=LOCATION \
      --acl-entries-from-file=FILE_PATH
    

    更改下列內容:

    • ACL_ID:新 ACL 資源的 ID。這個 ID 會定義 ACL 適用的叢集資源。詳情請參閱 ACL ID

    • CLUSTER_ID Kafka 叢集的 ID。

    • LOCATION Kafka 叢集的區域。

    • FILE_PATH:包含 ACL 項目清單的本機檔案路徑。

後續步驟

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