Kafka ACL 概念
概述
Apache Kafka 提供 ACL 功能,支持 Kafka 客户端进行身份校验和权限验证。AutoMQ 100% 兼容 Apache Kafka,因此使用 AutoMQ 实例时可以开启并使用 Kafka ACL 功能。ACL 用户
在 Kafka ACL 功能里,用户是 ACL 进行身份识别的主体。Kafka 客户端通过访问协议透传自己的用户标识,Kafka 服务端进行身份识别并确认当前客户端请求对应的用户,然后进行后续的权限验证等操作。 需要注意 Kafka ACL 用户和 AutoMQ 环境成员的区别:ACL 授权策略
Apache Kafka 通过授权策略定义不同的用户可以访问的资源范围以及对应可以执行的操作列表。参考 Apache Kafka 的设计文档。AutoMQ 实例的授权策略包含如下信息:
AutoMQ 定义了操作组用于简化授权操作,其中操作组和 Kafka 操作的映射关系如下表:
| 资源类型 | 操作组 | 包含的操作 | 推荐场景 |
|---|---|---|---|
| Cluster | All |
| All 操作组约定了对 Kafka 集群(实例)全部的操作权限。一般推荐授权给 Kafka UI、CLI 工具类的用户身份。 |
| Topic | All |
| All 操作组约定了对单个 Topic 所有的操作权限。一般推荐授权给既需要生产权限、又需要订阅权限的用户身份。 |
| Produce |
| Produce 操作组约定了对单个 Topic 生产消息的最小操作范围。推荐授权给消息生产的用户身份。 | |
| Consume |
| Consume 操作组约定了对单个 Topic 订阅消息的最小操作范围。推荐授权给消息订阅的用户身份。 | |
| Consumer Group | All |
| All 操作组约定了使用特定 Consumer Group 的所有操作权限。推荐授权给消息订阅的用户身份。 |
| TransactionID | All |
| All 操作组约定了针对特定 TransactionID 允许读取状态和提交事务的操作权限。推荐授权给需要发送事务消息的用户身份。 |
使用 Kafka ACL
在 AutoMQ 实例中使用 Kafka ACL 功能,参考如下流程:
- 创建实例时,默认没有开启 ACL,此时客户端通过 PLAINTEXT 协议,匿名访问集群,拥有所有操作的权限。
- 开启 ACL 后,PLAINTEXT 协议仍然提供服务,但应该立即切换所有的客户端应用,使用支持身份识别和权限验证的 SASL_PLAINTEXT 接入点,防止未授权访问。切换完成后,关闭 PLAINTEXT 协议接入点。