在AWS MSK中启用用户名密码认证及ACL设置

1.     概述

Amazon Managed Streaming for Apache Kafka (Amazon MSK)是亚马逊云推出的一个完全托管、高度可用且安全的Apache Kafka服务。本文讲述了如何在MSK中启用用户名和密码的方式来完成认证,同时也提及了ACL的配置。因为这部分内容和自建的Kafka集群有些不同,所以想通过本文来做个演示。本文步骤基本上按照MSK官方文档,只是增加了截图和例子,方便理解。

2.     创建MSK集群

AmazonMSK使用SASL/SCRAM (Simple Authentication andSecurity Layer/ Salted Challenge Response Mechanism)来完成用户名和密码验证,它的前提是客户端和代理之间需要使用TLS加密。所以在创建MSK集群时,需要选择 客户端和代理之间只允许TLS。此选项无法在创建后修改,所以如果你选择了其他选项,必须要重新创建欣的集群。


在创建过程中选择传输加密,客户端和代理之间 仅允许经TLS加密的流量。


身份验证选择SASL/SCRAM身份验证。



3.     创建KMSKey

AmazonMSK使用Amazon Secret Manager来存储MSK所用的用户名和密码。在设置Secret Manager之前,先要在AmazonKMS(Key Management Service)中创建一个客户托管的Key。KMS是Amazon托管的密钥管理服务。

创建过程采用默认选项即可,如果有特殊权限要求可以后续再改。起名例如 kafka

4.     创建SecretsManager密钥

AmazonSecrets Manager是一项密码管理服务,可以把敏感的密码等信息存放其中,无须在代码中嵌入,只要通过API调用就可以取得,避免在代码中泄露。

AmazonMSK通过Secrets Manager来存储用户名和密码。在创建密码时,注意密钥名称必须具有前缀AmazonMSK_

在Secrets Manager中选择 其他类型的密码,将用户名和密码填入,可以通过JSON格式,也可以通过Key/Value方式。加密的密钥要选择上面创建的KMS密钥(非常重要)。

例如:

{

 "username": "alice",

 "password": "alice-secret"

}






5.     关联密钥到MSK集群

等MSK集群创建完成后,就可以把密码关联到MSK集群了。



6.     使用用户名和密码连接到MSK集群

现在就可以来通过用户名和密码来连接MSK集群了。

请按照以下步骤来完成:

6.1.       运行以下命令,同时替换 ClusterArn 为MSK集群的 Amazon 资源名称 (ARN):

aws kafka describe-cluster --cluster-arn "ClusterArn"

ClusterArn可以在MSK的集群界面查到:

运行命令之后得到该集群的详细信息:

从命令的 JSON 结果中,保存与名为“ZookeeperConnectString”的字符串关联的值。


6.2.   在客户端计算机上下载相应版本的Kafka程序,具体链接可以查看https://kafka.apache.org/downloads

例如:

wget https://archive.apache.org/dist/kafka/2.6.1/kafka_2.13-2.6.1.tgz

下载完后解压。


6.3.        在客户端计算机上kafka程序的 bin 目录中运行以下命令来在集群中创建主题,替换 ZookeeperConnectString 为之前记录的字符串。如果集群的节点数小于3个,replication-factor要设置小于3.


./kafka-topics.sh --create

--zookeeper ZookeeperConnectString--replication-factor 3 --partitions 1 --topicExampleTopicName



6.4.        在客户端计算机上,创建一个 JAAS 配置文件。例如,对于用户 alice,创建一个名为 users_jaas.conf 的文件,该文件包含以下内容:

KafkaClient {

  org.apache.kafka.common.security.scram.ScramLoginModule required

   username="alice"

   password="alice-secret";

};


6.5.        将此 JAAS 配置文件设置为 KAFKA_OPTS 环境变量:

export KAFKA_OPTS=-Djava.security.auth.login.config=<path-to-jaas-file>/users_jaas.conf


6.6.        将 JDK 密钥库文件从 JVM 复制到用户所需目录。JDK的目录根据安装版本不同可能不同。


cp /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.272.b10-1.amzn2.0.1.x86_64/jre/lib/security/cacerts <path-to-keystore-file>/kafka.client.truststore.jks


