如何为Kafka加上账号密码(一)

Kafka认证基本概念

一直以来,我们公司内网的Kafka集群都是在裸奔,只要知道端口号,任何人都能连上集群操作一番。直到有个主题莫名消失,才引起我们的警觉,是时候该考虑为它添加一套认证策略了。
认证和授权就是一对孪生兄弟,不过本文只讨论认证,对授权感兴趣的朋友快献上赞赞,点赞越多,更新越快,哈哈。

该如何为Kafka添加认证策略呢,我们考察了Kafka支持的认证方式如下:

  • SASL/GSSAPI (Kerberos) - starting at version 0.9.0.0
  • SASL/PLAIN - starting at version 0.10.0.0
  • SASL/SCRAM-SHA-256 and SASL/SCRAM-SHA-512 - starting at version 0.10.2.0
  • SASL/OAUTHBEARER - starting at version 2.0

因为我们的集群采用的是kraft模式部署,因此无需考虑ZooKeeper的认证问题。上面四种方式分别在不同的版本引入Kafka,考量使用哪个认证方式请先确认好你们的Kafka集群版本是否支持。

我在之前的文章中提到过4种安全协议,不要与这里的认证方式混淆,安全协议是配置到监听器端口上,声明了经过端口的流量是否需要认证和加密。

回顾四种安全协议:

  1. PLAINTEXT => 不需要认证,非加密通道传输
  2. SSL => 无需认证,使用SSL加密通道
  3. SASL_PLAINTEXT => 使用SASL认证,非加密通道传输
  4. SASL_SSL => 使用SASL认证并且SSL加密通道传输

既然我们讨论认证,那么留给我们的选择只有SASL_PLAINTE

### Kafka 3.9.0 版本中的账号密码设置与管理 在Kafka 3.9.0版本中,为了实现基于用户名密码的身份验证,通常采用SASL机制。具体来说,可以使用`SCRAM-SHA-512`或`SCRAM-SHA-256`作为安全协议来增强安全性[^1]。 #### 配置服务器端支持SASL/SCRAM身份验证 要在Kafka Broker上启用此功能,在`server.properties`文件内需指定如下参数: ```properties listeners=SASL_SSL://:9092 sasl.enabled.mechanisms=SCRAM-SHA-512,SCRAM-SHA-256 security.inter.broker.protocol=SASL_SSL listener.name.sasl_ssl.scram-sha-512.sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required; listener.name.sasl_ssl.scram-sha-256.sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required; ``` 这些配置项定义了监听器类型以及允许使用的加密算法,并指定了内部代理间通信的安全层协议为SASL_SSL。 #### 创建用户凭证并分配权限 对于每个需要访问集群的应用程序或者服务账户而言,都需要创建相应的凭据并通过命令行工具将其加入到Zookeeper存储库当中去。这里以创建名为`alice`用户的示例说明如何操作: ```bash kafka-configs.sh \ --bootstrap-server localhost:9092 \ --alter \ --add-config 'SCRAM-SHA-512=[password={your_password}],SCRAM-SHA-256=[password={your_password}]' \ --entity-type users \ --entity-name alice ``` 上述指令会向系统添加两个不同哈希强度下的散列值形式保存下来的密钥对儿;同时也可以通过修改`{your_password}`占位符来自定义实际想要设定的口令字符串[^2]。 #### 客户端连接时提供认证信息 当应用程序尝试连接至启用了SASL/SSL保护模式下的Broker节点时,则必须随请求同提交有效的登录名及其对应的秘密令牌。这可以通过调整客户端属性文件(`application.yml`)内的相应字段完成: ```yaml spring: kafka: bootstrap-servers: localhost:9092 security: protocol: SASL_SSL sasl: mechanism: SCRAM-SHA-512 jaas: enabled: true config: org.apache.kafka.common.security.scram.ScramLoginModule required username="alice" password="{your_password}"; ``` 这段YAML片段展示了怎样利用Spring Boot框架内置的支持特性简化对外部消息队列中间件实例发起调用过程中的鉴权流程处理逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值