创建 Managed Kafka ACL

托管式 Kafka 访问权限控制列表 (ACL) 可为 Managed Service for Apache Kafka 集群中的操作提供精细的授权。创建托管 Kafka ACL 资源会为特定的 Kafka 资源模式定义一组权限规则。如需了解基本概念,请参阅使用 IAM 和 Kafka ACL 进行访问权限控制

准备工作

确保您已拥有 Managed Service for Apache Kafka 集群

所需的角色和权限

如需获得创建受管 Kafka ACL 所需的权限,请让您的管理员为您授予项目的 Managed Kafka ACL Editor (roles/managedkafka.aclEditor) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

此预定义角色包含创建受管 Kafka ACL 所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

如需创建受管理的 Kafka ACL,需要具备以下权限:

  • 在父集群上授予此权限: managedkafka.acls.create

您也可以使用自定义角色或其他预定义角色来获取这些权限。

Managed Kafka ACL Editor (roles/managedkafka.aclEditor) 角色授予创建、查看、更新和删除 ACL 资源的权限。如需详细了解该角色,请参阅 Managed Service for Apache Kafka 预定义角色

托管 Kafka ACL 的属性

创建受管理的 Kafka ACL 资源时,您必须定义以下属性:

ACL ID

这是集群和位置内托管 Kafka ACL 资源的唯一标识符。ACL_ID 的结构还定义了 ACL 规则所应用的资源模式(资源类型、资源名称、模式类型)。

