Kafka ACL(访问控制列表)介绍

打印 上一主题 下一主题

主题 969|帖子 969|积分 2922

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Kafka ACL(访问控制列表)介绍

Kafka 的 ACL(Access Control List) 是一种用于控制访问权限的机制,它允许 Kafka 集群管理员细粒度地管理用户和应用步伐对 Kafka 资源(如主题、消费者组、集群等)的访问权限。通过设置 ACL,Kafka 集群的安全性得到了有效保障,防止未授权的用户实行敏感操作。
1. Kafka ACL 的基本概念

1.1 Kafka ACL 的目的

Kafka ACL 的主要目的是通过细粒度的访问控制来:


  • 限制对敏感资源的访问:确保只有授权的用户或客户端可以或许实行某些操作(如生产、消费、创建、删除主题等)。
  • 保障数据的安全性:通过控制哪些用户可以访问哪些数据,防止数据泄露或误操作。
  • 管理集群资源:通过对集群管理操作的权限控制,制止不当操作对集群稳定性造成影响。
1.2 Kafka ACL 的组成部分

Kafka ACL 主要由以下几个组成部分:
(1)Principal(主体)
Principal 指实行操作的用户或客户端标识,Kafka 支持两种范例的主体:


  • User:表示特定的用户,格式为 User:<username>。
  • ClientId:表示客户端标识,格式为 ClientId:<client-id>。
比方,User:alice 表示名为 Alice 的用户,而 ClientId:producer1 表示客户端标识为 producer1 的生产者。
(2)Operation(操作)
Operation 定义了可以实行的操作范例,常见的操作包括:


  • Read:读取操作,允许消费者从主题中读取消息。
  • Write:写入操作,允许生产者将消息发送到主题。
  • Create:创建资源,允许创建新主题或其他资源。
  • Delete:删除资源,允许删除主题等资源。
  • Alter:修改资源,允许修改主题的设置(如分区数等)。
  • Describe:检察资源元数据,允许检察主题、消费者组、集群等的形貌信息。
  • ClusterAction:对集群的管理操作,如集群的状态检察、控制等。
(3)Resource(资源)
Resource 是指对哪些 Kafka 资源进行权限控制,Kafka 支持以下几种范例的资源:


  • Topic:主题,是 Kafka 中最常见的资源范例。ACL 主要用于控制对主题的生产和消费权限。
  • Group:消费者组,控制用户或客户端对消费者组的访问。
  • Cluster:集群资源,控制集群级别的操作权限,比方创建、删除主题。
  • TransactionalId:事务 ID,主要用于控制事务操作的权限。
(4)Permission(权限)
Permission 表示是否允许或拒绝特定的操作,Kafka 的 ACL 中有两种权限:


  • Allow:允许实行指定的操作。
  • Deny:拒绝实行指定的操作。
管理员可以通过 Allow 或 Deny 来控制特定用户或客户端对资源的操作权限。
2. Kafka 支持的资源范例

Kafka 支持多种 资源范例,每种资源范例可以应用访问控制列表(ACL)来管理对该资源的访问权限。这些资源范例包括 主题(Topic)消费者组(Consumer Group)集群(Cluster) 等。
2.1 Topic(主题)

Topic 是 Kafka 中最常见的资源范例。它用于存储和组织消息,生产者向主题发送消息,而消费者从主题读取消息。Kafka 的 ACL 可以准确地控制对主题的读写操作。
常见的操作权限


  • Read:允许从主题读取消息。
  • Write:允许向主题写入消息。
  • Create:允许创建新的主题。
  • Delete:允许删除主题。
  • Alter:允许修改主题的设置(如分区数目、保留策略等)。
  • Describe:允许检察主题的元数据(如分区数、日志保留策略等)。
示例


  • 允许用户 alice 写入 test-topic:
    1. bin/kafka-acls.sh --bootstrap-server <broker> --add --allow-principal User:alice --operation Write --topic test-topic
    复制代码
  • 允许用户 bob 读取 test-topic:
    1. bin/kafka-acls.sh --bootstrap-server <broker> --add --allow-principal User:bob --operation Read --topic test-topic
    复制代码
2.2 Consumer Group(消费者组)

