kafka ssl & acl

 KafkaSSL配置

1.1  创建密钥和证书

以下在每台kafka服务器上执行

keytool -keystoreserver.keystore.jks -alias localhost -validity 365-keyalg RSA -genkey

以下在连接kafka的clientt端执行,如果不要求客户端身份认证(服务器端没有配置ssl.client.auth=required),那么这步可以省略

keytool -keystoreclient.keystore.jks -alias localhost -validity 365-keyalg RSA –genkey

【注】

1、需要将密钥库和密钥密码设置相同

2、keystore 密钥库存储位置、alias证书实体唯一别名、validity 密钥有效期、keyalg加密算法

3、一次密钥方法

 keytool-genkey -alias test -keypass test1234-storepass test1234 -validity 365-keystore test.keystore -dname"CN=hadoop001, OU=test, O=test, L=test,ST=test, C=test"

1.2  利用openssl创建CA

openssl req -new-x509 -keyout ca-key -out ca-cert -days 365

【注】

1、keyout 私钥文件(默认当前目录)、out 证书文件(默认当前目录),days 证书有效期(天)

2、CA相当于证书发放机构,提供证书签名服务

3、kafka集群其中一台服务器中执行即可,也可任选集群外机器充当CA

1.3  创建CA客户端证书信任库

kafka server端执行:

keytool -keystoreserver.truststore.jks -alias CARoot -import -file ca-cert

kafka client端执行:

keytool -keystoreclient.truststore.jks -alias CARoot -import -file ca-cert

【注】truststore库存储的是CAclient端应该信任的CA证书集合,导入证书进入自己的信任库意味着信任所有该CA证书机构签发的证书。

1.4  CA对证书进行签名(利用CA证书ca-key,ca-cert签名)

1、迁出证书

keytool -keystoreserver.keystore.jks -alias localhost -certreq -file cert-file

keytool -keystoreclient.keystore.jks -alias localhost -certreq -file cert-file-client

2、CA签名

openssl x509 -req-CA ca-cert -CAkey ca-key -in cert-file -out cert-signed -days365-CAcreateserial -passin pass:test1234

openssl x509-req-CA ca-cert -CAkey ca-key -in cert-file-client -out cert-signed-client-days 365-CAcreateserial -passin pass:test1234

 

1.5  签名证书导入kafka server端信任库

将经过CA签名过的kafkaserver端证书(cert-signed)、client端证书(cert-signed-client)导入server端信任库(server.truststore.jks)

  keytool-keystore server.truststore.jks-alias localhost -import -file cert-signed

  keytool-keystore server.truststore.jks-alias localhost -import -filecert-signed-client

 

1.6  签名证书导入kafka client端信任库

将CA签名后的kafkaserver端证书(cert-signed)、client端证书(cert-signed-client)导入kafkaclient端信任库(client.truststore.jks)

  keytool-keystore client.truststore.jks-alias localhost -import -file cert-signed

  keytool-keystore client.truststore.jks-alias localhost -import -filecert-signed-client

 

1.7  配置server.properties文件

添加如下关于SSL信息的配置:

#开启9093端口ssl协议请求

listeners=PLAINTEXT://192.168.14.140:9092,SSL://192.168.14.140:9093

#指定kafkaserver秘钥、信任库存储位置,ssl.keystore.location存自己的私钥,ssl.truststore.location存放信任库

ssl.keystore.location=/opt/kafka_2.10-0.10.0.0/ssl/server.keystore.jks

ssl.keystore.password=test1234

ssl.key.password=test1234

ssl.truststore.location=/opt/kafka_2.10-0.10.0.0/ssl/server.truststore.jks

ssl.truststore.password=test1234

#kafkabroker之间也使用ssl通信

security.inter.broker.protocol=SSL

#客户端也需要认证(看需要)

ssl.client.auth=required

 

1.8  client端配置(producer、consumer关于SSL的配置相同)

如果kafka server端没有配置ssl.client.auth=required,如下是SSL最小化配置:

#通讯协议

security.protocol=SSL

ssl.truststore.location=/opt/kafka_2.10-0.10.0.0/ssl/client.truststore.jks

ssl.truststore.password=test1234

 

kakfa server端开启了客户端认证,添加如下配置:

#指定kafkaclient秘钥、信任库存储位置,ssl.keystore.location存自己的私钥,#ssl.truststore.location存放信任库

