托管式 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}具体交易 ID:
transactionalId/{transactional_id}所有带前缀的主题:
topicPrefixed/{prefix}具有前缀的所有消费群组:
consumerGroupPrefixed/{prefix}所有带前缀的交易 ID:
transactionalIdPrefixed/{prefix}所有主题:
allTopics(表示topic/*)所有组:
allConsumerGroups(表示consumerGroup/*)所有交易 ID:
allTransactionalIds(表示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 操作类型,例如
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-entry 标志直接在命令行中提供这些条目,也可以使用 --acl-entries-from-file 标志提供 JSON 或 YAML 文件。
仅限输出的资源模式属性
创建 ACL 时,Managed Service for Apache Kafka 会根据提供的 ACL ID 填充以下资源模式字段:
资源类型:从名称派生的 ACL 资源类型。可以是
CLUSTER、TOPIC、GROUP或TRANSACTIONAL_ID。资源名称:根据名称派生的 ACL 资源名称(或匹配的前缀,对于
PREFIXED模式类型)。对于CLUSTER资源类型,此值始终为"kafka-cluster"。可以是通配符字面量"*"。ACL 模式类型:从名称派生的 ACL 模式类型。
LITERAL或PREFIXED中的一个。
这些字段仅限输出,旨在方便将 Managed Kafka ACL 资源映射到 Kafka ACL 绑定。
ETag
Etag 用于并发控制。在对 GetAcl 和 CreateAcl 操作的响应中会返回 ETag。调用方必须将该 ETag 放入对 UpdateAcl 的请求中,以确保其更改应用于 Kafka 集群中存在的相同版本的 ACL 条目。
Etag 中的终端 'T' 字符表示 ACL 条目被截断。Kafka 集群上存在更多 ACL 条目,但由于重复字段限制,无法在 ACL 中返回这些条目。
创建 ACL
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init 运行
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-topic或cluster。CLUSTER_ID(必需):集群的 ID。LOCATION(必需):集群的区域,例如us-central1。--acl-entry(必需):指定一个 ACL 条目。重复使用该标志可指定多个条目。PRINCIPAL_1、PRINCIPAL_2:ACL 条目的主账号,例如'User:admin@example.iam.gserviceaccount.com或'User:*'。OPERATION_1、OPERATION_2:操作类型,例如ALL或READ。PERMISSION_1、PERMISSION_2:权限类型,例如ALLOW或DENY。HOST_1、HOST_2:ACL 条目的主机。对于 Google Cloud Managed Service for Apache Kafka,此值必须设置为通配符'*'。
使用 --acl-entries-from-file
创建一个本地文件(例如
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: "*"运行
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-topic或cluster。CLUSTER_ID(必需):集群的 ID。LOCATION(必需):集群所在的区域,例如us-central1。acl_entries.yaml(必需):包含 ACL 条目列表的本地文件的路径。