Consumer Group 是 Kafka 中的一种资源范例,它表示一个消费者实例的集合,负责从主题中消费消息。多个消费者可以组成一个消费者组,每个消费者组内的多个消费者共同消费一个主题的消息。Kafka 的 ACL 允许对消费者组设置访问控制权限。
常见的操作权限


  • Read:允许消费者组读取消息。
  • Describe:允许检察消费者组的状态、偏移量等元数据。
示例


  • 允许用户 alice 从 group1 消费消息:
    1. bin/kafka-acls.sh --bootstrap-server <broker> --add --allow-principal User:alice --operation Read --group group1
    复制代码
  • 允许用户 bob 检察 group1 的消费者组状态:
    1. bin/kafka-acls.sh --bootstrap-server <broker> --add --allow-principal User:bob --operation Describe --group group1
    复制代码
2.3 Cluster(集群)

Cluster 是 Kafka 集群的资源范例,表示 Kafka 系统本身。集群级别的 ACL 允许对整个集群进行管理操作,如创建、删除、修改主题等操作。
常见的操作权限


  • Create:允许创建主题。
  • Delete:允许删除主题。
  • Describe:允许检察集群状态、元数据等。
  • Alter:允许修改集群级别的设置。
示例


  • 允许用户 admin 创建和删除主题:
    1. bin/kafka-acls.sh --bootstrap-server <broker> --add --allow-principal User:admin --operation Create --topic *
    2. bin/kafka-acls.sh --bootstrap-server <broker> --add --allow-principal User:admin --operation Delete --topic *
    复制代码
  • 允许用户 admin 检察集群信息:
    1. bin/kafka-acls.sh --bootstrap-server <broker> --add --allow-principal User:admin --operation Describe --cluster
    复制代码
2.4 TransactionalId(事务 ID)

Kafka 中的 TransactionalId 是一种用于管理 Kafka 事务的资源范例,特别是对于支持 事务 的 Kafka 生产者。事务 ID 用于在 Kafka 中处理生产者的事务,确保消息的准确一次通报。
常见的操作权限


  • Read:允许读取事务消息。
  • Write:允许创建或写入事务消息。
示例


  • 允许用户 producer1 使用事务 ID txn-1 写入消息:
    1. bin/kafka-acls.sh --bootstrap-server <broker> --add --allow-principal User:producer1 --operation Write --transactional-id txn-1
    复制代码
  • 允许用户 consumer1 读取事务消息:
    1. bin/kafka-acls.sh --bootstrap-server <broker> --add --allow-principal User:consumer1 --operation Read --transactional-id txn-1
    复制代码
2.5 Delegation Token(委托令牌)

Delegation Token 是一种用于认证和授权的临时凭据,适用于分布式系统中的短期权限授予。在 Kafka 中,委托令牌通常用于支持跨集群访问或通过 OAuth 等第三方认证机制授权。
常见的操作权限


  • Read:允许获取委托令牌。
  • Write:允许创建或删除委托令牌。
2.6 ACL 管理与资源范例的联合

Kafka 允许将 ACL 设置应用于上述资源范例中的任意组合,并且 ACL 操作权限可以根据差别的资源范例设置。这种细粒度的控制保证了 Kafka 系统的安全性,防止未授权的操作对集群资源造成影响。
举例:资源范例与权限联合


  • 允许用户 alice 对 topic1 进行写入操作:
    1. bin/kafka-acls.sh --bootstrap-server <broker> --add --allow-principal User:alice --operation Write --topic topic1
    复制代码
  • 允许用户 bob 在 group1 中消费 topic1 的消息:
    1. bin/kafka-acls.sh --bootstrap-server <broker> --add --allow-principal User:bob --operation Read --group group1 --topic topic1
    复制代码
  • 允许用户 admin 对整个集群进行形貌:
    1. bin/kafka-acls.sh --bootstrap-server <broker> --add --allow-principal User:admin --operation Describe --cluster
    复制代码
3. Kafka ACL 操作下令

Kafka 提供了 kafka-acls.sh 工具用于管理集群中的访问控制列表(ACL)。通过该下令,你可以设置、检察和删除访问控制规则,限制差别用户或客户端对 Kafka 资源(如主题、消费者组、集群等)的访问权限。
3.1 列出现有的 ACL 设置

