创建 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 所需的 managedkafka.acls.create 权限。

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

Managed Kafka ACL 的属性

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

ACL ID

ACL ID 是集群中受管 Kafka ACL 资源的唯一标识符。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

创建受管 Kafka ACL 后,您无法更改 ACL ID。

ACL 条目

ACL 条目定义了主账号对与 ACL 匹配的集群资源拥有的特定权限。创建 Managed Kafka ACL 时,您必须指定至少一个 ACL 条目。您可以添加或移除现有 ACL 中的 ACL 条目。

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

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

主体
权限所适用的用户或服务账号。请使用以下格式:User:PRINCIPAL_EMAIL。将 PRINCIPAL_EMAIL 替换为主账号的电子邮件地址。您还可以将此字段设置为 User:*,以匹配所有主体。
操作类型
相应权限所适用的 Kafka 操作,例如 ALL、READ、WRITE、CREATE、DELETE、ALTER、DESCRIBE、CLUSTER_ACTION、DESCRIBE_CONFIGS、ALTER_CONFIGS 或 IDEMPOTENT_WRITE。该值不区分大小写。如需了解有效的操作和资源类型组合,请参阅 Apache Kafka 文档中的协议上的操作和资源。
权限类型
权限的类型。支持的值包括 ALLOW 和 DENY(不区分大小写)。
主机
对于 Managed Service for Apache Kafka,此字段必须设置为通配符 (*)。

仅限输出的 ACL 属性

创建 Managed Kafka ACL 时,服务会为其设置以下属性:

  • 资源类型:ACL 资源类型。可以是 CLUSTER、TOPIC、GROUP 或 TRANSACTIONAL_ID。

  • 资源名称:ACL 资源名称或匹配的前缀。对于 CLUSTER 资源类型,该值始终为 "kafka-cluster"。可以是通配符字面值 "*"。

  • ACL 模式类型:LITERAL 或 PREFIXED。

这些字段仅限输出。您可以使用它们将 Managed Kafka ACL 资源映射到 Kafka ACL 绑定。

ETag

当您创建、查看或更新 Managed Kafka ACL 时,响应会包含 ETag。ETag 用于乐观并发控制。对受管 Kafka ACL 的更新操作必须包含 ETag,以确保更改应用于 Kafka 集群中存在的同一版本。如需了解详情,请参阅替换受管 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:操作类型,例如 READ 或 CREATE。

  • PERMISSION_TYPE:主账号对相应操作拥有的权限。请指定 ALLOW 或 DENY。

在文件中指定 ACL 条目

gcloud

  1. 创建一个本地文件,用于以 YAML 格式定义 ACL 条目:

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

    对于 aclEntries 列表中的每个 ACL 条目,请替换以下内容:

    • PRINCIPAL:ACL 条目的主体。

    • OPERATION:操作类型,例如 READ 或 CREATE。

    • PERMISSION_TYPE:主账号对相应操作拥有的权限。请指定 ALLOW 或 DENY。

  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® 是 Apache Software Foundation 或其关联公司在美国和/或其他国家/地区的注册商标。