Apache Kafka安全| Kafka的需求和组成部分

2023-03-14,,

1.目标 - 卡夫卡安全

今天,在这个Kafka教程中,我们将看到Apache Kafka Security 的概念  。Kafka Security教程包括我们需要安全性的原因,详细介绍加密。有了这个,我们将讨论Kafka Security可以轻松解决的问题列表。此外,我们将看到Kafka身份验证和授权。此外,我们将看看ZooKeeper身份验证。
那么,让我们开始Apache Kafka Security。

Apache Kafka安全| Kafka的需求组成部分

2.什么是Apache Kafka Security

在0.9.0.0版本中,Kafka社区中添加了许多功能。它们的使用灵活性,如单独或一起使用,也增强了Kafka集群的安全性。

Apache Kafka安全工作

因此,当前支持的安全措施列表如下:

    通过使用SSL或SASL,对连接的认证卡夫卡经纪人从客户端,其他工具也是可能的。它支持各种SASL机制:

SASL / GSSAPI(Kerberos) - 从版本0.9.0.0开始
SASL / PLAIN - 从版本0.10.0.0开始
SASL / SCRAM-SHA-256和SASL / SCRAM-SHA-512 - 从版本0.10.2.0开始

2.此外,还提供从代理到ZooKeeper的连接的身份验证。
3.此外,它提供了使用SSL 在经纪人和Kafka客户之间或经纪人和工具之间转移的数据加密,包括:

客户授权读/写操作。
这里,授权是可插拔的,并且还支持与外部授权服务的集成。

注意: 确保安全性是可选的。

3.需要卡夫卡安全

基本上,Apache Kafka扮演着内部中间层的角色,这使我们的后端系统能够通过Kafka主题彼此共享实时数据馈送。通常,任何用户或应用程序都可以使用标准Kafka设置将任何消息写入任何主题,以及从任何主题读取数据。但是,当我们的公司转向共享租赁模式而多个团队和应用程序使用相同的Kafka群集时,或者当Kafka Cluster开始登记某些关键和机密信息时,需要实施Kafka安全性。

4.问题:Kafka Security正在解决

Kafka Security有三个组件:

一个。使用SSL / TLS加密正在传输的数据

它在我们的制作人和Kafka以及我们的消费者和Kafka之间保持数据加密。但是,我们可以说,这是每个人在网上使用时非常常见的模式。

湾 使用SSL或SASL进行身份验证

要对我们的Kafka集群进行身份验证,它允许我们的生产者和我们的消费者验证他们的身份。这是使我们的客户认可身份的非常安全的方式。这有助于授权。
Apache Kafka用例| 卡夫卡应用程序

C。使用ACL进行授权

为了确定特定客户端是否有权编写或读取某个主题,我们的Kafka代理可以针对访问控制列表(ACL)运行我们的客户端。

5. Kafka中的加密(SSL)

Kafka Security- SSL加密

由于我们的数据包在被路由到Kafka集群,旅行网络以及从机器跳到机器时,这解决了中间人(MITM)攻击的问题。如果我们的数据是PLAINTEXT,那么这些路由器中的任何一个都可以读取数据的内容。
我们的数据经过加密并通过网络安全传输,并启用加密并仔细设置SSL证书。只有第一台和最后一台机器具有使用SSL解密正在发送的数据包的能力。
然而,这种加密是有代价的,这意味着为了加密和解密数据包,CPU现在可以用于Kafka客户端和Kafka Brokers。虽然SSL安全性的性能可以忽略不计。
注意:加密仅在进行中,数据仍然在我们的代理磁盘上未加密。
阅读Kafka序列化和反序列化

6. Kafka身份验证(SSL和SASL)

基本上,可以通过两种方式向我们的经纪人验证Kafka客户。SSL和SASL

Kafka Security- SSL和SASL身份验证

一个。Kafka中的SSL身份验证

它利用了SSL的功能,我们还称之为两种身份验证方式。基本上,它向我们的客户颁发证书,由证书颁发机构签署,允许我们的Kafka经纪人验证客户的身份。
但是,这是最常见的设置,尤其是当我们利用来自Heroku,Confluent Cloud或CloudKarafka等提供商的托管Kafka群集时。
Apache Kafka架构及其基本概念

湾 Kafka中的SASL身份验证

SASL指的是简单授权服务层。这里的基本概念是认证机制和Kafka协议彼此分离。它非常受大数据系统以及Hadoop设置的欢迎.Kafka 
支持以下形式和形式的SASL:

一世。 SASL PLAINTEXT

SASL PLAINTEXT是一个经典的用户名/密码组合。但是,请确保我们需要提前在Kafka代理上存储这些用户名和密码,因为每次更改都需要触发滚动重启。但是,它的安全性较低。此外,请确保在使用SASL / PLAINTEXT时启用SSL加密,因此该凭据不会作为PLAINTEXT在网络上发送。

II。 SASL SCRAM

这是一个非常安全的组合和挑战。基本上,密码和Zookeeper  哈希值存储在Zookeeper中,因此即使不重新启动代理也可以扩展安全性。确保在使用SASL / SCRAM时启用SSL加密,因此凭据不会作为PLAINTEXT在网络上发送。

III。 SASL GSSAPI(Kerberos)