使用 --list 选项可以列出当前 Kafka 集群的 ACL 设置。这将显示所有资源和相关的访问控制策略。
下令格式
  1. bin/kafka-acls.sh --bootstrap-server <broker> --list
复制代码
示例
列出 Kafka 集群上的所有 ACL 设置:
  1. bin/kafka-acls.sh --bootstrap-server localhost:9092 --list
复制代码
此下令会输出当前集群中所有资源的 ACL 设置。
3.2 添加 ACL 权限

使用 --add 选项可以向 Kafka 资源添加访问权限。你可以为特定的 用户客户端 授予对特定资源(如主题、消费者组)的操作权限。
下令格式
  1. bin/kafka-acls.sh --bootstrap-server <broker> --add --allow-principal <principal> --operation <operation> --resource <resource-type> --topic <topic-name> --group <group-name>
复制代码


  • --add: 添加 ACL 条目。
  • --allow-principal: 指定允许访问资源的主体(可以是用户或客户端)。
  • --operation: 指定允许的操作,如 Read, Write, Create, Delete 等。
  • --resource: 指定资源范例(如 Topic, Group, Cluster)。
  • --topic: 指定操作的主题名称。
  • --group: 指定消费者组名称。
示例 1:允许用户 alice 写入 test-topic 主题
  1. bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal User:alice --operation Write --topic test-topic
复制代码
示例 2:允许消费者组 group1 读取 test-topic 主题
  1. bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal Group:group1 --operation Read --topic test-topic
复制代码
示例 3:允许用户 admin 创建主题
  1. bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal User:admin --operation Create --topic *
复制代码
示例 4:允许用户 alice 删除 test-topic 主题
  1. bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal User:alice --operation Delete --topic test-topic
复制代码
3.3 删除 ACL 权限

使用 --remove 选项可以删除已存在的 ACL 条目,撤销某个用户或客户端对某个资源的访问权限。
下令格式
  1. bin/kafka-acls.sh --bootstrap-server <broker> --remove --allow-principal <principal> --operation <operation> --resource <resource-type> --topic <topic-name> --group <group-name>
复制代码
示例 1:删除用户 alice 对 test-topic 的写入权限
  1. bin/kafka-acls.sh --bootstrap-server localhost:9092 --remove --allow-principal User:alice --operation Write --topic test-topic
复制代码
示例 2:删除消费者组 group1 对 test-topic 的读取权限
  1. bin/kafka-acls.sh --bootstrap-server localhost:9092 --remove --allow-principal Group:group1 --operation Read --topic test-topic
复制代码
3.4 删除所有 ACL 权限

要删除所有与某个资源相关的 ACL 权限,可以通过指定通配符(*)删除某个范例资源的所有 ACL 设置。
下令格式
  1. bin/kafka-acls.sh --bootstrap-server <broker> --remove --all --topic <topic-name>
复制代码
示例
删除 test-topic 主题上所有的 ACL 设置:
  1. bin/kafka-acls.sh --bootstrap-server localhost:9092 --remove --all --topic test-topic
复制代码
3.5 检察特定资源的 ACL 设置

使用 --list 选项可以检察指定资源的 ACL 设置。比方,可以检察某个主题或消费者组的 ACL。
下令格式
  1. bin/kafka-acls.sh --bootstrap-server <broker> --list
  2. --topic <topic-name> --group <group-name>
复制代码
示例 1:检察 test-topic 主题的所有 ACL 设置
  1. bin/kafka-acls.sh --bootstrap-server localhost:9092 --list
  2. --topic test-topic
复制代码
示例 2:检察消费者组 group1 的 ACL 设置
  1. bin/kafka-acls.sh --bootstrap-server localhost:9092 --list
  2. --group group1
复制代码
3.6 仅允许或拒绝特定操作

Kafka 允许对某些操作使用 Deny 权限来显式拒绝访问。
下令格式
  1. bin/kafka-acls.sh --bootstrap-server <broker> --add --deny-principal <principal> --operation <operation> --resource <resource-type> --topic <topic-name> --group <group-name>
复制代码
示例 1:显式拒绝用户 alice 对 test-topic 主题的写入权限
  1. bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --deny-principal User:alice --operation Write --topic test-topic
