Kafka 中 SASL ACL SSL 到底分别代表什么意思

这篇具有很好参考价值的文章主要介绍了Kafka 中 SASL ACL SSL 到底分别代表什么意思。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Kafka 中 SASL ACL SSL 分别代表什么意思

auth: huangyichun

date: 2023-5-11

看各类帖子都没能指出这些到底是什么意思,他们是冲突的,还是互相作用的,还是隔离的?本文讲解 kafkaSASLACLSSL 他们分别的作用以及含义。

SASL 身份认证

SASL 是用来认证 C/S 模式也就是服务器与客户端的一种认证机制,全称 Simple Authentication and Security Layer。通俗的话来讲就是让服务器知道连接进来的客户端的身份是谁。

比如凭借阅证到图书馆借书,而每个借阅证都有独立的 ID,通过 ID 定位谁是谁,而不是特别关心谁拿到了借阅证,只需要正确的借阅证即可。

这就是一种凭据认证方式。


再比如 登陆QQ,只需要账号密码即可,就可以用该 QQ 和朋友聊天等等。

这种是我们常见的账号密码认证方式。

所以 SASL 就是服务器存储了客户端的身份证书和如何校验密码是否正确,而且仅在于身份认证过程,认证完毕后即可进行相关的服务操作。

SASL 只是一种模式,需要依赖于具体的连接媒介,比如 JAAS客户端GSSAPI(Kerberos)PLAINSCRAM-SHA-256SCRAM-SHA-512OAuthBearer 等等。这里分别讲解一下他们的具体含义:

JAAS 客户端

全名 Java Authentication Authorization Service,Java 的认证和授权服务。这种方式可以插入式将认证和授权逻辑与应用程序分离开。

JAAS 使得客户端通过配置 sasl.jaas.config 或者指定静态 jaas 文件来进行配置,完成配置后即可连接服务器,如:

System.setProperty("java.security.auth.login.config", "kafka_client_kafka.js");

或者:

# kerberos 认证模板
sasl.jaas.config=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 能够使得客户端 JAVA程序 快速以某种认证方式连接服务器。

SASL/GSSAPI(Kerberos)

在使用 SASL 时采用的具体认证方式为 Kerberos GSSAPI,大多数大数据集群在认证时采用的也都是这种方法。通过 Kerberos 的认证拿到 TGT 后访问 Kafka 集群,此时 Kafka 集群验证身份是否正确让其访问服务。

这种方式是在环境中已经拥有Kerberos 认证时的最优解。

SASL/PLAIN 明文账号密码

当大数据集群中,没有类似于 Kerberos 相关的认证服务时,最简单的就是 SASL/PALIN 这样的账号密码登录了。这个就是在 Kafka 集群中添加一个身份认证文件 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";
};

比如上述文件就是定义了两个用户 adminalice,并且密码分别为 admin-secretalice-secret。这样的定义简单却不方便,因为在添加或者删除用户时需要重启集群,所以在生产中基本不能使用。当然可以二次开发,但也不推荐。

SASL/SCRAM 对 PLAIN 进行升级,将账号数据存储在 ZK 中

SCARM 其实也是账号密码认证机制,但是数据存储在 zookeeper 中,这样使得可以动态增加删除用户。生产环境中可以使用这种方式,但记住最好开启 zookeeper 的认证,如果 zookeeper 没开启认证那也是不行的。

分别有两种加密方法:SCRAM-SHA-256SCRAM-SHA-512,长度不同。

一般通过如下命令进行管控:

bin/kafka-configs.sh --zookeeper localhost:2182 --zk-tls-config-file zk_tls_config.properties --alter --add-config 'SCRAM-SHA-256=[password=admin-secret],SCRAM-SHA-512=[password=admin-secret]' --entity-type users --entity-name admin

bin/kafka-configs.sh --zookeeper localhost:2182 --zk-tls-config-file zk_tls_config.properties --describe --entity-type users --entity-name alice

bin/kafka-configs.sh --zookeeper localhost:2182 --zk-tls-config-file zk_tls_config.properties --alter --delete-config 'SCRAM-SHA-512' --entity-type users --entity-name alice

上面创建了 adminalice 用户,并且设定了对应的密码,最后一条命令删除了 alice 用户。

SASL/OAUTHBEARER

基于 OAUTH2.0 的认证框架,这里需要 OATH2 框架进行认证。

相关认证还有 LDAPSSOCASOIDCSAML2 等等。

具体流程一般为:

  1. 访问服务时将跳转到 Authing 进行认证。
  2. 认证完毕后服务会获取到 Authing 发来的授权码,这里再次和 Authing 进行交互获取 AccessToken
  3. 这样服务端获取到用户身份,并且可以使用 AccessToken 获取其他服务。

