返回到文章

采纳

编辑于

Kafka SASL认证

使用SASL认证
kafka
kafka
安全

7.3 使用SASL认证

1. JAAS配置

Kafka使用Java认证授权服务(JAAS)进行SASL配置。

  1. 为kafka broker配置JAAS

    KafkaServer是每个KafkaServer/Broker使用的JAAS文件中的名称。本节提供broker的SASL配置选项,包括进行broker之间通信所需的SASL客户端连接。如果将多个listeners配置为SASL,则名称可以在listeners名称前以小写字母开头,后跟一个句点,例如sasl_ssl.KafkaServer

    客户端部分用于验证与zookeeper的SASL连接。它还允许broker在zookeeper节点上设置SASL ACL。并锁定这些节点,以便只有broker可以修改它。所有的broker必须principal名称相同。如果要使用客户端以外的名称,设置zookeeper.sasl.client(例如,-Dzookeeper.sasl.clientconfig=ZkClient)。

    默认情况下,Zookeeper使用 “zookeeper” 作为服务名称。如果你需要修改,设置zookeeper.sasl.client.user(例如,-Dzookeeper.sasl.client.username=zk

    Broker还可以使用sasl.jaas.config配置JAAS。属性名称必须以包括SASL机制的listener前缀为前缀,例如:listener.name.{listenerName}.{saslMechanism}.sasl.jaas.config只能指定一个登录模块。 如果listener上配置了多种机制,则listener必须使用和机制前缀为每种机制提供的配置。 例如:

    listener.name.sasl_ssl.scram-sha-256.sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \
       username="admin" \
       password="admin-secret";
    listener.name.sasl_ssl.plain.sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
       username="admin" \
       password="admin-secret" \
       user_admin="admin-secret" \
       user_alice="alice-secret";
    

    如果在不同级别定义了JAAS配置,则使用的优先级顺序为:

    • broker配置属性listener.name.{listenerName}.{saslMechanism}.sasl.jaas.config
    • 静态JAAS配置{listenerName}.KafkaServer
    • 静态JAAS配置KafkaServer

    请注意,只能使用静态JAAS配置来配置ZooKeeper JAAS配置。

  2. 为Kafka client配置JAAS

    客户端可以使用sasl.jaas.config或使用类似broker的静态JAAS配置文件配置JAAS。

    1. 客户端的JAAS配置

      客户端可以将JAAS配置指定给生产者或消费者,无需创建物理配置文件。通过为每个客户端指定不同的属性,此模式还使同一JVM中的不同生产者和消费者可以使用不同的凭据。如果同时指定了静态JAAS配置系统属性java.security.auth.login.config和客户端属性sasl.jaas.config,则将会使用客户端的属性。

      请参见GSSAPI(Kerberos)PLAINSCRAMOAUTHBEARER

    2. 静态文件配置JAAS

      使用静态JAAS配置文件来配置客户端上的SASL认证。

      1. 添加一个名为KafkaClient的客户端登录的JAAS配置文件。 在KafkaClient中为所选机制配置登录模块,如设置GSSAPI(Kerberos)PLAINSCRAM的示例中所述。 例如,GSSAPI凭据可以配置为:
        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";
        };
        
      2. 将JAAS配置文件位置作为JVM参数传递给每个客户端JVM。 例如:
        -Djava.security.auth.login.config=/etc/kafka/kafka_client_jaas.conf
        

2. SASL配置

SASL可与PLAINTEXTSSL一起或分别用作安全协议传输层(SASL_PLAINTEXTSASL_SSL,如果使用SASL_SSL,则必须配置SSL)。

  1. SASL机制

    Kafka支持以下的SASL机制:

    • GSSAPI (Kerberos)
    • PLAIN
    • SCRAM-SHA-256
    • SCRAM-SHA-512
    • OAUTHBEARER
  2. 为Kafka broker配置SASL

    1. server.properties配置一个SASL端口,SASL_PLAINTEXT或SASL_SSL添加到listeners中(至少一个),用逗号分隔:

      listeners=SASL_PLAINTEXT://host.name:port
      

      如果你只配置一个SASL端口(或者如果你需要broker使用SASL互相验证),那么需要确保broker之间设置相同的SASL协议:

      security.inter.broker.protocol=SASL_PLAINTEXT (or SASL_SSL)
      
    2. 选择一个或多个支持的机制,并通过以下的步骤为机器配置SASL。在broker之间启用多个机制:

  3. 为Kafka client配置SASL

    SASL仅支持新的java生产者和消费者,不支持老的API。

    要在客户端上配置SASL验证,选择在broker中启用的客户端身份验证的SASL机制,并按照以下步骤配置所选机制的SASL。

开始SASL认证

  1. SASL之Kerberos认证
  2. SASL之PLAIN认证
  3. SASL之SCRAM认证
  4. 在broker中启用多个SASL机制
  5. 在运行的集群中修改SASL机制