复制代码
示例 2:显式拒绝消费者组 group1 对 test-topic 主题的读取权限
  1. bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --deny-principal Group:group1 --operation Read --topic test-topic
复制代码
3.7 组合 ACL 设置

可以在同一下令中为多个资源范例添加或删除 ACL。比方,可以为多个主题、消费者组同时设置权限。
下令格式
  1. bin/kafka-acls.sh --bootstrap-server <broker> --add --allow-principal User:<username> --operation <operation> --topic <topic1>,<topic2> --group <group-name>
复制代码
示例


  • 允许用户 alice 向 test-topic 和 another-topic 写入消息,并允许 group1 从这两个主题读取消息:
    1. bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal User:alice --operation Write --topic test-topic
    2. ,another-topicbin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal Group:group1 --operation Read --topic test-topic
    3. ,another-topic
    复制代码
3.8 使用 Wildcard(通配符)进行设置

Kafka 支持使用通配符来设置多个主题或资源。比方,使用 * 表示所有主题,* 表示所有消费者组。
下令格式
  1. bin/kafka-acls.sh --bootstrap-server <broker> --add --allow-principal User:<username> --operation <operation> --topic *
复制代码
示例 1:允许用户 alice 对所有主题进行写入
  1. bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal User:alice --operation Write --topic *
复制代码
示例 2:允许消费者组 group1 读取所有主题
  1. bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal Group:group1 --operation Read --topic *
复制代码
5. Kafka ACL 管理最佳实践

在 Kafka 集群中,使用 ACL(访问控制列表) 来管理权限是确保数据安全和集群控制的关键。合理的 ACL 管理可以或许帮助组织在多租户环境中掩护 Kafka 资源,同时确保差别的用户、应用步伐或消费者组仅能实行须要的操作。
5.1 最小权限原则(Principle of Least Privilege)

最佳实践:为每个用户、客户端和消费者组设置最小权限,只允许他们实行须要的操作。这有助于减少潜伏的安全风险,确保每个实体只能访问它们必要的资源。
示例 1:为生产者用户设置写入权限
场景:允许用户 producer-user 只能写入 test-topic 主题,不能读取或实行其他操作。
  1. bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal User:producer-user --operation Write --topic test-topic
复制代码
解释


  • --allow-principal User:producer-user: 允许 producer-user。
  • --operation Write: 仅授予写入权限,禁止其他操作。
示例 2:为消费者组设置读取权限
场景:允许消费者组 consumer-group 读取 test-topic 主题的数据,但不能进行写入。
  1. bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal Group:consumer-group --operation Read --topic test-topic
复制代码
解释


  • --allow-principal Group:consumer-group: 允许 consumer-group。
  • --operation Read: 仅授予读取权限,禁止写入。
5.2 使用通配符来减少 ACL 设置的复杂性

最佳实践:使用通配符(*)来简化 ACL 设置,尤其在资源众多时。通配符允许你一次性授予对多个资源的访问权限。
示例 3:允许某个用户读取所有主题
场景:允许用户 alice 读取集群中所有的主题,而不授予写入权限。
  1. bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal User:alice --operation Read --topic *
复制代码
解释


  • --topic *: 允许访问所有主题。
  • --operation Read: 仅授予读取权限。
示例 4:允许消费者组写入所有主题
场景:允许消费者组 group1 向集群中所有的主题写入消息。
  1. bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal Group:group1 --operation Write --topic *
复制代码
解释


  • --topic *: 允许访问所有主题。
  • --operation Write: 仅授予写入权限。
5.3 强化集群安全性:控制管理权限

最佳实践:应限制对集群级别操作的访问权限,比方集群设置修改、创建和删除主题等。这些操作通常由管理员实行。
示例 5:限制用户只能检察集群元数据
场景:允许 read-only 用户仅检察集群元数据(如主题、分区等),而不能进行任何修改操作。
  1. bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal User:read-only --operation Describe --cluster
复制代码
解释


  • --operation Describe: 允许检察集群元数据。
  • --cluster: 针对集群资源进行权限设置。
示例 6:仅允许管理员创建和删除主题
场景:只允许用户 admin 创建和删除主题,而不允许平凡用户进行这些操作。
  1. bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal User:admin --operation Create --operation Delete --topic *