它也是提供身份验证的一种非常安全的方法。因为它在Kerberos票证机制的基础上工作。Kerberos最常见的实现是Microsoft Active Directory。由于它允许公司从他们的Kerberos服务器中管理安全性,因此我们可以说SASL / GSSAPI是大型企业的绝佳选择。此外,SASL / GSSAPI可选择加密为SSL加密的通信。但是,使用Kerberos设置Kafka是最困难的选择,但最终还是值得的。
使用JMeter学习Apache Kafka-Load测试

(WIP)SASL扩展(KIP-86正在进行中)

为了更容易配置未在Kafka中实现的新的或自定义SASL机制,我们使用它。

(WIP)SASL OAUTHBEARER(KIP-255正在进行中)

这将允许我们利用OAUTH2令牌进行身份验证。
但是,要以更简单的方式执行它,请使用SASL / SCRAM或SASL / GSSAPI(Kerberos)作为身份验证层。

7.卡夫卡授权(ACL)

一旦我们的Kafka客户通过身份验证,Kafka就需要能够决定他们能做什么和不能做什么。这是授权进入的地方,由访问控制列表(ACL)控制。 
由于ACL可以帮助我们预防灾难,因此它们非常有用。让我们通过一个例子理解它,我们有一个主题需要只能从客户端或主机的子集写入。此外,我们希望阻止普通用户为这些主题编写任何内容,从而防止任何数据损坏或反序列化错误。如果我们有一些敏感数据,ACL也很好,我们需要向监管机构证明只有某些应用程序或用户才能访问这些数据。
我们可以使用kafka-acls命令添加ACL。它甚至还有一些设施和快捷方式来添加生产者或消费者。

    kafka-acl --topic test --producer --authorizer-properties zookeeper.connect=localhost: --add --allow-principal User:alice

结果是:
为资源“Topic:test”添加ACL:
用户:alice具有允许操作权限:描述主机:* 
用户:alice具有允许操作权限:从主机写入:* 
为资源添加ACL`C集:kafka -cluster`:
用户:alice具有允许操作权限:从主机创建:* 
注意:仅使用默认的SimpleAclAuthorizer在Zookeeper中存储ACL。另外,确保只有Kafka代理可以写入Zookeeper(zookeeper.set.acl = true)。否则,任何用户都可以进入并编辑ACL,从而破坏安全点。
卡夫卡的优点和缺点

8. Kafka中的ZooKeeper身份验证

Zookeeper身份验证

一个。新集群

为了在代理上启用ZooKeeper身份验证,有两个必要的步骤:

    首先,在创建JAAS登录文件后立即设置适当的系统属性并指向它。
    将每个代理中的配置属性zookeeper.set.acl设置为true。

基本上,ZooKeeper的Kafka集群元数据是世界可读的,但只有经纪人可以修改它,因为对该数据的不当操作会导致集群中断。此外,我们建议通过网络分段限制对ZooKeeper的访问。
阅读Apache ZooKeeper在Kafka中的角色 - 监控和配置

湾 迁移群集

我们需要执行几个步骤来启用ZooKeeper身份验证,同时尽可能减少对我们的操作的干扰,如果我们运行的是不支持安全性的Kafka版本或者只是禁用安全性,并且我们想要使群集安全:

    首先,执行滚动重新启动设置JAAS登录文件,该文件使代理能够进行身份验证。在滚动重新启动结束时,代理可以使用严格的ACL操作znode,但是它们不会使用这些ACL创建znode
    现在,第二次执行此操作,并确保此时将配置参数zookeeper.set.acl设置为true。因此,结果,这可以在创建znode时使用安全ACL。
    此外,执行ZkSecurityMigrator工具。因此,为了执行该工具,请使用以下脚本:./bin/zookeeper-security-migration.sh,并将zookeeper.acl设置为secure。此工具遍历相应的子树,从而更改znode的ACL。

通过以下步骤,我们可以关闭安全集群中的身份验证:

    执行设置JAAS登录文件的代理的滚动重启,这使得代理可以进行身份​​验证,但将zookeeper.set.acl设置为false。但是,在滚动重启结束时,代理停止使用安全ACL创建znode。虽然他们仍然能够验证和操纵所有znode。
    此外,使用此脚本./bin/zookeeper-security-migration.sh执行工具ZkSecurityMigrator工具,并将zookeeper.acl设置为不安全。它遍历相应的子树,改变了znode的ACL。
    此外,也是第二次执行。确保这次省略了设置JAAS登录文件的系统属性。

让我们来探讨卡夫卡泊坞窗:使用步骤多克尔运行Apache卡夫卡
实例 如何运行迁移工具:
例如,
./bin/zookeeper-security-migration.sh -zookeeper.acl =安全= -zookeeper.connect本地主机:2181 
运行此命令以查看完整的参数列表:
./ bin / zookeeper-security-migration.sh -help

C。 迁移ZooKeeper Ensemble

我们需要在ZooKeeper集合上启用身份验证。因此,我们需要执行服务器的滚动重启并设置一些属性来执行此操作。

所以,这一切都在Kafka Security Tutorial中。希望你喜欢我们的解释。

9.结论

因此,在这个Kafka安全教程中,我们已经看到了Kafka Security的介绍。此外,我们还讨论了Kafka Security对Kafka Security解决的问题的需求。此外,我们还讨论了SSL加密和SSL以及SASL Kafka身份验证。与此同时,在授权中,我们看到了Kafka主题授权。最后,我们查看了Zookeeper身份验证及其主要步骤。

Apache Kafka安全| Kafka的需求和组成部分的相关教程结束。

《Apache Kafka安全| Kafka的需求和组成部分.doc》

下载本文的Word格式文档,以方便收藏与打印。