Apache Kafka ACL - Amazon Managed Streaming for Apache Kafka

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

Apache Kafka ACL

Apache Kafka 有一个可插拔的授权器,并附带了授权器实现。 out-of-box Amazon MSK 在代理上的 server.properties 文件中启用此授权方。

Apache Kafka ACL 的格式为 “主体 P 是 [允许/拒绝] 主机 H 对任何与 RP 匹配的资源 R 执行操作 O”。 ResourcePattern 如果 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 授权命令行界面

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

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

    用任何集群引导代理的 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。有关如何获取引导代理的信息,请参阅获取 Amazon MSK 集群的引导代理

    <path-to-your-kafka-installation>/bin/kafka-acls.sh --authorizer-properties --bootstrap-server BootstrapServerString --add --allow-principal "User:CN=Distinguished-Name" --operation Read --group=* --topic Topic-Name
  2. 要授予对主题的读访问权,请在客户端计算机上运行以下命令。如果使用双向 TLS 身份验证,请使用您创建私有密钥时使用的同一 Distinguished-Name

    <path-to-your-kafka-installation>/bin/kafka-acls.sh --authorizer-properties --bootstrap-server BootstrapServerString --add --allow-principal "User:CN=Distinguished-Name" --operation Read --group=* --topic Topic-Name

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

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

    <path-to-your-kafka-installation>/bin/kafka-acls.sh --authorizer-properties --bootstrap-server BootstrapServerString --add --allow-principal "User:CN=Distinguished-Name" --operation Write --topic Topic-Name

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