Amazon MSK 开启 Public 访问 SASL 配置的方法
1. 开启 MSK Public
1.1 配置 MSK 参数
- 进入 MSK 控制台页面,点击左侧菜单 Cluster configuration。
- 选择已有配置,或者创建新配置。
- 在配置中添加参数
allow.everyone.if.no.acl.found=false
- 修改集群配置,选择到新添加的配置。
1.2 开启 Public
- 选中集群,进入集群配置页面,选择 Properties
- 找到 Networking settings,点击 Edit 菜单。
- 选择 Edit public access
2. 注意事项
由于 MSK 开启 Public 访问,必须要开启 SASL/IAM 认证方式。而 Amazon MSK 默认 allow.everyone.if.no.acl.found=true,所有用户都可以拥有权限,因为 MSK 没有 super user,但是当将 MSK 开启 public 之后,这个参数必须设置为 false。因此,如果当集群还未配置任何用户权限的情况下,将 allow.everyone.if.no.acl.found 设置为 false,会无法使用任何用户来访问 MSK。
3. 启用 SASL 后的解决方案
- 先创建 MSK 集群,开启 SASL 认证,通过 Secrets Manager,配置用户名密码,然后绑定到 MSK 集群,不启用 Public 访问。 具体的配置方法,可以参考 MSK Lab Workshop
- MSK 集群启动后,按如下命令配置用户权限。
# 设置 MSK Cluster bostrap
export brokerssasl=xxxx:9096,xxxx:9096,xxxx:9096
# 生成用户认证文件
echo -n "security.protocol=SASL_SSL
sasl.mechanism=SCRAM-SHA-512
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \\
username="<username>" \\
password="<password>";
" > /tmp/client.properties_<username>```
# 给用户赋权
bin/kafka-acls.sh --bootstrap-server $brokerssasl \
--add --allow-principal User:<username> --operation All --cluster '*' \
--command-config /tmp/client.properties_<username>
bin/kafka-acls.sh --bootstrap-server $brokerssasl \
--add --allow-principal User:<username> --operation All --group '*' \
--command-config /tmp/client.properties_<username>```
--add --allow-principal User:<username> --operation All --cluster '*'
没有包含消费者组权限,因此,还需要单独再给用户赋予组权限
- 集群修改配置,添加 allow.everyone.if.no.acl.found=false, 然后启用 Public
- 通过 public host 验证用户访问
# 设置 MSK Cluster bostrap
export brokerssasl=xxxx:9096,xxxx:9096,xxxx:9096
# list
bin/kafka-topics.sh --list --bootstrap-server $brokerssasl --command-config /tmp/client.properties_<username>
# consumer
$KAFKA_HOME/bin/kafka-console-consumer.sh --bootstrap-server $brokerssasl --group group01 --topic test_topic --consumer.config --command-config /tmp/client.properties_<username>