Kafka安全--(一).SASL+ACL

Kafka默认未开启SASL和ACL,若要开启,需要在broker端进行两方面设置,本示例在服务端配置,客户端使用go语言进行测试,使用"github.com/Shopify/sarama"操作kafka。

首先是创建包含所有认证用户信息的JAAS文件,在本例中,使用kafka的1.0.0版本,假设有3个用户admin、reader和writer,其中admin是集群管理员,reader是用户负责读取kafka集群中的topic数据,而writer用户则负责向kafka集群写入消息。

为简单超见,假设这3个用户的用户名与密码相同,因此需要编写JAAS文件:

KafkaServer {
   org.apache.kafka.common.security.plain.PlainLoginModule required
   username="admin"
   password="admin"
   user_admin="admin"
   user_reader="reader"
   user_writer="writer";
};

保存这个文件/opt/kafka/config/jaas.conf,需要把这个文件的完整路径作为一个JVM参数传递给kafka启动脚本,需要修改启动脚本bin/kafka-server-start.sh,具体做法如下:

# 备份启动脚本
cp bin/kafka-server-start.sh bin/acl-kafka-server-start.sh
# 修改启动脚本
vim bin/acl-kafka-server-start.sh

# 把文件中的这一行
exec $base_dir/kafka-run-class.sh $EXTRA_ARGS kafka.Kafka "$@"
# 修改为
exec $base_dir/kafka-run-class.sh $EXTRA_ARGS -Djava.security.auth.login.config=/opt/kafka/config/jaas.conf kafka.Kafka "$@"

做完上面步骤后,修改config/server.properties文件,添加如下参数,保存退出:

authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
listeners=SASL_PLAINTEXT://:9092
advertised.listeners=SASL_PLAINTEXT://:9092
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
super.users=User:admin

现在启动broker服务器(前提是保证zookeeper已启动成功)

bin/acl-kafka-server-start.sh -daemon config/server.properties

如果一切正常,可以看到成功日志:

[KafkaServer id=191] started (kafka.server.KafkaServer)

这时使用go客户端链接,需要配置SASL:

var addrs = []string{"kafka01:9092"}
func NewClient() sarama.Client {

	config := sarama.NewConfig()
	config.Version = sarama.DefaultVersion
	config.Metadata.Retry.Max = 5
	config.Metadata.Retry.Backoff = 10 * time.Second
	config.Net.SASL.Enable = true
	config.Net.SASL.User = "admin"
	config.Net.SASL.Password = "admin"

	client, err := sarama.NewClient(addrs, config)
	if err != nil {
		panic(err)
	}
	return client
}

func TestTopic(t *testing.T) {
	client := NewClient()
	topics, err := client.Topics()
	fmt.Println(topics, err)
}

下面开始创建topic,供后续使用:

kafka-topics.sh --zookeeper kafka01:2181 --create first --partitions 1 --replication-factor 1 --topic first

topic创建成功,为什么启用acl还是成功了?因为kafka-topic.sh脚本直连zookeeper,绕过了acl审查,故不受acl限制,所以无论是否配置acl,用户总是可以使用kafka-topics来管理topic。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值