ssl.keystore.location=/opt/kafka_2.10-0.10.0.0/ssl/client.keystore.jks

ssl.keystore.password=test1234

ssl.key.password=test1234

 

 

1.9  测试验证

kafka-console-producer.sh--broker-listlocalhost:9093 --topic test --producer.configclient-ssl.properties

kafka-console-consumer.sh--bootstrap-serverlocalhost:9093 --topic test --new-consumer--consumer.configclient-ssl.properties

 启用 ACL

2.1  配置server.properties文件

启用kafka 自带ACL授权

authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer

principal.builder.class=org.apache.kafka.common.security.auth.DefaultPrincipalBuilder

 

添加超级用户,建议kafka server所有broker内部通信采用相同的principle,并将其设为超级用户

super.users=User:CN=hadoop001,OU=test,O=test,L=test,ST=test,C=test

【注】如果开启ACL,默认情况除了超级用户,没有用户允许访问

三  ACL使用

acl的格式定义 "Principal P is [Allowed/Denied]Operation O From Host H OnResource R”,默认情况下,SSL的用户名称的形式是"CN=writeuser,OU=Unknown,O=Unknown,L=Unknown,ST=Unknown,C=Unknown"。

默认kafka集群操作权限可以分为Cluster、producer、consumer,其中Cluster为集群管理权限,kafka server必须拥有该权限。

3.1  查看ACL列表

./kafka-acls.sh--list--authorizer-properties zookeeper.connect=localhost:2181/kafka

3.2  添加producer权限

1、所有topic拥有producer权限

kafka-acls.sh--allow-principalUser:CN=hadoop001,OU=test,O=test,L=test,ST=test,C=test--authorizer-propertieszookeeper.connect= localhost:2188/apache_kafka --producer--add –topic=*

 

2、指定topic拥有producer权限

kafka-acls.sh--allow-principalUser:CN= hadoop001,OU=test,O=test,L=test,ST=test,C=test--authorizer-propertieszookeeper.connect= localhost:2188/apache_kafka--producer --add –topic=test01

3.3  添加consumer权限

1、所有consumer group对所有topic拥有consumer权限

kafka-acls.sh--authorizer-propertieszookeeper.connect=localhost:2188/apache_kafka--allow-principal User:CN= hadoop001,OU=test,O=test,L=test,ST=test,C=test --consumer --topic=* --group=* --add

 

2、所有consumer group对某个topic拥有consumer权限

kafka-acls.sh--authorizer-propertieszookeeper.connect=localhost:2188/apache_kafka--allow-principal User:CN= hadoop001,OU=test,O=test,L=test,ST=test,C=test --consumer --topic=test01 --group=* --add

 

3.4  删除权限

kafka-acls.sh--allow-principalUser:CN= hadoop001,OU=test,O=test,L=test,ST=test,C=test--authorizer-propertieszookeeper.connect= localhost:2188/apache_kafka --producer--remove –topic=*

 

3.5  原子权限管理(read、write、describe)

1、read

kafka-acls.sh--authorizer-propertieszookeeper.connect=localhost:2188/apache_kafka--allow-principal User:CN=hadoop001,OU=test,O=test,L=test,ST=test,C=test --operation read --topic=* --group=* --add

2、write

kafka-acls.sh--authorizer-propertieszookeeper.connect=localhost:2188/apache_kafka--allow-principal User:CN= hadoop001,OU=test,O=test,L=test,ST=test,C=test --operation write --topic=* --add

3、describe

kafka-acls.sh--authorizer-propertieszookeeper.connect=localhost:2188/apache_kafka--allow-principal User:CN= hadoop001,OU=test,O=test,L=test,ST=test,C=test --operation describe --topic=* --add

 注意点

1、  Kafka SSL可以单独使用,不开启ACL模式下只要客户端、服务端principle验证通过即可以进行数据通讯

 

2、  启用SSL后,Kafka sever端每台broker的信任库必须拥有集群所有broker的证书信息,推荐配置为集群内部公用一个principle

 

3、  自己创建CA时,集群内部需要使用同一个CA进行签名和认证

 

4、  启用ACL后,kafka集群内部所有角色启动用户的principle必须拥有集群的读、写、集群管理权限,推荐使用超级用户管理集群

 

5、  Kafka SSL相关的所有执行操作只针对new producer、new consumer有效,老版本的kafka不支持

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值