kerberos服务搭建,zookeeper、kafka使用kerberos

1. centos安装kerberos

  1. 下载安装kerberos
yum install krb5-libs krb5-server krb5-workstation krb5-libs
  1. 安装成功后etc下应该有krb5.conf文件,编辑该文件vi /etc/krb5.conf
# Configuration snippets may be placed in this directory as well
includedir /etc/krb5.conf.d/

[logging]
 default = FILE:/var/log/krb5libs.log

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 dns_lookup_realm = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
 rdns = false
 pkinit_anchors = /etc/pki/tls/certs/ca-bundle.crt
 default_realm = EXAMPLE.COM
 default_ccache_name = KEYRING:persistent:%{uid}

[realms]
 EXAMPLE.COM = {
        kdc = 192.168.1.237:88
        admin_server = 192.168.1.237
 }

[domain_realm]
# .example.com = EXAMPLE.COM
# example.com = EXAMPLE.COM

这个配置kdc,kerberos客户端,以及调用kerberos api时都会使用到。

  1. realms 中 添加一个realms,并修改realms的kdc鱼admin_sercer地址
  2. libdefaults 中 添加default_realm
  1. 编辑vi /var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88

[realms]
 EXAMPLE.COM = {
  #master_key_type = aes256-cts
  acl_file = /var/kerberos/krb5kdc/kadm5.acl
  dict_file = /usr/share/dict/words
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
  supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
 }

这是kdc的专属配置,可以根据自己的需求修改下kdc数据库的存放目录,我用的默认的,之后生成的文件可以来这里配置过的目录下找

  1. 你需要下载java版本的JCE策略文件,将它们复制到 $JAVA_HOME/jre/lib/security中(注意:必须替换!!)
    jce下载地址

找到java home
ll $(whereis java)
ll /etc/alternatives/java
然后拷贝两个jar到你的java home /lib/security中(/jre/lib/security)

  1. 创建数据库和principal
    1. 使用kdb5_util创建数据库,从而可以存放principal相关的信息(输入两次password)
    kdb5_util create -r EXAMPLE.COM -s
    
    1. 使用kadmin.local来添加principal
    kadmin.local
    # 创建一个新用户(输入两次密码)
    add_principal test-server/@EXAMPLE.COM
    # 导出用户加密配置到krb5.keytab中(先生成一下keytab文件)
    xst -k ~/krb5.keytab test-server/[email protected]
    
    kerberos服务搭建,zookeeper、kafka使用kerberos_第1张图片
    1. 设置kadmin和krb5kdc服务开机启动(一个kdc的服务一个kadmin管理服务)
    chkconfig krb5kdc on
    chkconfig kadmin on
    service krb5kdc start
    service kadmin start
    
    1. 用kinit验证KDC是否启动成功
    kinit -k -t krb5.keytab test-server/[email protected]
    klist
    

    kinit对应的是向kdc获取TGT的步骤。它会向/etc/krb5.conf中指定的kdc server来发送请求。
    如果TGT请求成功,你就可以用klist看到它。
    kerberos服务搭建,zookeeper、kafka使用kerberos_第2张图片
    至此,centos就安装完kerberos,并添加一个principal进行验证没有问题了。

2. kafka启用kerberos进行权限控制

  1. 安装kafka,下载地址
  2. 上传kafka,解压,直接启动发送端测试消息发送,启动consumer,测试消息接收,再都没问题的情况下继续权限处理。
  3. 创建kafka 的 Kerberos Principals
# 添加principal(这时注意,admin就是访问principal的hostname,等下需要配置到hosts文件中)
add_principal kafka/[email protected]
# 导出证书
xst -k krb5.keytab kafka/[email protected]
# 验证principal是否生效
kinit -k -t krb5.keytab kafka/[email protected]
klist
  1. 配置Broker
    1. 添加一个JAAS文件,类似下面的每个kafka broker的配置目录。这个例子我们姑且命名为kafka_server_jaas.conf(注意,每个broker都应该有自己的密钥表)。
    KafkaServer {
    	com.sun.security.auth.module.Krb5LoginModule required
    	useKeyTab=true
    	storeKey=true
    	keyTab="/root/krb5.keytab"
    	principal="kafka/[email protected]";
    };
    
    // Zookeeper client authentication
    Client {
    	com.sun.security.auth.module.Krb5LoginModule required
    	useKeyTab=true
    	storeKey=true
    	keyTab="/root/krb5.keytab"
    	principal="kafka/[email protected]";
    };
    
    1. 通过JAAS和krb5文件位置作为JVM参数传递到每个broker
    -Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.auth.login.config=/etc/kafka/kafka_server_jaas.conf
    
    将该内容添加到kafka-run-class.sh中的JAVA_OPTS中
    kerberos服务搭建,zookeeper、kafka使用kerberos_第3张图片
    1. 在server.properties中配置SASL端口和SASL机制
    listeners=SASL_PLAINTEXT://admin:9002
    security.inter.broker.protocol=SASL_PLAINTEXT
    sasl.mechanism.inter.broker.protocol=GSSAPI
    sasl.enabled.mechanisms=GSSAPI
    
    还必须在server.properties配置服务器名称,应与broker的principal名匹配
    sasl.kerberos.service.name=kafka
    
    此时,kafka的服务器端就完成了SASL的配置

你可能感兴趣的:(工作经验,kerberos,kafka)