Skip to main content
本文介绍 Kafka ACL 功能的基本概念、相关约束以及如何在 AutoMQ 实例中开启并使用 ACL 功能。

Kafka ACL 概念

概述

Apache Kafka 提供 ACL 功能,支持 Kafka 客户端进行身份校验和权限验证。AutoMQ 100% 兼容 Apache Kafka,因此使用 AutoMQ 实例时可以开启并使用 Kafka ACL 功能。
使用 Kafka ACL 需注意如下约束:版本约束: 需要确保 AutoMQ 实例版本>= 1.10.x,否则需要先升级版本再开启。可选开启: AutoMQ 实例默认没有开启 ACL,用户可在创建实例或后续,手工开启 ACL。访问协议: AutoMQ 仅支持通过 VPC 内网 SASL_PLAINTEXT、SASL_SSL 和 mTLS 协议访问集群。资源类型: AutoMQ 当前支持 Kafka Cluster、Topic、Consumer Group、Transaction ID 类型的资源进行 ACL 权限控制,不支持 DelegationToken 类型。如有需求,请参考获取人工服务▸联系我们。

ACL 用户

在 Kafka ACL 功能里,用户是 ACL 进行身份识别的主体。Kafka 客户端通过访问协议透传自己的用户标识,Kafka 服务端进行身份识别并确认当前客户端请求对应的用户,然后进行后续的权限验证等操作。 需要注意 Kafka ACL 用户和 AutoMQ 环境成员的区别:
注意当使用 mTLS 协议访问 AutoMQ 实例时,服务端会默认将客户端证书的身份映射到 ACL 用户。映射规则默认设置为 RULE:.*CN=([^,]+).*/$1/。举例:客户端证书身份信息为:CN=user01,O=xxxx,OU=xxx,L=xxx,S=xxx,C=xxx则 AutoMQ 提取 CN 字段,并拼接出 Principal= User:user01。

ACL 授权策略

Apache Kafka 通过授权策略定义不同的用户可以访问的资源范围以及对应可以执行的操作列表。参考 Apache Kafka 的设计文档。AutoMQ 实例的授权策略包含如下信息: AutoMQ 定义了操作组用于简化授权操作,其中操作组和 Kafka 操作的映射关系如下表:
资源类型
操作组
包含的操作
推荐场景
Cluster
All
  • Alter
  • AlterConfigs
  • ClusterAction
  • Create
  • Describe
  • DescribeConfigs
  • All
All 操作组约定了对 Kafka 集群(实例)全部的操作权限。一般推荐授权给 Kafka UI、CLI 工具类的用户身份。
Topic
All
  • Alter
  • AlterConfigs
  • Create
  • Delete
  • Describe
  • DescribeConfigs
  • Read
  • Write
All 操作组约定了对单个 Topic 所有的操作权限。一般推荐授权给既需要生产权限、又需要订阅权限的用户身份。
Produce
  • Create
  • Write
  • Describe
Produce 操作组约定了对单个 Topic 生产消息的最小操作范围。推荐授权给消息生产的用户身份。
Consume
  • Read
  • Describe
Consume 操作组约定了对单个 Topic 订阅消息的最小操作范围。推荐授权给消息订阅的用户身份。

如需使用 Consumer Group 订阅消息,除授权 Topic 的 Consume 操作组,还需要对目标 Consumer Group 进行授权。

Consumer Group
All
  • Delete
  • Describe
  • Read
All 操作组约定了使用特定 Consumer Group 的所有操作权限。推荐授权给消息订阅的用户身份。

如需使用 Consumer Group 订阅消息,除了授权 Consumer Group ,还需要对目标 Topic 授予 Consume 操作组权限。

TransactionID
All
  • Describe
  • Write
All 操作组约定了针对特定 TransactionID 允许读取状态和提交事务的操作权限。推荐授权给需要发送事务消息的用户身份。

使用 Kafka ACL

在 AutoMQ 实例中使用 Kafka ACL 功能,参考如下流程: 需要注意的是:
  • 创建实例时,默认没有开启 ACL,此时客户端通过 PLAINTEXT 协议,匿名访问集群,拥有所有操作的权限。
  • 开启 ACL 后,PLAINTEXT 协议仍然提供服务,但应该立即切换所有的客户端应用,使用支持身份识别和权限验证的 SASL_PLAINTEXT 接入点,防止未授权访问。切换完成后,关闭 PLAINTEXT 协议接入点。