管理 ACL
本文介绍 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 协议访问集群。
资源类型: AutoMQ 当前支持 Kafka Cluster、Topic、Consumer Group、Transaction ID 类型的资源进行 ACL 权限控制,暂不支持 DelegationToken 类型。如有需求,请参考获取人工服务▸联系我们。
ACL 用户
在 Kafka ACL 功能里,用户是 ACL 进行身份识别的主体。Kafka 客户端通过访问协议透传自己的用户标识,Kafka 服务端进行身份识别并确认当前客户端请求对应的用户,然后进行后续的权限验证等操作。
需要注意 Kafka ACL 用户和 AutoMQ 环境成员的区别:
场景对比 | Kafka ACL 用户 | AutoMQ 环境成员 |
---|---|---|
使用场景 | Kafka 客户端 API、CLI 访问 | AutoMQ 环境 Web 访问 |
覆盖范围 | 作用于单个 Kafka 实例 | 作用于整个环境,可以跨实例操作 |
ACL 授权策略
Apache Kafka 通过授权策略定义不同的用户可以访问的资源范围以及对应可以执行的操作列表。参考 Apache Kafka 的设计文档。AutoMQ 实例的授权策略包含如下信息:
参数 | 取值说明 |
---|---|
资源类型 |
|
资源名称 |
|
匹配类型 |
|
操作组 |
|
授权类型 |
注意:DENY 类型授权策略类似黑名单能力,具备排他特性,优先级高于 ALLOW。 |
访问来源 |
|
AutoMQ 定义了操作组用于简化授权操作,其中操作组和 Kafka 操作的映射关系如下表:
资源类型 | 操作组 | 包含的操作 | 推荐场景 |
---|---|---|---|
Cluster | All |
| All 操作组约定了对 Kafka 集群(实例)全部的操作权限。一般推荐授权给 Kafka UI、CLI 工具类的用户身份。 |
Topic | All |
| All 操作组约定了对单个 Topic 所有的操作权限。一般推荐授权给既需要生产权限、又需要订阅权限的用户身份。 |
Produce |
| Produce 操作组约定了对单个 Topic 生产消息的最小操作范围。推荐授权给消息生产的用户身份。 | |
Consume |
| Consume 操作组约定了对单个 Topic 订阅消息的最小操作范围。推荐授权给消息订阅的用户身份。 如需使用 Consumer Group 订阅消息,除授权 Topic 的 Consume 操作组,还需要对目标 Consumer Group 进行授权。 | |
Consumer Group | All |
| All 操作组约定了使用特定 Consumer Group 的所有操作权限。推荐授权给消息订阅的用户身份。 如需使用 Consumer Group 订阅消息,除了授权 Consumer Group ,还需要对目标 Topic 授予 Consume 操作组权限。 |
TransactionID | All |
| All 操作组约定了针对特定 TransactionID 允许读取状态和提交事务的操作权限。推荐授权给需要发送事务消息的用户身份。 |
使用 Kafka ACL
在 AutoMQ 实例中使用 Kafka ACL 功能,参考如下流程:
需要注意的是:
创建实例时,默认没有开启 ACL,此时客户端通过 PLAINTEXT 协议,匿名访问集群,拥有所有操作的权限。
开启 ACL 后,PLAINTEXT 协议仍然提供服务,但应该立即切换所有的客户端应用,使用支持身份识别和权限验证的 SASL_PLAINTEXT 接入点,防止未授权访问。切换完成后,关闭 PLAINTEXT 协议接入点。