当前位置:   article > 正文

Kafka ACL(SASL/SCRAM-SHA-256)动态权限管理【windows】

scram-sha-256

Kafka ACL(SASL/SCRAM-SHA-256)动态权限管理【windows】

以下所有命令行命令都使用 Shift+鼠标右键 打开 Powershell 窗口执行

1. 使用版本

2. 安全概述

验证方式Kafka版本特点
SASL/PLAIN0.10.0.0不能动态增加用户
SASL/SCRAM-SHA-2560.10.2.0可以动态增加用户
SASL/Kerberos0.9.0.0需要独立部署验证服务
SASL/OAUTHBEARER2.0.0需自己实现接口实现token的创建和验证,需要额外Oauth服务

3.启动zookeeper

首先启动kafka项目中的zookeeper,执行命令

./bin/windows/zookeeper-server-start.bat ./config/zookeeper.properties
  • 1

在这里插入图片描述

4. 创建SCRAM凭证

Kafka 中的 SCRAM 实现使用 Zookeeper 作为凭证存储。 使用kafka-configs.bat在zookeeper中创建凭证,对于启用的每个 SCRAM 机制,必须通过添加具有机制名称的配置来创建凭据。**必须在启动 Kafka 代理之前创建代理间通信的凭证,否则kafka服务启动会报错。**可以动态创建和更新客户端凭证,更新后的凭证将用于验证新连接。

# 创建管理员用户
./kafka-configs.bat --zookeeper localhost:2181 --alter --add-config 'SCRAM-SHA-256=[iterations=8192,password=admin],SCRAM-SHA-512=[password=admin]' --entity-type users --entity-name admin
# 创建producer用户
./kafka-configs.bat --zookeeper localhost:2181 --alter --add-config 'SCRAM-SHA-256=[password=123456],SCRAM-SHA-512=[password=123456]' --entity-type users --entity-name producer
# 创建consumer用户
./kafka-configs.bat --zookeeper localhost:2181 --alter --add-config 'SCRAM-SHA-256=[password=123456],SCRAM-SHA-512=[password=123456]' --entity-type users --entity-name consumer
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述

可以使用--describe选项列出现有凭证:

# 查看所有用户
./kafka-configs.bat --zookeeper localhost:2181 --describe --entity-type users
# 指定用户
./kafka-configs.bat --zookeeper localhost:2181 --describe --entity-type users --entity-name admin
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

可以使用--delete选项删除一个或多个 SCRAM 机制的凭证:

kafka-configs.bat --zookeeper localhost:2181 --alter --delete-config 'SCRAM-SHA-512' --entity-type users --entity-name admin
  • 1

5. 修改server.properties

找到config目录中的server.properties文件,添加以下配置信息

注意:authorizer.class.name旧版本使用的是kafka.security.auth.SimpleAclAuthorizer

listeners=SASL_PLAINTEXT://localhost:9092
#使用的认证协议
security.inter.broker.protocol=SASL_PLAINTEXT
#SASL机制 
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
sasl.enabled.mechanisms=SCRAM-SHA-256
advertised.listeners=SASL_PLAINTEXT://localhost:9092
# 如果没有找到ACL(访问控制列表)配置,则允许任何操作。 
allow.everyone.if.no.acl.found=false
#超级管理员权限用户
super.users=User:admin
# 完成身份验证的类,旧版本使用的是kafka.security.auth.SimpleAclAuthorizer
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

6. 配置kafka_server_jaas.conf

在config目录中添加一个kafka_server_jaas.conf文件,主要注意花括号后和花括号内最后一行都需要分号。配置内容如下

KafkaServer {
    org.apache.kafka.common.security.scram.ScramLoginModule required
	username="admin"
	password="admin";
};
  • 1
  • 2
  • 3
  • 4
  • 5

7. 修改kafka-server-start.bat

找到bin/windows目录下的kafka-server-start.bat文件,设置上条信息中的kafka_server_jaas.conf文件

set KAFKA_OPTS=-Djava.security.auth.login.config=file:%~dp0../../config/kafka_server_jaas.conf
  • 1

示例:

IF [%1] EQU [] (
	echo USAGE: %0 server.properties
	EXIT /B 1
)

