Apache Kafka支持客户端使用SASL
完成身份认证,而且SASL
身份验证可以与TLS/SSL
加密同时启用
当期支持的SASL
机制有以下几种:
- GSSAPI (Kerberos authentication)
- OAUTHBEARER
- SCRAM
- PLAIN
- Delegation Tokens
- LDAP
在这次示例中,先使用最简单的方式,PLAIN
方式,类似登录用的账号密码
JAAS服务端配置
Kafka的SASL配置使用的是Java Authentication and Authorization Service(JAAS)
。所以需要提供一个jaas的配置文件。这里提供了两种方式:
- 比较推荐的方式,是在配置文件server.properties里设置
sasl.jaas.config
属性 - 另外一种是把配置文件加载到JVM的方式,需要在启动的时候,追加
java.security.auth.login.config
配置,声明JAAS配置文件的路径
在配置文件里配置属性
需要在Kafka的配置文件里配置sasl.jaas.config
。这里要声明好listenerName
和saslMechanism
listener.name.<listenerName>.<saslMechanism>.sasl.jaas.config
你可以配置一个或多个,注意每个后边都有;
结尾
listener.name.sasl_ssl.scram-sha-256.sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \
username="admin" \
password="admin-secret";
listener.name.sasl_ssl.plain.sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
username="admin" \
password="admin-secret" \
user_admin="admin-secret" \
user_alice="alice-secret";
在实际使用中,你可能用到很多种的listener,例如用于客户端连接的、节点之间通信的、或者其他用于类似RBAC模型的,所以需要设置好每个listener的标识。
如果没有在配置文件中定义listener.name.internal.sasl.enabled.mechanisms
,Kafka将会使用全局定义的sasl.enabled.mechanisms
。所以,你也可以使用这种方式替换为自己统一的鉴权机制。
如果你没有声明任何一个JAAS 配置,节点将会加载java.security.auth.login.config
的配置作为默认的
外部JAAS配置文件加载到JVM
可以修改kafka-server-start.sh
,追加JVM参数java.security.auth.login.config
export KAFKA_OPTS="-Djava.security.auth.login.config=/data/k8s-volume/kafka/config/kafka_server_jaas.conf"
kafka_server_jaas.conf文件内容如下
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
serviceName="kafka"
username="admin"
password="admin-secret"
user_admin="admin-secret"
user_alice="alice-secret";
};
优先级
需要说明的是,如果在多个位置配置了相同的Mechanism,则会按照优先级的高低来决定哪个生效,由高到低按以下顺序发挥作用
- server.properties中配置的listener.name.
. .sasl.jaas.config - jaas.conf中有声明listenerName的配置
.KafkaServer - 最后是配置的默认的KafkaServer
JAAS客户端配置
客户端也提供了两种配置方式,和服务端的配置类似
- server.properties中配置
sasl.jaas.config
- 通过
java.security.auth.login.config
追加到JVM里
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
username="admin" \
password="admin-secret";
如果你同时在sasl.jaas.config
和java.security.auth.login.config
都配置了,则客户端会使用sasl.jaas.config
的配置
感谢大家的阅读, 如有疑问可以加我微信
评论已关闭