根据您要针对 ACL 绑定定位的资源模式,选择一个 ACL_ID

  • 集群cluster(适用于集群资源本身)

  • 特定主题topic/{topic_name}

  • 特定群组consumerGroup/{group_name}

  • 具体交易 IDtransactionalId/{transactional_id}

  • 所有带前缀的主题topicPrefixed/{prefix}

  • 具有前缀的所有消费群组consumerGroupPrefixed/{prefix}

  • 所有带前缀的交易 IDtransactionalIdPrefixed/{prefix}

  • 所有主题allTopics(表示 topic/*

  • 所有组allConsumerGroups(表示 consumerGroup/*

  • 所有交易 IDallTransactionalIds(表示 transactionalId/*

如需了解详情,请参阅 Managed Service for Apache Kafka 资源命名指南

ACL ID 创建后便无法更改。它是不可变的。

ACL 条目

这是适用于由 ACL ID 定义的资源模式的具体权限规则的列表。

  • 创建资源时,您必须提供至少一个 ACL 条目;不允许使用空列表。

  • 每个托管 Kafka ACL 资源允许的条目数上限为 100。如果您需要为单个资源模式设置更多规则,则需要使用标准 Apache Kafka 工具直接管理 ACL。

  • 每个 ACL 条目都包含以下字段:

    • 主账号:规则所适用的用户或服务账号。使用 User:{google_service_account_email} 格式指定,或使用通配符 User:*

    • 操作:Kafka 操作类型,例如 ALLREADWRITECREATEDELETEALTERDESCRIBECLUSTER_ACTIONDESCRIBE_CONFIGSALTER_CONFIGSIDEMPOTENT_WRITE(不区分大小写)。如需了解有效的操作和资源类型组合,请参阅 Apache Kafka 文档中的协议上的操作和资源

    • 权限类型ALLOWDENY 其中之一(不区分大小写)。

    • 主机:必须针对 Managed Service for Apache Kafka 设置为通配符 *

您可以使用 --acl-entry 标志直接在命令行中提供这些条目,也可以使用 --acl-entries-from-file 标志提供 JSON 或 YAML 文件。

仅限输出的资源模式属性

创建 ACL 时,Managed Service for Apache Kafka 会根据提供的 ACL ID 填充以下资源模式字段:

  • 资源类型:从名称派生的 ACL 资源类型。可以是 CLUSTERTOPICGROUPTRANSACTIONAL_ID

  • 资源名称:根据名称派生的 ACL 资源名称(或匹配的前缀,对于 PREFIXED 模式类型)。对于 CLUSTER 资源类型,此值始终为 "kafka-cluster"。可以是通配符字面量 "*"

  • ACL 模式类型:从名称派生的 ACL 模式类型。LITERALPREFIXED 中的一个。

这些字段仅限输出,旨在方便将 Managed Kafka ACL 资源映射到 Kafka ACL 绑定。

ETag

Etag 用于并发控制。在对 GetAclCreateAcl 操作的响应中会返回 ETag。调用方必须将该 ETag 放入对 UpdateAcl 的请求中,以确保其更改应用于 Kafka 集群中存在的相同版本的 ACL 条目。

Etag 中的终端 'T' 字符表示 ACL 条目被截断。Kafka 集群上存在更多 ACL 条目,但由于重复字段限制,无法在 ACL 中返回这些条目。

创建 ACL

  1. Install the Google Cloud CLI.

  2. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. 运行 gcloud managed-kafka acls create 命令:

    gcloud managed-kafka acls create ACL_ID \
      --cluster=CLUSTER_ID \
      --location=LOCATION \
      --acl-entries-from-file=PATH_TO_FILE | \
      --acl-entry=principal=PRINCIPAL,operation=OPERATION, \
      permission-type=PERMISSION-TYPE,host=HOST \

    替换以下内容:

    • ACL_ID(必需):Managed Kafka ACL 资源的唯一 ID。这定义了资源模式。如需详细了解 ACL ID,请参阅 ACL ID
    • CLUSTER_ID(必需):创建 ACL 资源的集群的 ID。
    • LOCATION(必需):集群所在的区域,例如 us-central1。请参阅支持的地区
    • 您必须指定以下标志之一,以提供 ACL 条目:
      • PATH_TO_FILE(必需):本地 JSON 或 YAML 文件的路径,其中包含采用所需格式的 ACL 条目列表。
      • --acl-entry=principal=PRINCIPAL,operation=OPERATION, permission-type=PERMISSION-TYPE,host=HOST(必需): 直接指定单个 ACL 条目。针对要添加的每个条目重复使用此标志。

使用 --acl-entry

运行 gcloud managed-kafka acls create 命令以直接提供 ACL 条目。您可以多次运行该命令,以便为 ACL 指定多个 ACL 条目。

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

替换以下内容:

  • ACL_ID(必需):新 ACL 资源的 ID,例如 topic/my-topiccluster

  • CLUSTER_ID(必需):集群的 ID。

  • LOCATION(必需):集群的区域,例如 us-central1

  • --acl-entry(必需):指定一个 ACL 条目。重复使用该标志可指定多个条目。

    • PRINCIPAL_1PRINCIPAL_2:ACL 条目的主账号,例如 'User:admin@example.iam.gserviceaccount.com'User:*'

    • OPERATION_1OPERATION_2:操作类型,例如 ALLREAD

    • PERMISSION_1PERMISSION_2:权限类型,例如 ALLOWDENY

    • HOST_1HOST_2:ACL 条目的主机。对于 Google Cloud Managed Service for Apache Kafka,此值必须设置为通配符 '*'

使用 --acl-entries-from-file

  1. 创建一个本地文件(例如 acl_entries.yaml),其中包含 YAML 格式的必需 ACL 条目:

    ---
    aclEntries:
    - principal: User:admin@project.iam.gserviceaccount.com
      operation: READ
      permissionType: ALLOW
      host: "*"
    - principal: User:admin@project.iam.gserviceaccount.com
      operation: WRITE
      permissionType: ALLOW
      host: "*"
    
  2. 运行 gcloud managed-kafka acls create 命令,并引用该文件:

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

    替换以下内容:

    • ACL_ID(必需):新 ACL 资源的 ID,例如 topic/my-topiccluster

    • CLUSTER_ID(必需):集群的 ID。

    • LOCATION(必需):集群所在的区域,例如 us-central1

    • acl_entries.yaml(必需):包含 ACL 条目列表的本地文件的路径。

后续步骤

Apache Kafka® 是 Apache Software Foundation 或其关联公司在美国和/或其他国家/地区的注册商标。