在0.9版本之前,Kafka集群是没有安全机制的。首先,客户端获取Zookeeper系统连接地址后,通过访问Zookeeper系统中的元数据信息来获取Kafka集群地址;然后,客户端可以直接连接到Kafka集群,访问Kafka集群上的所有主题,并对主题进行管理员操作。
由于没有限制,一些重要的业务主题就会存在安全性问题。例如泄露敏感数据、删除主题、修改分区等。
基于这类场景考虑,在0.9版本之后,Kafka系统新增了两种安全机制——身份验证和权限控制,来确保存储数据的安全性。
身份验证
在Kafka系统中,身份验证是指,客户端在连接服务端时需要确认身份。
整个认证范围包括:
- 客户端和Kafka代理节点之间的连接认证;·
- 代理节点与代理节点之间的连接认证;
- 代理节点与Zookeeper系统之间的连接认证。
当前Kafka系统支持多种认证机制:SSL、SASL/Kerberos、SASL/PLAIN、SASL/SCRAM。
权限控制
在Kafka系统中,客户端的“身份验证通过”仅代表该客户端属于合法用户,能够访问Kafka集群,但不一定具有操作Kafka集群主题的权限。
因此,在Kafka系统中,还有另外一种安全机制——权限控制。
权限控制是指,对客户端操作(如读、写、删、改等)Kafka集群主题进行权限控制。
Kafka系统中的权限控制是可插拔的,并且支持与外部授权服务进行集成。Kafka系统自带一个简单的授权类——kafka.security.auth.SimpleAclAuthorizer
。
在部署Kafka系统时,其安全性是可选的。即,可以部署一个不带安全机制的Kafka集群。但如果生产环境涉及敏感的业务数据(或对于Kafka集群数据的安全性来说很重要的数据),建议还是配置安全机制。