Apache Kafka ACL
Apache Kafka 有一个可插拔的授权方并附带开箱即用的授权方实现。Amazon MSK 在代理上的 server.properties 文件中启用此授权方。
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 授权命令行界面
由于 Amazon MSK 将代理配置为超级用户,因此代理可访问所有主题。这有助于代理从主分区复制消息,无论是否为集群配置定义了 allow.everyone.if.no.acl.found 属性。
添加或删除对主题的读写访问权
-
将代理添加到 ACL 表中,以允许它们读取具有 ACL 的所有主题。要授予代理对主题的读取访问权限,请在可与 MSK 集群通信的客户端计算机上运行以下命令。
用任何集群引导代理的 DNS 替换
Distinguished-Name,然后用星号 (*) 替换此可分辨名称中第一个句点之前的字符串。例如,如果您的集群的引导代理之一具有 DNSb-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 --bootstrap-server BootstrapServerString --add --allow-principal "User:CN=Distinguished-Name" --operation Read --group=* --topicTopic-Name -
要授予客户端应用对主题的读访问权,请在客户端计算机上运行以下命令。如果使用双向 TLS 身份验证,请使用您创建私有密钥时使用的同一
Distinguished-Name。<path-to-your-kafka-installation>/bin/kafka-acls.sh --bootstrap-server BootstrapServerString --add --allow-principal "User:CN=Distinguished-Name" --operation Read --group=* --topicTopic-Name要删除读访问权,您可以运行相同的命令,并将
--add替换为--remove。 -
要授予对主题的写访问权,请在客户端计算机上运行以下命令。如果使用双向 TLS 身份验证,请使用您创建私有密钥时使用的同一
Distinguished-Name。<path-to-your-kafka-installation>/bin/kafka-acls.sh --bootstrap-server BootstrapServerString --add --allow-principal "User:CN=Distinguished-Name" --operation Write --topicTopic-Name要删除写访问权,您可以运行相同的命令,并将
--add替换为--remove。