AWS MSK Kafka开启公共访问权限(Public Access)
AWS MSK Kafka是AWS推出的一种托管式Kafka服务,它提供了一个完全托管的Kafka集群,无需管理Kafka集群的基础设施。在使用AWS MSK Kafka的过程中,有时候我们需要开启公共访问权限,以便外部服务可以访问到我们的Kafka集群。本文将介绍如何在AWS MSK Kafka上开启公共访问权限。
创建集群
创建集群的步骤和配置选项都比较复杂,这里推荐使用terraform来创建,下面是一个简单的例子:
resource "aws_msk_cluster" "space_kafka_test" {
cluster_name = var.cluster_name
kafka_version = var.kafka_version
number_of_broker_nodes = var.number_of_broker_nodes
broker_node_group_info {
instance_type = var.instance_type
client_subnets = var.client_subnets
security_groups = [aws_security_group.sg.id]
storage_info {
ebs_storage_info {
volume_size = 10
}
}
connectivity_info {
public_access {
type = "SERVICE_PROVIDED_EIPS"
}
}
}
encryption_info {
encryption_at_rest_kms_key_arn = aws_kms_key.kms.arn
}
client_authentication {
unauthenticated = false
sasl {
iam = true
scram = true
}
}
configuration_info {
arn = aws_msk_configuration.config[0].arn
revision = aws_msk_configuration.config[0].latest_revision
}
tags = {}
}
这里面整个的核心还是sasl.iam
和sasl.scram
的配置,iam是指使用AWS IAM来进行认证,scram是指使用用户名密码来进行认证。iam这边我需要用来配置zookeeper,创建主题等操作,scram这边我需要用来配置访问kafka集群。
Kafka ACL授权
由于我们开启了公共访问权限,所以我们需要对Kafka集群进行ACL授权,以便控制访问权限。请根据实际的情况修改zookeeper.connect
、--allow-principal
、--topic
参数。
添加读权限:
./kafka-acls.sh --authorizer-properties zookeeper.connect=z-3.xxx.xxx.c2.kafka.cn-north-1.amazonaws.com.cn:2181 --add --allow-principal "User:testusername" --operation Read --group="*" --topic test-topic
添加写权限:
./kafka-acls.sh --authorizer-properties zookeeper.connect=z-3.xxx.xxx.c2.kafka.cn-north-1.amazonaws.com.cn:2181 --add --allow-principal "User:testusername" --operation Write --group="*" --topic test-topic
然后就可以开始用用户名密码来访问Kafka集群了。
总结
AWS和Kafka对于我来说是一个默认的东西,只是因为公司有需要才开始接触。目前在以下两个地方吃过亏:
- Kafka集群的工作原理。 Kafka的启动端点配置就真的只是连接时候的启动配置,具体通信还是需要通过zookeeper下发的配置来进行的。所以这块千万不能使用frps之类的内网穿透工具来进行访问,否则明明你可以看起来端口都能通,但是会发现无法正常通信,因为下发的连接配置还是之前的内网配置。
- Kafka集群的ACL授权。这块我之前一直以为是通过IAM来控制的,但是实际上是通过Kafka自己的ACL来控制的。官网上的授权方式是给Bootstrap Servers授权,但是对于我使用SCRAM的方式来说是不生效的,所以需要把授权的对象改成
User:testusername
。
最后再吐槽一句,为啥AWS MSK Kafka启动集群和变更集群配置那么的漫长,5分钟算是最快的,10、20、30分钟的也是常有的事情。这个时间真的是太长了,为了一个集群的配置变更,我都可以去喝杯咖啡了。