暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Kafka安全认证(一)——SASL_PLAINTEXT

新运维新数据 2022-05-21
9145

各位新朋友~记得先点蓝字关注我哦~

简介

SASL简介

Kafka提供了多种安全认证机制,主要分为SSL和SASL两类。SASL是一种用来扩充C/S验证模式的认证机制,SASL验证机制规范Client和Server之间的应答过程以及传输内容的编码方法。SASL验证架构决定服务器本身如何存储客户端身份证书以及如何核验客户端提供的密码。如果客户端通过验证,服务器端就能确定用户的身份,并借此决定用户具有怎样的权限。


Kafka SASL种类

Kafka支持以下五类SASL机制:

1) PLAIN

2) GSSAPI (Kerberos)

3) SCRAM-SHA-256

4) SCRAM-SHA-512

5) OAUTHBEARER

 

本次主要讲解一下SASL_PLAIN安全认证。


配置kafka代理

修改kafka_server_jaas.conf

在每个kafka broker的配置目录中添加一个JAAS文件,在本次示例中我将其命名为kafka_server_jaas.conf

    # vi kafka/kafka_2.13-2.8.1/config/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";
    };
    复制

    注意:最后一个属性后面需要加分号!

    配置是不难理解的,第一行指定PlainLoginModule,声明这是一个SASL/PLAIN的认证类型,如果是其他的,那么就需要required其他的类。username和password则是用于集群内部broker的认证用的。

    这里会让人疑惑的,应该是user_admin和user_alice这两个属性了。这个其实是用来定义用户名和密码的,形式是:user_Username="Password"。这里其实是定义了用户admin和用户alice的密码。

     

    修改kafka-run-class.sh

      # vi kafka/kafka_2.13-2.8.1/bin/kafka-run-class.sh
      if [ -z "$KAFKA_OPTS" ]; then
      KAFKA_OPTS="-Djava.security.auth.login.config=/kafka/kafka_2.13-2.8.1/config/kafka_server_jaas.conf"
      fi
      复制

      修改KAFKA_OPTS信息。


      修改server.properties

        # vi /kafka/kafka_2.13-2.8.1/config/server.properties
        #listeners=PLAINTEXT://kafka_1:9092
        listeners=SASL_PLAINTEXT://kafka_1:9092
        security.inter.broker.protocol=SASL_PLAINTEXT
        sasl.mechanism.inter.broker.protocol=PLAIN
        sasl.enabled.mechanisms=PLAIN
        复制

        其中SASL_PLAINTEXT的意思,是明文传输的意思,如果是SSL,那么应该是SASL_SSL。


        配置kafka客户端

        测试连接

        此时使用producer和consumer会提示连接失败,原因是无法通过SASL认证。

          # kafka-console-producer.sh --bootstrap-server kafka_1:9092 --topic topicA --producer.config /kafka/kafka_2.13-2.8.1/config/producer.properties
          复制
            # kafka-console-consumer.sh --bootstrap-server kafka_1:9092 --topic topicA --from-beginning --consumer.config /kafka/kafka_2.13-2.8.1/config/consumer.properties
            复制

            修改producer.properties以及consumer.properties

              # vi /kafka/kafka_2.13-2.8.1/config/producer.properties
              # vi /kafka/kafka_2.13-2.8.1/config/comsumer.properties
              sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
              username="alice" \
              password="alice-secret";
              security.protocol=SASL_PLAINTEXT
              sasl.mechanism=PLAIN
              复制

              producer.properties以及consumer.properties末尾添加认证信息即可。

              这里的参数很好理解,在生产者和消费者客户端配置文件中指定安全认证协议种类以及用户密码即可。


              测试连接以及消息发送


              SASL_PLAINTEXT优缺点

              到这里大家相比也能看出来,SASL_PLAINTEXT是一种相对简单的安全认证方式,kafka_server_jaas.conf中明文储存着用于连接kafka服务的用户密码。客户端则将用于连接kafka服务的用户密码明文储存在producer.properties以及consumer.properties中。连接时,客户端会发送自己的用户密码,kafka服务则会去验证用户密码是否正确。认证通过则允许连接。

               

              总结一下,SASL_PLAINTEXT认证主要有以下优点:

              • 认证的配置想对简单,容易上手。

              • 对于不同的客户端可以有不同的用户密码以及权限。

               

              缺点:

              • 密码明文储存在服务器上。

              • 认证过程没有第三方参与。

              • 通过网络发送密码。


              美创运维中心数据库服务团队拥有Oracle ACE 1人、OCM 10余人、数十名Oracle OCP、MySQL OCP、红帽RHCA、中间件weblogic、tuxedo认证、达梦工程师 ,著有《Oracle DBA实战攻略》,《Oracle数据库性能优化方法和最佳实践》,《Oracle内核技术揭秘》等多本数据运维优化书籍。目前运维各类数据库合计2000余套,精通Oracle、MySQL、SQLServer、DB2、PostgreSQL、达梦等主流商业和开源数据库。并成为首批国内达梦战略合作伙伴之一,拥有海量经验和完善的人员培养体系。并同时提供超融合,私有云整体解决方案。



              文章转载自新运维新数据,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

              评论