目录
二. jaas 配置(jaas configuration)
三. sasl 配置(sasl configuration)
一. 前言
sasl 是用来认证 c/s 模式也就是服务器与客户端的一种认证机制,全称 simple authentication and security layer。这就是一种凭据认证方式。通俗的话来讲就是让服务器知道连接进来的客户端的身份是谁。
比如凭借阅证到图书馆借书,而每个借阅证都有独立的 id,通过 id 定位谁是谁,而不是特别关心谁拿到了借阅证,只需要正确的借阅证即可。所以 sasl 就是服务器存储了客户端的身份证书和如何校验密码是否正确,而且仅在于身份认证过程,认证完毕后即可进行相关的服务操作。
二. jaas 配置(jaas configuration)
kafka 使用 java 身份验证和授权服务(jaas)进行 sasl 配置。
2.1. kafka broker 的 jaas 配置
kafkaserver 是每个 kafkaserver/broker 使用的 jaas 文件中的段落名。本节提供 broker 的sasl 配置选项,包括 broker 为 broker 间通信建立的任何 sasl 客户端连接。如果将多个监听器配置为使用 sasl,则段落名称可以以小写的监听器名称为前缀,后跟句点,例如 sasl_ssl.kafkaserver。
客户端部分用于验证与 zookeeper 的 sasl 连接。它还允许 broker 在 zookeeper 节点上设置sasl acl,从而锁定这些节点,以便只有 broker 可以修改它。有必要在所有 broker 中具有相同的主体名称。如果要使用 client 以外的段落名称,请将系统属性 zookeeper.sasl.clientconfig 设置为适当的名称(例如,-dzookeeper.sasl.clientconfig=zkclient)。
zookeeper 默认使用“zookeeper”作为服务名称。如果要更改此设置,请将系统属性zookeeper.sasl.client.username 设置为适当的名称(例如,-dzookeeper.sasl.client.username=zk)。
broker 还可以使用 broker 配置属性 sasl.jaas.config 来配置 jaas。属性名称必须以监听器前缀为前缀,包括 sasl 机制,即 listener.name.{listenername}.{saslmechanism}.sasl.jaas.config。在配置值中只能指定一个登录模块。如果在监听器上配置了多个机制,则必须使用监听器和机制前缀为每个机制提供配置。例如
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
请注意,zookeeper jaas 配置只能使用静态 jaas 配置进行配置。
有关 broker 配置的示例,请参阅 gssapi(kerberos)、plain、scram 或 oauthbearer。
2.2. kafka 客户端的 jaas 配置
客户端可以使用客户端配置属性 sasl.jas.config 或类似于 broker 的静态 jaas 配置文件来配置jaas。
2.2.1. 使用客户端配置属性的 jaas 配置
客户端可以将 jaas 配置指定为生产者或消费者属性,而无需创建物理配置文件。这种模式还允许同一 jvm 中的不同生产者和消费者通过为每个客户端指定不同的属性来使用不同的凭据。如果同时指定了静态 jaas 配置系统属性 java.security.auth.login.config 和客户端属性sasl.jas.config,则将使用客户端属性。
有关配置示例,请参阅 gssapi(kerberos)、plain、scram 或 oauthbearer。
2.2.2. 使用静态配置文件的 jaas 配置
要使用静态 jaas 配置文件在客户端上配置 sasl 身份验证,请执行以下操作:
- 添加一个 jaas 配置文件,其中包含一个名为 kafkaclient 的客户端登录部分。在kafkaclient 中为所选机制配置登录模块,如设置 gssapi(kerberos)、plain、scram或 oauthbearer 的示例中所述。例如,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"; };
- 将 jaas 配置文件位置作为 jvm 参数传递给每个客户端 jvm。例如
-djava.security.auth.login.config=/etc/kafka/kafka_client_jaas.conf
三. sasl 配置(sasl configuration)
sasl 可以与 plaintext 或 ssl 一起使用,作为分别使用安全协议 sasl_plaintext 或 sasl_ssl 的传输层。如果使用 sasl_ssl,则还必须配置 ssl。
3.1. sasl 机制(sasl mechanisms)
kafka 支持以下 sasl 机制:
- gssapi(kerberos)
- plain
- scram-sha-256
- scram-sha-512
- oauthbearer
3.2. kafka broker 的 sasl 配置
1. 在 server.properties 中配置 sasl 端口,方法是将 sasl_plaintext 或 sasl_ssl 中的至少一个添加到 listener 参数中,该参数包含一个或多个逗号分隔的值:
listeners=sasl_plaintext://host.name:port
如果您只配置 sasl 端口(或者如果您希望 kafka broker 使用 sasl 相互验证),请确保为 broker 间通信设置相同的 sasl 协议:
security.inter.broker.protocol=sasl_plaintext (or sasl_ssl)
2. 选择一个或多个要在 broker 中启用的支持机制,然后按照步骤为该机制配置 sasl。要在 broker 中启用多个机制,请按照此处的步骤操作。
3.3. kafka 客户端的 sasl 配置
sasl 身份验证仅支持新的 java kafka 生产者和消费者,不支持旧的 api。
要在客户端上配置 sasl 身份验证,请选择在 broker 中启用的用于客户端身份验证的 sasl 机制,然后按照步骤为所选机制配置 sasl。
注意:当通过 sasl 与 broker 建立连接时,客户端可能会对 broker 地址执行反向 dns 查找。由于 jre 是实现反向 dns 查找的,如果客户端的 bootstrap.servers 和 broker 的advertised.listeners 都没有使用完全限定的域名,则客户端可能会观察到 sasl 握手缓慢。
发表评论