Kafka系列(33)kafka认证机制

什么是认证机制

 验证 鉴权 authentication是指通过一定的手段,完成对用户身份的确认,认证的主要目的是确认当前声称为某种身份的用户确实是所声称的用户

授权一般是指对信息安全或者计算机安全相关的资源定义与授予相应的访问权限

 

认证要解决的是你要证明你是谁的问题,授权要解决的是则是你能做什么的问题

 

认证机制

  0.9.0引入认证机制,实现基础安全用户认证,将kafka上云或进行多租户管理的必要步骤

 

基于SSL的认证主要是指Broker和客户端的双路认证

    Broker和客户端 互相认对方的证书

 SASL客户端认证  SASL是提供认证和数据安全服务的框架

   GSSAPI: kerberos使用的安全接口 在0.9版本引入  

   PLAIN  使用简单的用户名密码认证机制  0.10版本引入

   SCRAM 基于PLAIN机制安全问题的新机制 在0.10.2版本引入

   OAUTHBEARER 基于OAuth 2机制 在2.0版本引入

     Delegation Token 补充SASL机制的轻量级 1.1.0引入

建议 使用SSL来做通信加密,使用SASL来做Kafka的认证实现

     SASL/GSSAPI主要是给Kerberos使用的

      小公司而言,用户系统不复杂,集群用户不多

      SASL/PALIN而言, 运维成本相对较小,适合小公司中的Kafka集群,弊端是不能动态增减用户

  SASL/SCRAM 将用户认证信息保存在zk方式,避免动态修改Broker重启的弊端

 

如果要是用Delegation Token Broker和客户端在做认证的时候,可以直接使用这个token,不是每次都去KDC获取对应的ticket或传输Keystore文件

Kafka系列(33)kafka认证机制_第1张图片

 

SASL/SCRAM-SHA-256配置实例

  1.创建用户

   admin 用户用于通信  reader用户用于读取 writer用户用于写

    cd kafka_2.12-2.3.0/
$ bin/kafka-configs.sh --zookeeper localhost:2181 --alter --add-config 'SCRAM-SHA-256=[password=admin],SCRAM-SHA-512=[password=admin]' --entity-type users --entity-name admin
Completed Updating config for entity: user-principal 'admin'.

bin/kafka-configs.sh --zookeeper localhost:2181 --alter --add-config 'SCRAM-SHA-256=[password=writer],SCRAM-SHA-512=[password=writer]' --entity-type users --entity-name writer
Completed Updating config for entity: user-principal 'writer'.

bin/kafka-configs.sh --zookeeper localhost:2181 --alter --add-config 'SCRAM-SHA-256=[password=reader],SCRAM-SHA-512=[password=reader]' --entity-type users --entity-name reader

 

查看刚才创建的用户信息

bin/kafka-configs.sh --zookeeper localhost:2181 --describe --entity-type users  --entity-name writer
Configs for user-principal 'writer' are SCRAM-SHA-512=salt=MWt6OGplZHF6YnF5bmEyam9jamRwdWlqZWQ=,stored_key=hR7+vgeCEz61OmnMezsqKQkJwMCAoTTxw2jftYiXCHxDfaaQU7+9/dYBq8bFuTio832mTHk89B4Yh9frj/ampw==,server_key=C0k6J+9/InYRohogXb3HOlG7s84EXAs/iw0jGOnnQAt4jxQODRzeGxNm+18HZFyPn7qF9JmAqgtcU7hgA74zfA==,iterations=4096,SCRAM-SHA-256=salt=MWV0cDFtbXY5Nm5icWloajdnbjljZ3JqeGs=,stored_key=sKjmeZe4sXTAnUTL1CQC7DkMtC+mqKtRY0heEHvRyPk=,server_key=kW7CC3PBj+JRGtCOtIbAMefL8aiL8ZrUgF5tfomsWVA=,iterations=4096

2 创建JAAS文件

   单独为每个Broker机器创建一份JAAS 文件

  文件内容如下

KafkaServer {
org.apache.kafka.common.security.scram.ScramLoginModule required
username="admin"
password="admin";
};

配置Broker 的server.properties文件

sasl.enabled.mechanisms=SCRAM-SHA-256  表名开启SCRAM认证机制 启用SHA-257算法

sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256 Broker之间通信开启SCRAM认证

security.inter.broker.protocol=SASL_PLAINTEXT

listeners=SASL_PLAINTEXT://localhost:9092

3启动Broker

指定JAAS文件的位置

$KAFKA_OPTS=-Djava.security.auth.login.config=/kafka-broker.jaas bin/kafka-server-start.sh config/server1.properties
......
[2019-07-02 13:30:34,822] INFO Kafka commitId: fc1aaa116b661c8a (org.apache.kafka.common.utils.AppInfoParser)
[2019-07-02 13:30:34,822] INFO Kafka startTimeMs: 1562045434820 (org.apache.kafka.common.utils.AppInfoParser)
[2019-07-02 13:30:34,823] INFO [KafkaServer id=0] started (kafka.server.KafkaServer)
 

 4 发送消息

  创建一个名为producer.conf的配置文件

security.protocol=SASL_PLAINTEXT
sasl.mechanism=SCRAM-SHA-256
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="writer" password="writer";
 

之后运行

bin/kafka-console-producer.sh --broker-list localhost:9092,localhost:9093 --topic test  --producer.config /producer.conf
>hello, world
>   

 

5消费消息

创建consumer.conf文件

security.protocol=SASL_PLAINTEXT
sasl.mechanism=SCRAM-SHA-256
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="reader" password="reader";

正常消费消息

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092,localhost:9093 --topic test --from-beginning --consumer.config /consumer.conf 
hello, world
 

6动态增减用户

bin/kafka-configs.sh --zookeeper localhost:2181 --alter --delete-config 'SCRAM-SHA-256' --entity-type users --entity-name writer
Completed Updating config for entity: user-principal 'writer'.

$ bin/kafka-configs.sh --zookeeper localhost:2181 --alter --delete-config 'SCRAM-SHA-512' --entity-type users --entity-name writer
Completed Updating config for entity: user-principal 'writer'.

$ bin/kafka-configs.sh --zookeeper localhost:2181 --alter --add-config 'SCRAM-SHA-256=[iterations=8192,password=new_writer]' --entity-type users --entity-name new_writer
Completed Updating config for entity: user-principal 'new_writer'.

 

确认Console Producer程序不能发送消息

bin/kafka-console-producer.sh --broker-list localhost:9092,localhost:9093 --topic test  --producer.config /Users/huxi/testenv/producer.conf
>[2019-07-02 13:54:29,695] ERROR [Producer clientId=console-producer] Connection to node -1 (localhost/127.0.0.1:9092) failed authentication due to: Authentication failed during authentication due to invalid credentials with SASL mechanism SCRAM-SHA-256 (org.apache.kafka.clients.NetworkClient)
......

 

指定新的用户 可以重新消费消息

bin/kafka-console-producer.sh --broker-list localhost:9092,localhost:9093 --topic test  --producer.config /producer.conf
>Good!  

 

不重启Broker情况下增减用户

Kafka系列(33)kafka认证机制_第2张图片


 

 


 

 

   

     

 

   

你可能感兴趣的:(Kafka)