SetLocal
IF ["%KAFKA_LOG4J_OPTS%"] EQU [""] (
    set KAFKA_LOG4J_OPTS=-Dlog4j.configuration=file:%~dp0../../config/log4j.properties
)
IF ["%KAFKA_HEAP_OPTS%"] EQU [""] (
    rem detect OS architecture
    wmic os get osarchitecture | find /i "32-bit" >nul 2>&1
    IF NOT ERRORLEVEL 1 (
        rem 32-bit OS
        set KAFKA_HEAP_OPTS=-Xmx512M -Xms512M
    ) ELSE (
        rem 64-bit OS
        set KAFKA_HEAP_OPTS=-Xmx1G -Xms1G
    )
)
set KAFKA_OPTS=-Djava.security.auth.login.config=file:%~dp0../../config/kafka_server_jaas.conf
"%~dp0kafka-run-class.bat" kafka.Kafka %*
EndLocal
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

8. 启动Kafka

启动kafka之前需要保证zookeeper已经启动

./kafka-server-start.bat ../../config/server.properties
  • 1

在这里插入图片描述

9. SASL下topic的使用

  • 新建adminclient-configs.conf文件,文件名可自定义,这里后缀名使用propertiesconf都可以
    security.protocol=SASL_PLAINTEXT
    sasl.mechanism=SCRAM-SHA-256
    # 用户名密码配置为上述步骤创建的管理员账户
    sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="admin" password="admin";
    
    • 1
    • 2
    • 3
    • 4
  • 创建topic
    .\kafka-topics.bat --bootstrap-server localhost:9092 --create --replication-factor 1 --partitions 1 --topic topic-business-test --command-config ..\..\config\adminclient-configs.conf
    
    • 1
    在这里插入图片描述
  • 查看topic列表
    .\kafka-topics.bat --bootstrap-server localhost:9092 --list --command-config ..\..\config\adminclient-configs.conf
    
    • 1
    在这里插入图片描述

10. 使用ACL对group、topic进行赋权

对组进行赋权与以下格式一致,使用--group 组名即可,可以通知针对某个组某个主题进行设置

  • config目录创建认证配置文件adminclient-configs.conf,这里使用的是超级管理员用户

    security.protocol=SASL_PLAINTEXT
    sasl.mechanism=SCRAM-SHA-256
    sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="admin" password="admin";
    
    • 1
    • 2
    • 3
  • 给producer用户配置发送到test_topic这个主题的消息发送权限

    .\kafka-acls.bat --bootstrap-server localhost:9092 --add --allow-principal User:producer --operation Write --topic topic-test --command-config ..\..\config\adminclient-configs.conf
    
    • 1

    在这里插入图片描述

  • 给consumer用户配置消费test_topic消息的权限

      .\kafka-acls.bat --bootstrap-server localhost:9092 --add --allow-principal User:consumer --operation Read --topic topic-test --	command-config ..\..\config\adminclient-configs.conf
    
    • 1

    在这里插入图片描述

  • 查看权限认证列表

    .\kafka-acls.bat --authorizer-properties zookeeper.connect=localhost:2181 --list
    
    • 1

    在这里插入图片描述

11. 客户端生产者、消费者使用

  1. 修改producer.propertiesconsumer.properties配置文件,需要注意sasl.jaas.config参数值末尾的分号不加会报错

    • producer.properties
    security.protocol=SASL_PLAINTEXT
    sasl.mechanism=SCRAM-SHA-256
    sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="producer" password="123456";
    
    • 1
    • 2
    • 3
    • consumer.properties
    security.protocol=SASL_PLAINTEXT
    sasl.mechanism=SCRAM-SHA-256
    sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="producer" password="123456";
    
    • 1
    • 2
    • 3
  2. 生产者和消费者的使用(需要启动kafka)

    • producer
    .\kafka-console-producer.bat --bootstrap-server localhost:9092 --topic topic-test --producer.config ..\..\config\producer.properties
    
    • 1

    在这里插入图片描述

    • consumer
    .\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic topic-test --consumer.config ..\..\config\consumer.properties
    
    • 1

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/920316
推荐阅读
相关标签
  

闽ICP备14008679号