kerberos + Ranger 实现对Kafka的认证以及权限管理

1 篇文章 0 订阅
1 篇文章 0 订阅

1. 安装Ranger

  • 安装JDK(略)
  • 编译Ranger(略)
  • 安装MySQL(略)
    1. 创建名为ranger的数据库(CREATE USER 'ranger'@'%' IDENTIFIED BY 'ranger';)。
    2. 创建名为ranger的用户,并授权ranger数据库所有权限给ranger(GRANT ALL PRIVILEGES ON ranger.* TO 'ranger'@'%';)
    3. 刷新生效(FLUSH PRIVILEGES;
  • 安装Ranger
    1. 解压ranger-2.0.0-admin.tar.gz

    2. 安装内置solr

      1. 编辑solr安装配置文件: vim $RANGER_ADMIN_HOME/contrib/solr_for_audit_setup/install.properties

          JAVA_HOME=/opt/jdk1.8.0_201
          SOLR_USER=solr
          SOLR_GROUP=solr
          SOLR_INSTALL=true #设置为true标示自动安装
          SOLR_DOWNLOAD_URL=http://mirror.bit.edu.cn/apache/lucene/solr/8.5.1/solr-8.5.1.tgz # 修改solr安装包下载地址
          SOLR_INSTALL_FOLDER=/opt/solr # 安装目录
          SOLR_RANGER_HOME=/opt/solr/ranger_audit_server
          SOLR_RANGER_PORT=6083
          SOLR_DEPLOYMENT=standalone
          SOLR_RANGER_DATA_FOLDER=/opt/solr/ranger_audit_server/data
        
      2. 执行$RANGER_ADMIN_HOME/contrib/solr_for_audit_setup/setup.sh进行solr安装。

      3. 切换到solr用户启动solr /opt/solr/ranger_audit_server/scripts/start_solr.sh (停止solr命令为相同目录下的stop_solr.sh)

      4. 访问http://hostname:6083 ,如果能正常访问页面,表示solr安装成功。

    3. ranger-admin安装。

      1. 修改ranger-admin配置文件。需要修改项如下,其他保持默认。
          # DB 
          DB_FLAVOR=MYSQL
          SQL_CONNECTOR_JAR=${your path}/mysql-connector-java-8.0.16.jar
          db_root_user=root
          db_root_password=root
          db_host=${your mysql server host}:3306
          #
          # DB UserId used for the Ranger schema
          #
          db_name=ranger
          db_user=ranger
          db_password=ranger
          audit_store=solr
          audit_solr_urls=http://${your solr server host}:6083/solr/ranger_audits
        
      2. 执行初始化脚本 $RANGER_ADMIN_HOME/setup.sh
      3. 启动ranger-admin ranger-admin start
      4. 访问 http://hostname:6080/,如果能正常访问,表示ranger安装成功。
      5. 用admin/admin登录ranger。

2. 安装Kafka(略)

3. 安装 Ranger kafka 插件

  1. 编译ranger-kafka 插件(略)

  2. 解压kafka 插件 ranger-2.0.0-kafka-plugin.tar

  3. 配置install.properties,修改或添加如下项,其他保持默认 vim $ranger-2.0.0-kafka-plugin-HOME/install.properties

      COMPONENT_INSTALL_DIR_NAME=$KAFKA_HOME
      POLICY_MGR_URL=http://${your ranger server hostname}:6080/  # ranger
      SQL_CONNECTOR_JAR=${your path}/mysql-connector-java-8.0.16.jar
      XAAUDIT.SOLR.ENABLE=true
      XAAUDIT.SOLR.URL=http://${your solr server hostname}:6083/solr/ranger_audits
      JAVA_HOME=/opt/jdk1.8.0_201
      REPOSITORY_NAME=kafkadev
      XAAUDIT.SUMMARY.ENABLE=true
      XAAUDIT.SOLR.SOLR_URL=http://${your solr server hostname:6083/solr/ranger_audits
      CUSTOM_USER=${username}
      CUSTOM_GROUP=${username}
    
  4. 拷贝配置好的ranger-2.0.0-kafka-plugin到其他kafka broker节点。

  5. 在各个kafka broker节点执行ranger-kafka 插件中的脚本${ranger-2.0.0-kafka-plugin_HOME}/enable-kafka-plugin.sh,插件会自动拷贝(创建软连接)插件目录下lib下的包到kafka的libs目录下,并在kafka的config目录下创建对应的以ranger开头的配置文件。

  6. 查看插件下的lib包是否已经拷贝(建立软连接)到kafka libs下。在这里插入图片描述

  7. 查看配置文件是否已经创建(ranger开头的文件)。在这里插入图片描述

3. 安装Kerberos

  1. Kerberos概念以及介绍(略)
  2. 安装Kerberos 服务器(只需要安装一个机器)。sudo yum install -y krb5-server
  3. 安装Kerberos 客户端 (需要使用Kerberos认证的节点都需要安装,如kafka 的各个broker所在的节也需要安装)。 yum install -y krb5-workstation
  4. 修改kdc配置文件。vim /var/kerberos/krb5kdc/kdc.conf
      [kdcdefaults]
        kdc_ports = 88
        kdc_tcp_ports = 88
    
      [realms]
        BUGBOY.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
        }
    
  5. 修改/var/kerberos/krb5kdc/kadm5.acl文件
       */admin@BUGBOY.COM      *
    
  6. 修改/etc/krb5.kdc,并拷贝到其他客户端/etc 目录下
     # Configuration snippets may be placed in this directory as well 
     includedir /etc/krb5.conf.d/
    
     [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 = BUGBOY.COM 
      default_ccache_name = KEYRING:persistent:%{uid}
    
     [realms]
      BUGBOY.COM = {  # 修改域名为自己设置的域名
       kdc = kdchost.bugboy.com #kdchost为kdc 服务器所在的主机名
       admin_server = kdchost.bugboy.com #kdchost为kadmin 所在的主机名
      }
     # 修改域名为自己设置的域名
     [domain_realm]
      .bugboy.com = BUGBOY.COM
      bugboy.com = BUGBOY.COM
    
  7. 修改kdc服务器所在主机的hosts ,并在其他客户端的hosts下也添加上。
     # ip 地址为kdc服务器的ip地址
     192.168.254.66 kdchost kdchost.bugboy.com
    
  8. 配置kdc、kadmin服务开机启动。

    sudo systemctl enable krb5kdc.service或者sudo chkconfig --level 35 krb5kdc on

    sudo systemctl enable kadmin.service 或者 sudo chkconfig --level 35 kadmin on
  9. 创建Kerberos数据库 kdb5_util create -s -r BUGBOY.COM
  10. 启动krb5kdc 服务和 kadmin 服务。

    sudo systemctl start krb5kdc.service 或者 sudo service krb5kdc start

    sudo systemctl start kadmin.service 或者 sudo service kadmin start
  11. 进入kadmin命令行,sudo kadmin.local
  12. 创建管理员主体 addprinc -randkey root/admin
  13. 创建kafka主体,其中broker1、broker2、broker3为kakfa broker的hostname:

    addprinc -randkey kafka/broker1@BUGBOY.COM

    addprinc -randkey kafka/broker2@BUGBOY.COM
    addprinc -randkey kafka/broker3@BUGBOY.COM
  14. 导出keytab文件到kafka.keytab,导出的kafka.keytab文件就在运行kadmin.local时的目录下。

    xst -k kafka.keytab kafka/broker1@BUGBOY.COM

    xst -k kafka.keytab kafka/broker2@BUGBOY.COM

    xst -k kafka.keytab kafka/broker3@BUGBOY.COM
  15. 测试认证。sudo kinit -kt kafka.keytab路径 kafka/broker1@BUGBOY.COM
  16. 在kafka home 下新建keytabs目录,并将kafka.keytab拷贝到该目录下,并同步到其他broker节点。
  17. 在kafka home 下新建jassconf目录,并在该目录下新建kafka_server_jaas.conf文件,内容如下:
     KafkaServer {
       com.sun.security.auth.module.Krb5LoginModule required
       useKeyTab=true
       storeKey=true
       keyTab="${KAFKA_HOME/keytabs/kafka.keytab}" # KAFKA_HOME需要修改为KAFKA安装目录的路径
       principal="kafka/beoker1@BUGBOY.COM";
     };
    
  18. 将jassconf拷贝到各个broker的kafka 安装目录下。并修改kafka_server_jaas.conf中的principal="kafka/beoker1@BUGBOY.COM"为当前节点对应的principal
  19. 修改kafka bin目录下的kafka-run-class.sh,在# JVM performance options的地方即KAFKA_JVM_PERFORMANCE_OPTS追加-Djava.security.krb5.conf=/etc/krb5.conf $KAFKA_JAAS,并拷贝到其他broker对应目录下。结果如下:
     # JVM performance options
     if [ -z "$KAFKA_JVM_PERFORMANCE_OPTS" ]; then
       KAFKA_JVM_PERFORMANCE_OPTS="-server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCInvokesConcurrent -Djava.awt.headless=true -Djava.security.krb5.conf=/etc/krb5.conf $KAFKA_JAAS"
     fi
    
  20. 修改kafka bin目录下的kafka-server-start.sh,在如下位置添加如下内容。并拷贝到其他broker对应目录下。
    EXTRA_ARGS=${EXTRA_ARGS-'-name kafkaServer -loggc'}
    
    COMMAND=$1
    case $COMMAND in
      -daemon)
        EXTRA_ARGS="-daemon "$EXTRA_ARGS
        shift
        ;;
      *)
        ;;
    esac
    # 增加kafka server对应的KAFKA_JAAS变量,其中$KAFKA_HOME需要保证为有效路径。
    export KAFKA_JAAS="-Djava.security.auth.login.config=$KAFKA_HOME/jassconf/kafka_server_jaas.conf"
    exec $base_dir/kafka-run-class.sh $EXTRA_ARGS kafka.Kafka "$@"
    
  21. 每个broker修改kafka config 下的server.properties,将下面内容追加到文件末尾。注意,SASL_PLAINTEXT后面的地址为当前broker的主机地址
      authorizer.class.name=org.apache.ranger.authorization.kafka.authorizer.RangerKafkaAuthorizer
    
      advertised.listeners=SASL_PLAINTEXT://broker1:9092
      security.inter.broker.protocol=SASL_PLAINTEXT
      sasl.mechanism.inter.broker.protocol=GSSAPI
      sasl.enabled.mechanisms=GSSAPI
      sasl.kerberos.service.name=kafka
      listeners=SASL_PLAINTEXT://broker1:9092
    
  22. 启动kafka。
  23. 查看ranger中是否有kafka的插件,以及审计日志是否正常。

