kafka消息加密(SASL/PLAIN)

kafka消息加密(SASL/PLAIN)

具体的配置方式官网已经说的很清楚了(尽量去官网看)
官网配置
分为以下几个步骤

  • 1、 在conf文件目录下添加文件kafka_server_jaas.conf(文件目录 文件名随意)内容如下
KafkaServer {
    org.apache.kafka.common.security.plain.PlainLoginModule required
    username="admin"
    password="admin-secret"
    user_admin="admin-secret"
    user_alice="alice-secret";
};

第一行 暂时不清楚干嘛
第二行 客户端连接的时候 可以使用这个用户名admin
最后两行的意思是 使用admin 密码得是 admin-secret 使用alice 密码得是alice-secret
至于如何扩展应该知道了

  • 2、 修改配置文件

一般启动命令后面 会指定配置文件 一般是server.properties 也可以自定义 我们以它为例
添加如下配置

 listeners=SASL_SSL(SASL_PLAINTEXT)://host.name:port
 security.inter.broker.protocol=SASL_SSL(SASL_PLAINTEXT)
 sasl.mechanism.inter.broker.protocol=PLAIN
 sasl.enabled.mechanisms=PLAIN

这里要将原来的 listeners改为上面的样子同时协议要保持一致

  • 3、 修改启动文件

win下和liunix会有些许不同 但是修改的文件的文件名都是一样的kafka-run-class
找到最下方(我的是win)

set COMMAND=%JAVA% %KAFKA_HEAP_OPTS% %KAFKA_JVM_PERFORMANCE_OPTS% %KAFKA_JMX_OPTS% %KAFKA_LOG4J_OPTS% -cp %CLASSPATH% %KAFKA_OPTS% %*
rem echo.
rem echo %COMMAND%
rem echo.
%COMMAND%

添加

set KAFKA_SASL_OPTS=-Djava.security.auth.login.config=D:/myprogram/kafka/config/kafka_server_jaas.conf
set后面的名字随便起
然后
set COMMAND=%JAVA% %KAFKA_HEAP_OPTS% %KAFKA_JVM_PERFORMANCE_OPTS% %KAFKA_JMX_OPTS% %KAFKA_LOG4J_OPTS% %KAFKA_SASL_OPTS% -cp %CLASSPATH% %KAFKA_OPTS% %*
在原来的COMMAND 里面把KAFKA_SASL_OPTS这个加进去 加到-cp的前面
上面的三步处理完 你的kafka服务就可以启动了

Java客户端配置

这边要做的就很少了 只要在配置文件里加上如下配置就可以了

 spring:
  kafka:
    bootstrap-servers: 127.0.0.1:9092
    consumer:
      group-id: tst-1
      auto-offset-reset: earliest
      properties:
        security.protocol: SASL_PLAINTEXT
        sasl.mechanism: PLAIN
        #sasl.jaas.config: org.apache.kafka.common.security.plain.PlainLoginModule required  username="admin"  password="admin-secret";
        sasl.jaas.config: org.apache.kafka.common.security.plain.PlainLoginModule required  username="alice" password="alice-secret";

对上面的配置进行简单的说明
group-id 这个在启用机密后 就必须配置了 不然会报错
@KafkaListener annotation; a group.id is required when group management is used.
这个我觉得应该是服务器要识别这个消费者吧 用id标识
security.protocol: SASL_PLAINTEXT
sasl.mechanism: PLAIN
上面的这两个要和服务器端使用的保持一致
最后的这个配置 sasl.jaas.config 后面的值一定要用分号结尾 另外这个值也可以保存到文件中 kafka.client.conf

KafkaClient {
 com.sun.security.auth.module.Krb5LoginModule required
 useKeyTab=true
 storeKey=true
 keyTab="/etc/security/keytabs/kafka_client.keytab"
 principal="kafka-client-1@EXAMPLE.COM";
};

然后在使用jvm参数
-Djava.security.auth.login.config=…/kafka.client.conf也是可以的

另外还有一条
同一个用户名和密码 可以在多个java客户端使用

### 使用 Docker Compose 部署 Kafka 并启用 SASL/PLAIN 认证 为了使用 Docker Compose 启动带有 SASL/PLAIN 身份验证的 Apache Kafka 实例,需要对 `docker-compose.yml` 文件以及 Kafka 和 ZooKeeper 的配置文件进行适当修改。 #### 修改 `docker-compose.yml` 创建或编辑现有的 `docker-compose.yml` 文件来定义服务: ```yaml version: '2' services: zookeeper: image: confluentinc/cp-zookeeper:latest environment: ZOOKEEPER_CLIENT_PORT: 2181 KAFKA_BROKER_ID: 1 ALLOW_PLAINTEXT_LISTENER: "yes" volumes: - ./zoo.cfg:/etc/kafka/zookeeper.properties kafka: image: confluentinc/cp-kafka:latest depends_on: - zookeeper ports: - "9092:9092" - "9093:9093" environment: KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,SASL_PLAINTEXT://kafka:9093 KAFJA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,SASL_PLAINTEXT:SASL_PLAINTEXT KAFKA_INTER_BROKER_LISTENER_NAME: SASL_PLAINTEXT KAFKA_SASL_ENABLED_MECHANISMS: PLAIN KAFKA_SASL_MECHANISM_INTER_BROKER_PROTOCOL: PLAIN KAFKA_AUTHORIZER_CLASS_NAME: kafka.security.auth.SimpleAclAuthorizer KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 volumes: - ./server.properties:/etc/kafka/server.properties ``` 此设置指定了两个监听器:一个是用于内部通信的未加密连接 (`PLAINTEXT`);另一个则是启用了 SASL/PLAIN 协议的安全连接(`SASL_PLAINTEXT`). 此外还设置了跨代理间的通讯协议为安全模式,并指定授权类以便实施访问控制[^1]. #### 创建必要的配置文件 对于上述 YAML 中提到的服务端口映射和其他环境变量,在实际环境中还需要准备相应的配置文件如 `server.properties`. 特别是在这个场景下要确保包含了如下几项: - 设置 JAAS 登录模块路径指向自定义 jaas.conf 文件位置. ```properties listeners=SASL_PLAINTEXT://:9093,PLAINTEXT://:9092 advertised.listeners=SASL_PLAINTEXT://your.host.name:9093,PLAINTEXT://your.host.name:9092 listener.security.protocol.map=PLAINTEXT:PLAINTEXT,SASL_PLAINTEXT:SASL_PLAINTEXT sasl.enabled.mechanisms=PLAIN sasl.mechanism.inter.broker.protocol=PLAIN security.inter.broker.protocol=SASL_PLAINTEXT authorizer.class.name=kafka.security.authorizer.AclAuthorizer allow.everyone.if.no.acl.found=true super.users=User:admin;User:someuser ``` 另外还需提供一个名为 `jaas.conf` 的 Java Authentication and Authorization Service (JAAS) 配置文件给 Kafka 容器使用. ```plaintext KafkaServer { org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="password"; }; Client { org.apache.kafka.common.security.plain.PlainLoginModule required username="someuser" password="another_password"; }; ``` 最后一步就是通过挂载的方式让这些额外资源能够被容器读取到. 将它们放置于主机上的合适目录并将该路径作为卷装载至对应的容器中即可完成整个过程. 一旦完成了以上所有准备工作之后就可以按照常规方式运行命令启动集群了:`docker-compose up -d`.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值