小节

所以当前客户端都是使用 JAAS 进行认证,但根据不同的 SASL 设置具体的 jaas 文件。


ACL 授权

Kafka 中,有一个插入式的授权框架,只需要在 server.properties 中设置:

authorizer.class.name=kafka.security.authorizer.AclAuthorizer

# KRaft 使用如下配置
authorizer.class.name=org.apache.kafka.metadata.authorizer.StandardAuthorizer

这个功能需要 SASL 作为前提,也就是 SASL 认证后知道连接集群的是谁,然后再在 ACL 中查找其是否有对应的权限。

这个功能说简单的话也挺简单,当使用 GSSAPI 时,直接针对每个 principal 主体进行配置即可。

当然当服务架构特别复杂时,也可以通过 RULE 进行设置:

RULE:^CN=(.*?),OU=ServiceUsers.*$/$1/,
RULE:^CN=(.*?),OU=(.*?),O=(.*?),L=(.*?),ST=(.*?),C=(.*?)$/$1@$2/L,
RULE:^.*[Cc][Nn]=([a-zA-Z0-9.]*).*$/$1/L,
DEFAULT

当设置权限时,可以直接使用如下命令:

bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal User:Bob --allow-principal User:Alice --allow-host 198.51.100.0 --allow-host 198.51.100.1 --operation Read --operation Write --topic Test-topic

bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal User:'*' --allow-host '*' --deny-principal User:BadBob --deny-host 198.51.100.3 --operation Read --topic Test-topic

bin/kafka-acls.sh --bootstrap-server localhost:9092 --list --topic Test-topic

第一条命令允许了 BobAlice 通过 198.51.100.[0-1] 访问 Test-topic,并拥有读写权限。

第二条命令允许所有用户和所有 ip 有读 Test-topic 的权限,但除了 BadBobip=198.51.100.3 的读权限。

第三条命令查看了当前所有关于 Test-topic 的认证配置。

所以 ACL 是基于 SASL 之上的授权框架,为 Kafka 自带。

SSL 连接协议

可能大多数朋友有从 http 过渡到 https 的感受,而这个 s 其实就是 SSL

SSL 其实就是一种安全套接层协议 Secure Socket Layer,处于应用层之下,TCP 连接之上。这里我们并不研究 SSL 的详细解析,只需要了解 SSL 证书有一组 公钥私钥,通过他们俩的加密解密配合,可以保证在数据传输过程中不被偷窥修改。

那么 Kafka 中为什么要使用他,就是因为 SASL 只解决了认证问题,ACL 解决授权问题,而数据在传输过程中没有更好的加密手段(虽然传输数据过程中不一定是明文,看序列化手段)。所以为了解决数据在传输中就算被恶意抓包监听,达到更高的安全性。

所以 SSL 解决了数据传输过程中的安全性问题。与 SASLACL 并无关联性。

Kafka security protocols

Kafka 中,一共有四种连接方式,分别是:PLAINTEXTSSLSASL_PLAINTEXTSASL_SSL

名字中带有 SSL 说明打开了 SSL,而带有 SASL 的说明打开了 SASL,而 PLAINTEXT 说明数据未加密传输,所以可以整理为以下表格:

ACL 授权在此没有体现,而是通过 authorizer.class.name 进行指定。

总结

一般来说,处于公网上的 Kafka 都需要打开 SASL_SSL 认证服务;SASLSSL 并没有特定关联,一个是身份认证,一个是证书加密传输,可以分开配置,然后在客户端的 JAAS 文件中统一配置。

中文网上没有讲 Kafka 认证此类基础概念,看到很多人这方面基础薄弱,所以特此描述一下,如果解决了你心中的疑虑请点个赞。如果发现文章错误,请评论找博主进行修改,谢谢。

如果觉得还行,需要尝试进行部署,请跳转到:
Kafka3.4 SASL/kerberos/ACL 证以及 SSL 加密连接文章来源地址https://www.toymoban.com/news/detail-618216.html