4. 使用kafka 客户端(Topic创建,生产数据以及消费)时的认证和用户切换

  1. 用kadmin创建两个Kerberos的Principal,分别为client1,clinet2。

    addprinc -randkey client1/broker1@BUGBOY.COM

    addprinc -randkey client2/broker1@BUGBOY.COM
  2. 分别导出其keytab为client1.keytab、client2.keytab。并将client1.keytab、client2.keytab放到${KAFKA_HOME}/keytabs目录下。
  3. 为client1新建kafka_client1_jaas.conf文件并放到${KAFKA_HOME}/jassconf目录下,内容如下:
      KafkaClient {
        com.sun.security.auth.module.Krb5LoginModule required
        useKeyTab=true
        storeKey=true
        keyTab="${KAFKA_HOME}/keytabs/client1.keytab" #KAFKA_HOME需要修改为绝对路径
        principal="client1/broker1@BUGBOY.COM";
      };
    
  4. 为client2新建kafka_client2_jaas.conf文件并放到${KAFKA_HOME}/jassconf目录下,内容如下:
      KafkaClient {
        com.sun.security.auth.module.Krb5LoginModule required
        useKeyTab=true
        storeKey=true
        keyTab="${KAFKA_HOME}/keytabs/client2.keytab" #KAFKA_HOME需要修改为绝对路径
        principal="client2/broker1@BUGBOY.COM";
      };
    
  5. 在KAFKA_HOME目录下新建一个userConf目录,并新建一个client.conf文件,内容如下:
      security.protocol=SASL_PLAINTEXT
      sasl.mechanism=GSSAPI
      sasl.kerberos.service.name=kafka
    
  6. 用kafka principal新建一个名为test-topic的topic。主要,根据自己的情况将KAFKA_HOME替换为自己的目录
    • 在shell中执行export KAFKA_JAAS="-Djava.security.auth.login.config=${KKAFKA_HOME}/jaasconf/kafka_server_jaas.conf"
    • 创建 topic: $AKFKA_HOME/bin/kafka-topics.sh --create --bootstrap-server broker1:9092 --topic test-topic --partitions 3 --replication-factor 2 --command-config $AKFKA_HOME/userConf/client.conf
    • 查看ranger的审计日志
  7. 在ranger中新建两个用户,分别为client1,client1,并授予向 test-topic生产数据的权限。
  8. 使用client1 的principal生产数据使用kafka的脚本进行生产数据。
    • 在shell 中执行 export KAFKA_JAAS="-Djava.security.auth.login.config=${KKAFKA_HOME}/jaasconf/kafka_client1_jaas.conf"
    • 往test-topic中生产数据$AKFKA_HOME/bin/k/kafka-console-producer.sh --broker-list broker1:9092 --topic test-topic --producer.config $AKFKA_HOME/config/userConf/client.conf
  9. 使用client2 的principal生产数据使用kafka的脚本进行生产数据。
    • 在shell 中执行 export KAFKA_JAAS="-Djava.security.auth.login.config=${KKAFKA_HOME}/jaasconf/kafka_client2_jaas.conf"
    • 往test-topic中生产数据$AKFKA_HOME/bin/k/kafka-console-producer.sh --broker-list broker1:9092 --topic test-topic --producer.config $AKFKA_HOME/config/userConf/client.conf
  10. 查看Ranger的审计日志。
  11. 在ranger中将client2的权限修改为拒绝。
  12. 再使用client2 的principal生产数据使用kafka的脚本进行生产数据。
  • 在shell 中执行 export KAFKA_JAAS="-Djava.security.auth.login.config=${KKAFKA_HOME}/jaasconf/kafka_client2_jaas.conf"
  • 往test-topic中生产数据$AKFKA_HOME/bin/k/kafka-console-producer.sh --broker-list broker1:9092 --topic test-topic --producer.config $AKFKA_HOME/config/userConf/client.conf
  1. 查看Ranger的审计日志,出现如图表示kerberos对kafka认证成功,以及ranger能对kafka有效的权限控制。在这里插入图片描述
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值