Apache Kafka ACL - Amazon Managed Streaming for Apache Kafka
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Apache Kafka ACL

Apache Kafka 有一个可插拔的授权方并附带开箱即用的授权方实现,该实现使用 Apache ZooKeeper 来存储所有 ACL。Amazon MSK 在代理上的 server.properties 文件中启用此授权方。对于 Apache Kafka 版本 2.4.1,该授权方为 AclAuthorizer。对于更低版本的 Apache Kafka,该授权方为 SimpleAclAuthorizer。

Apache Kafka ACL 采用以下格式:“Principal P is [Allowed/Denied] Operation O From Host H on any Resource R matching ResourcePattern RP”。如果 RP 与特定资源 R 不匹配,则 R 没有关联的 ACL,因此不允许除超级用户之外的用户访问 R。若要更改此 Apache Kafka 行为,请将属性 allow.everyone.if.no.acl.found 设为 true。默认情况下,Amazon MSK 会将其设置为 true。这意味着,对于 Amazon MSK 集群,如果您没有在资源上显式设置 ACL,则所有委托人都可以访问此资源。如果在资源上启用 ACL,则只有授权的委托人才能访问它。如果要限制对主题的访问并使用 TLS 相互身份验证授权客户端,请使用 Apache Kafka 授权方 CLI 添加 ACL。有关添加、删除和列出 ACL 的更多信息,请参阅 Kafka 授权命令行界面

除客户端之外,您还需要授予所有代理访问主题的权限,以便代理可以从主分区复制消息。如果代理无权访问某个主题,则该主题的复制将失败。

注意

为避免阻止经纪商,请勿在 CLUSTER_ACTS 上设置 ACL。

添加或删除对主题的读写访问权

  1. 将代理添加到 ACL 表中,以允许它们读取具有 ACL 的所有主题。要授予代理对主题的读取访问权限,请在可与 MSK 集群通信的客户端计算机上运行以下命令。

    用您的 Apache Zookeeper 连接字符串替换 ZooKeeper-Connection-String。有关如何获取此字符串的信息,请参阅获取 Amazon MSK 集群的 Apache ZooKeeper 连接字符串

    用任何集群引导代理的 DNS 替换 Distinguished-Name,然后用星号 (*) 替换此可分辨名称中第一个句点之前的字符串。例如,如果您的集群的引导代理之一具有 DNS b-6.mytestcluster.67281x.c4.kafka.us-east-1.amazonaws.com,请将以下命令中的 Distinguished-Name 替换为 *.mytestcluster.67281x.c4.kafka.us-east-1.amazonaws.com。有关如何获取引导代理的信息,请参阅为亚马逊 MSK 集群获取引导经纪商

    bin/kafka-acls.sh --authorizer-properties zookeeper.connect=ZooKeeper-Connection-String --add --allow-principal "User:CN=Distinguished-Name" --operation Read --group=* --topic Topic-Name
  2. 要授予对主题的读访问权,请在客户端计算机上运行以下命令。使用您在创建私有密钥时使用的同一 Distinguished-Name

    bin/kafka-acls.sh --authorizer-properties zookeeper.connect=ZooKeeper-Connection-String --add --allow-principal "User:CN=Distinguished-Name" --operation Read --group=* --topic Topic-Name

    要删除读访问权,您可以运行相同的命令,并将 --add 替换为 --remove

  3. 要授予对主题的写访问权,请在客户端计算机上运行以下命令。使用您在创建私有密钥时使用的同一 Distinguished-Name

    bin/kafka-acls.sh --authorizer-properties zookeeper.connect=ZooKeeper-Connection-String --add --allow-principal "User:CN=Distinguished-Name" --operation Write --topic Topic-Name

    要删除写访问权,您可以运行相同的命令,并将 --add 替换为 --remove