6.7.       使用以下内容创建名为 client_sasl.properties 的客户端属性文件。此文件定义 SASL 机制和协议,将被用来访问Kafka集群。MSK当前只支持SCRAM-SHA-512认证。


security.protocol=SASL_SSL

sasl.mechanism=SCRAM-SHA-512

ssl.truststore.location=<path-to-keystore-file>/kafka.client.truststore.jks


6.8. 接下来要取得MSK的代理(Broker)地址,替换 ClusterArn 替换为MSK集群的 Amazon 资源名称 (ARN):

aws kafka get-bootstrap-brokers

--cluster-arn ClusterArn


从命令的 JSON 结果中,保存与名为“BootstrapBrokerStringSaslScram”的字符串关联的值。


6.9.   现在可以通过Producer在Topic中生产数据了。在Kafka客户端的 bin 目录中运行以下命令,并将 BootstrapBrokerStringSaslScram 替换为上一个命令时获取的值。

./kafka-console-producer.sh --broker-list BootstrapBrokerStringSaslScram --topic

ExampleTopicName --producer.config client_sasl.properties


输入任意消息:


6.10.                打开另一窗口来通过Consumer消费该Topic中的消息,在Kafka客户端的 bin 目录中运行以下命令,并将 BootstrapBrokerStringSaslScram 替换为之前获取的值。

./kafka-console-consumer.sh --bootstrap-server BootstrapBrokerStringSaslScram --topic

ExampleTopicName --from-beginning --consumer.config client_sasl.properties

可以看到之前键入的消息:


7.     创建更多用户

上文演示了单个用户的过程,如果需要创建其他用户,请重复步骤3-4来创建Secrets Manager的密钥,并关联到MSK集群。需要注意:

一个Amazon MSK集群最多可以有1000个用户。

与Amazon MSK集群关联的密钥的名称必须具有前缀AmazonMSK_


8.     设置ACL

ACL可以用来控制生产者(Producer),消费者(Consumer)和管理员(admin)对于Topic的权限控制。

Apache Kafka ACLs的格式为“Principal P is [Allowed/Denied] Operation O From Host Hon any Resource R matching ResourcePattern RP”。如果RP与特定资源R不匹配,则R没有关联的ACLs,因此不允许除超级用户之外的任何人访问R。

默认情况下,AmazonMSK会将allow.everyone.if.no.acl.found设置为true。这意味着,如果没有显式设置ACL,则所有委托人都可以访问此资源。只有启用了ACL,才能限制只有授权的委托人才能访问它。


1.  首先将MSK的代理添加到ACL表,以允许它们读取已配置ACL的所有主题。这可以保证代理(Broker节点)可以正常同步。

替换 ZooKeeper-Connection-String 替换为上文取得的连接字符串。

替换Distinguished-Name 替换为集群中任一代理的名字,然后将此第一个点之前的字符串替换为星号 (*)。


bin/kafka-acls.sh --authorizer-properties zookeeper.connect=ZooKeeper-Connection-String --add

--allow-principal "User:CN=Distinguished-Name"

--operation Read --group=* --topic Topic-Name

 


8.2. 要授予某个用户对主题的读访问权,请在客户端计算机上运行以下命令。

bin/kafka-acls.sh --authorizer-properties zookeeper.connect=ZooKeeper-Connection-String --add

--allow-principal "User:CN=Distinguished-Name"

--operation Read --group=* --topic Topic-Name

例如


8.3.      要授予对主题的写访问权,请在客户端计算机上运行以下命令

bin/kafka-acls.sh --authorizer-properties zookeeper.connect=ZooKeeper-Connection-String--add

--allow-principal "User:CN=Distinguished-Name" --operationWrite --topic Topic-Name

例如

8.4.        如果使用未授权的用户,将会出现没有授权的错误,无法读取Topic内容。


9. 结束

本文演示了如何在Amazon MSK中启用用户名和密码验证以及简单的ACL设置,其它未涉及的内容以及更多信息,请参考AmazonWeb Services的MSK官方文档。如有疑问,欢迎探讨。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容