定义 Kafka ACL 限制主题创建
Define Kafka ACL to limit topic creation
我们目前 运行 AWS MSK 上的一个不安全的 Kafka 设置(所以我无法直接访问大多数配置文件,需要使用 kafka-cli)并且正在研究增加保护的方法.设置 TLS 和 SASL 很容易,尽管我们的 Kafka 集群位于 VPN 后面并且已经限制访问并不会增加更多安全性。
我们想从最重要的和我们认为速效的安全添加开始。保护主题不被所有用户删除(和创建)。
我们目前将 allow.everyone.if.no.acl.found
设置为 true
。
我在 Google 或 Stack Overflow 上找到的所有内容向我展示了如何限制用户从 reading/writing 访问他们无法访问的其他主题。虽然理想情况下,这不是我们想要作为第一步实施的目标。
我找到了有关 root 用户的信息(是管理员用户,尽管在我阅读的所有教程中都被称为 root)。尽管我找到的示例没有显示向此根用户添加 ACL 以使其成为唯一可访问的示例,但主题 deletion/creation.
你能解释一下如何创建一个用户并阻止所有其他用户吗?
顺便说一下,我们也不使用 zookeeper,即使 MSK 集群默认使用它。并希望我们可以在不主动将 zookeeper 添加到我们的堆栈中的情况下做到这一点。给出的答案 hardly relies on zookeeper. Also, this answer 仅指向主题 read/write 示例,即使问题与我的问题相同
首先我要声明一个免责声明,我个人对 AWS MSK 产品的细节并不熟悉,所以这个答案主要基于我对 Apache Kafka 开源发行版的理解。
First - 默认情况下,Kafka ACL 实际上存储在 Zookeeper 中,因此如果您不使用 Zookeeper,可能值得添加它。
参考 - Kafka Definitive Guide - 2nd edition - 第 11 章 - 保护 Kafka - 第 294 页
第二 - 如果您使用 SASL 通过任何受支持的机制(例如 GSSAPI (Kerberos))进行身份验证,那么您需要像往常一样创建主体通常创建一个并使用以下选项之一:
使用kafka-acls
命令添加主题creation/deletion 等所需的权限(Command Reference)
bin/kafka-acls.sh --add --cluster --operation Create --authorizer-properties zookeeper.connect=localhost:2181 --allow-principal User:admin
注意 - admin
是假定的主体名称
或者通过添加以下行将 admin
用户添加到 server.properties
文件中的超级用户列表,这样它就可以不受限制地访问所有资源
super.users=User:Admin
可以在由 ;
分隔的同一行中添加更多用户。
要增加严格性,您需要将 allow.everyone.if.no.acl.found
设置为 false
,以便只有明确添加这些权限才能授予对任何资源的任何访问权限。
Third - 由于您特别询问了您的 root
用户,我假设您在这里指的是 linux root。您可以使用 kafka-acls.sh
脚本的 chmod
命令来限制 linux 级别的权限,但这是实现您需要的一种相当粗糙的方法。我也不完全确定这在 MSK 中是否可行。
郑重声明,我运行以下命令使其工作。
1 个可以管理集群的管理员(根)用户,尽管 allow.everyone.if.no.acl.found
设置为 true
所有没有 ACL 的用户只能 read/write 访问主题。
# Define ACL for test_admin user
/kafka/bin/kafka-acls.sh \
--bootstrap-server $BROKERS \
--command-config /app/accounts/test_admin.properties \
--add \
--allow-principal User:test_admin \
--operation Alter \
--operation Create \
--operation Describe \
--operation DescribeConfigs \
--allow-host '*' \
--cluster
# Define ACL for Broker (ANONYMOUS) user
/kafka/bin/kafka-acls.sh \
--bootstrap-server $BROKERS \
--command-config /app/accounts/test_admin.properties \
--add \
--allow-principal User:ANONYMOUS \
--operation ALL \
--cluster
# Define ACL for all users to only give them read/write
/kafka/bin/kafka-acls.sh \
--bootstrap-server $BROKERS \
--command-config /app/accounts/test_admin.properties \
--add \
--allow-principal User:* \
--operation Read \
--operation Write \
--topic '*' \
--allow-host '*'
我们目前 运行 AWS MSK 上的一个不安全的 Kafka 设置(所以我无法直接访问大多数配置文件,需要使用 kafka-cli)并且正在研究增加保护的方法.设置 TLS 和 SASL 很容易,尽管我们的 Kafka 集群位于 VPN 后面并且已经限制访问并不会增加更多安全性。
我们想从最重要的和我们认为速效的安全添加开始。保护主题不被所有用户删除(和创建)。
我们目前将 allow.everyone.if.no.acl.found
设置为 true
。
我在 Google 或 Stack Overflow 上找到的所有内容向我展示了如何限制用户从 reading/writing 访问他们无法访问的其他主题。虽然理想情况下,这不是我们想要作为第一步实施的目标。
我找到了有关 root 用户的信息(是管理员用户,尽管在我阅读的所有教程中都被称为 root)。尽管我找到的示例没有显示向此根用户添加 ACL 以使其成为唯一可访问的示例,但主题 deletion/creation.
你能解释一下如何创建一个用户并阻止所有其他用户吗?
顺便说一下,我们也不使用 zookeeper,即使 MSK 集群默认使用它。并希望我们可以在不主动将 zookeeper 添加到我们的堆栈中的情况下做到这一点。给出的答案
首先我要声明一个免责声明,我个人对 AWS MSK 产品的细节并不熟悉,所以这个答案主要基于我对 Apache Kafka 开源发行版的理解。
First - 默认情况下,Kafka ACL 实际上存储在 Zookeeper 中,因此如果您不使用 Zookeeper,可能值得添加它。
参考 - Kafka Definitive Guide - 2nd edition - 第 11 章 - 保护 Kafka - 第 294 页
第二 - 如果您使用 SASL 通过任何受支持的机制(例如 GSSAPI (Kerberos))进行身份验证,那么您需要像往常一样创建主体通常创建一个并使用以下选项之一:
使用
kafka-acls
命令添加主题creation/deletion 等所需的权限(Command Reference)bin/kafka-acls.sh --add --cluster --operation Create --authorizer-properties zookeeper.connect=localhost:2181 --allow-principal User:admin
注意 -
admin
是假定的主体名称或者通过添加以下行将
admin
用户添加到server.properties
文件中的超级用户列表,这样它就可以不受限制地访问所有资源super.users=User:Admin
可以在由
;
分隔的同一行中添加更多用户。
要增加严格性,您需要将 allow.everyone.if.no.acl.found
设置为 false
,以便只有明确添加这些权限才能授予对任何资源的任何访问权限。
Third - 由于您特别询问了您的 root
用户,我假设您在这里指的是 linux root。您可以使用 kafka-acls.sh
脚本的 chmod
命令来限制 linux 级别的权限,但这是实现您需要的一种相当粗糙的方法。我也不完全确定这在 MSK 中是否可行。
郑重声明,我运行以下命令使其工作。
1 个可以管理集群的管理员(根)用户,尽管 allow.everyone.if.no.acl.found
设置为 true
所有没有 ACL 的用户只能 read/write 访问主题。
# Define ACL for test_admin user
/kafka/bin/kafka-acls.sh \
--bootstrap-server $BROKERS \
--command-config /app/accounts/test_admin.properties \
--add \
--allow-principal User:test_admin \
--operation Alter \
--operation Create \
--operation Describe \
--operation DescribeConfigs \
--allow-host '*' \
--cluster
# Define ACL for Broker (ANONYMOUS) user
/kafka/bin/kafka-acls.sh \
--bootstrap-server $BROKERS \
--command-config /app/accounts/test_admin.properties \
--add \
--allow-principal User:ANONYMOUS \
--operation ALL \
--cluster
# Define ACL for all users to only give them read/write
/kafka/bin/kafka-acls.sh \
--bootstrap-server $BROKERS \
--command-config /app/accounts/test_admin.properties \
--add \
--allow-principal User:* \
--operation Read \
--operation Write \
--topic '*' \
--allow-host '*'