Zookeeper访问权限的控制

上两节我们讨论了如何对MSK进行登录验证和授权,当时的客户端连接MSK时都是使用Bootstrap servers(Broker)的地址来连接。

但如果用户拿到了Zookeeper的连接方式,我们所做的一切安全措施将不复存在,用户可以使用zookeeper连接上去:

  • 随意更改topic的ACL
  • 创建或删除Topic等

所以对Zookeeper的访问进行控制是非常有必要的。对Zookeeper的加固一般有两种思路:

  1. 将Zookeeper的节点放到单独的安全组, 用这个安全组控制哪些IP能访问它(很无奈,目前MSK的Zookeeper仅能通过这种方式来控制谁能访问它)
  2. 使用TLS加密客户端到ZooKeeper节点的流量

将Zookeeper节点放到单独的安全组

获取Zookeeper的连接地址:

image-20220109193834875

每个地址都ping一下,得到三个zookeeper节点的私有IP地址:

image-20220109193945696

进入EC2的Network Interfaces页面:

image-20220109193520293

在里面搜索这三个IP,找到对应的ENI:

image-20220109194027267

分别编辑每个ENI的安全组,替换成新的安全组。

image-20220109194048906

在新的安全组中,我们可以定义规则,例如仅允许管理员的IP来访问,这样其他用户的IP不再可以登录到Zookeeper。

使用TLS加密客户端到Zookeeper之间的流量

在MSK中,我们看到ZooKeeper除了Plaintext外,还有TLS的连接地址,可以用它来对客户端到ZooKeeper节点之间的流量进行加密:

image-20220109193834875

具体的配置参考 https://docs.aws.amazon.com/msk/latest/developerguide/zookeeper-security.html ,这一节不再做详细介绍