复制代码
解释


  • --operation Create --operation Delete: 授予创建和删除主题的权限。
  • --topic *: 对所有主题资源进行设置。
5.4 定期审计和监控 ACL 设置

最佳实践:定期审计 Kafka 集群中的 ACL 设置,确保权限精确且没有过度权限。在大型集群中,手动管理 ACL 可能导致错误,使用主动化工具和监控机制非常告急。
示例 7:列出所有 ACL 设置
场景:审计当前集群中的所有 ACL 设置,检查每个用户和消费者组的访问权限。
  1. bin/kafka-acls.sh --bootstrap-server localhost:9092 --list
  2. --topic *
复制代码
解释


  • --list: 列出当前所有的 ACL 设置。
  • --topic *: 针对所有主题列出 ACL 设置。
示例 8:定期检查某个用户的权限
场景:定期检查用户 alice 对 test-topic 的权限。
  1. bin/kafka-acls.sh --bootstrap-server localhost:9092 --list
  2. --principal User:alice --topic test-topic
复制代码
解释


  • --list: 列出用户的所有 ACL 设置。
  • --principal User:alice: 指定要检察的用户。
  • --topic test-topic: 仅检察该用户在 test-topic 上的权限。
5.5 使用拒绝(Deny)策略明确禁止操作

最佳实践:通过明确的拒绝(Deny)策略来防止特定操作,即使在一些 ACL 中未显式列出。这有助于更好地控制资源访问,特别是在多租户环境中。
示例 9:拒绝某个用户读取敏感主题
场景:拒绝用户 bob 对 sensitive-topic 主题的读取权限。
  1. bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --deny-principal User:bob --operation Read --topic sensitive-topic
复制代码
解释


  • --deny-principal User:bob: 明确拒绝用户 bob 对 sensitive-topic 主题的读取权限。
  • --operation Read: 仅拒绝读取权限。
示例 10:拒绝所有效户对特定主题进行写入
场景:拒绝所有效户对 restricted-topic 进行写入操作。
  1. bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --deny-principal User:* --operation Write --topic restricted-topic
复制代码
解释


  • --deny-principal User:*: 拒绝所有效户。
  • --operation Write: 明确拒绝写入操作。
5.6 联合 Kerberos 和 SASL 强化身份认证

最佳实践:对于更高的安全需求,应联合 Kerberos 或 SASL 认证机制来进行身份验证,并与 ACL 设置联合使用。这样可以或许确保仅颠末身份验证的用户和客户端可以或许实行权限操作。
示例 11:设置 Kafka 与 SASL/Kerberos 集成后使用 ACL
场景:设置 Kafka 使用 SASL/Kerberos 进行身份验证,确保只有通过身份验证的用户才能访问特定资源。

  • 设置 Kafka 集群启用 SASL/Kerberos 认证。
  • 设置用户 ACL。
  1. bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal User:alice --operation Read --topic test-topic
复制代码
解释


  • User:alice:指定一个已通过 Kerberos 或 SASL 认证的用户。
  • --operation Read:授予 alice 用户对 test-topic 主题的读取权限。
5.7 删除不再必要的 ACL 设置

最佳实践:定期清理不再使用的 ACL 设置,制止过度权限设置并保持集群的整洁。
示例 12:删除某个用户的 ACL 设置
场景:删除 user1 对 test-topic 主题的所有权限。
  1. bin/kafka-acls.sh --bootstrap-server localhost:9092 --remove --principal User:user1 --topic test-topic
复制代码
解释


  • --remove: 删除指定用户的 ACL 设置。
  • --principal User:user1: 指定要删除权限的用户。
  • --topic test-topic: 删除用户在 test-topic 上的所有权限。
6. 总结

Kafka 的 ACL 是集群访问控制的核心机制,允许管理员根据用户、客户端、消费者组等标识,精细化地控制对 Kafka 资源的访问。通过合适的 ACL 设置,管理员可以确保只有授权的用户可以或许实行操作,从而有效提高 Kafka 集群的安全性。
常见的操作包括:


  • 控制用户对主题的读写权限。
  • 设置消费者组的访问权限。
  • 管理集群级别的操作权限,如创建、删除主题等。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大连全瓷种植牙齿制作中心

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表