到了这里,关于Kafka 中 SASL ACL SSL 到底分别代表什么意思的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • shell 脚本中的 '-f' 和 '-d' 分别代表什么意思

    shell脚本中,\\\'-f\\\' 和 \\\'-d\\\'是用于测试文件类型的条件表达式。 1、\\\'-f\\\'表达式: 表达式: \\\'[ -f file ]\\\' 描述: 判断给定路径是否是一个常规文件 (regular file)。 常规文件是指不是目录或设备文件的文件。 示例: if [ -f /path/to/file ]; then echo \\\"这是一个文件。\\\" fi 2、\\\'-d\\\'表达式: 表达式

    2024年02月04日
    浏览(58)
  • Kafka安全(以SASL+ACL为例)

    在Kafka的官方文档中介绍了如下几种安全方式,以满足用户不同场景对安全的需求。 ● SASL/GSSAPI (Kerberos) - starting at version 0.9.0.0。主要是为 Kerberos 使用,如果当前已有 Kerberos 认证,只需要为集群中每个 Broker 和访问用户申请 Principle ,然后在 Kafka 配置文件中开启 Kerberos 的支持

    2024年02月03日
    浏览(33)
  • Kafka 开启 SASL/PLAINTEXT 认证及 ACL

    在之前的开发工作中,需要开发使用用户名密码的方式连接 Kafka 并对 Kafka 数据进行处理,但是客户并没有提供可以测试的环境,于是就自己着手搭建了一套单节点的 Kafka 并开启 SASL 认证。 1、组件版本 组件 版本 kafka 2.11-2.22 zookeeper 3.6.2 2、下载文件 KAFKA:下载地址 ZOOKEEPER:

    2023年04月08日
    浏览(49)
  • 实战:kafka、zookeeper SASL+ACL实现动态权限认证、授权

    1. 不接入外部存储,基于kafka原生ACL认证 环境: kafka-2.2.1、zookeeper-3.6.3 ​ kafka给我们提供了 SASL/SCRAM 模式,将SASL、ACL规则信息存储到zookeeper中,并且通过 KafkaClientAdmin Api,新增、编辑、删除规则,其特性如下 应用发送、消费实现动态身份认证和授权 基于kafka SASL/SCRAM 模式,

    2023年04月26日
    浏览(37)
  • Kafka 开启SASL/SCRAM认证 及 ACL授权(三)验证

    Kafka 开启SASL/SCRAM认证 及 ACL授权(三)验证。 官网地址:https://kafka.apache.org/ 本文说明如何做client验证ACL是否生效,我们之前开启了无acl信息不允许访问的配置。涉及的client有以下几个场景:shell脚本、python脚本、java应用、flink流。 kafka shell script验证 核心逻辑是,连zk的,使

    2024年02月07日
    浏览(38)
  • Kafka ACL(SASL/SCRAM-SHA-256)动态权限管理【windows】

    以下所有命令行命令都使用 Shift+鼠标右键 打开 Powershell 窗口执行 Version Scala 2.13 - kafka_2.13-3.4.0.tgz 验证方式 Kafka版本 特点 SASL/PLAIN 0.10.0.0 不能动态增加用户 SASL/SCRAM-SHA-256 0.10.2.0 可以动态增加用户 SASL/Kerberos 0.9.0.0 需要独立部署验证服务 SASL/OAUTHBEARER 2.0.0 需自己实现接口实现

    2024年02月06日
    浏览(38)
  • linux中的“~”、“/”、“./”分别代表什么?

    1、“~” :表示主目录,也就是当前登录用户的用户目录。 表示返回到home目录 2、“/” :是指根目录:就是所有目录最顶层的目录,如下: 3、“./” :表示当前目录,./ 一般需要和其他文件夹或者文件结合使用,指代当前目录下的东西。 4、“. .” :表示上级目录  例如

    2024年02月05日
    浏览(73)
  • shell中$?代表什么意思

    $? 是一个特殊的 shell 变量,用于存储上一个命令的执行状态。当一个 shell 命令执行完毕后,它会返回一个状态值,表示该命令执行的结果。 $? 变量会自动保存该状态值,以便后续的脚本代码可以根据该状态值来判断命令是否执行成功。 状态值是一个整数,它的取值范围通常

    2024年02月11日
    浏览(54)
  • 502状态码代表什么意思

    502 Bad Gateway错误是HTTP状态代码,表示Internet上的一台服务器收到来自另一个服务器的无效响应,也就是指网关错误,无效网关; 在互联网中表示一种网络错误。表示web浏览器中给出的页面反馈 。 下面是常见的HTTP状态码: 1、200-请求成功。一般用于GET与POST请求。 2、301-永久

    2024年02月16日
    浏览(45)
  • 【Kafka】手把手SASL,SSL教学

    Kafka支持以下SASL机制:GSSAPI 、PLAIN、 SCRAM-SHA-256、 SCRAM-SHA-512、 OAUTHBEARER。 本指南主要以SCRAM机制配置为主。 当使用SCRAM机制时,Kafka使用Zookeeper存储用户加密后的凭证,所以需要先使用Kafka提供的脚本进行用户的创建。 比如创建用户名为kafkaAdmin,密码为admin用户的操作命令如

    2024年01月17日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包