> 文章作者:亚马逊云科技加油站/罗技123
kafka 客户端需要 Java 依赖,所以先安装 Java11,
```
sudo yum install java-11
```
https://docs.aws.amazon.com/zh_cn/msk/latest/developerguide/port-info.html?trk=cndc-detail
### 匿名连接
```
# 匿名使用9092端口
BootstrapServerString=b-2.xxxx.kafka.cn-north-1.amazonaws.com.cn:9092,b-1.xxxx.c4.kafka.cn-north-1.amazonaws.com.cn:9092
# 创建 topic
./kafka-topics.sh --create --bootstrap-server \$BootstrapServerString --replication-factor 2 --partitions 1 --topic MSKTutorialTopic
# 生产者
./kafka-console-producer.sh --broker-list \$BootstrapServerString --topic MSKTutorialTopic
# 消费者
./kafka-console-consumer.sh --bootstrap-server \$BootstrapServerString --topic MSKTutorialTopic --from-beginning
```
### TLS
匿名 TLS 传输和 mTLS 认证都使用 9094 端口。
匿名 TLS 和匿名纯文本只能二选一
client_tls.properties
```
security.protocol=SSL
```
```
./kafka-console-producer.sh --broker-list \$BootstrapServerString --topic MSKTutorialTopic --producer.config client_tls.properties
./kafka-console-consumer.sh --bootstrap-server \$BootstrapServerString --topic MSKTutorialTopic --from-beginning --from-beginning --consumer.config client_tls.properties
```
中国区目前不支持 TLS 双向认证。
### IAM 连接
IAM 认证是 Amazon 自己加的功能,所以需要下载额外的包,<https://github.com/aws/aws-msk-iam-auth?trk=cndc-detail>
```
cp amazon-msk-iam-auth-1.1.1-all.jar kafka_2.13-2.8.1/libs/
```
IAM 创建 topic 命令:
```
BootstrapServerString=b-1.xxxx.c4.kafka.cn-north-1.amazonaws.com.cn:9098,b-
2.xxxx.c4.kafka.cn-north-1.amazonaws.com.cn:9098
./kafka-topics.sh --create --bootstrap-server \$BootstrapServerString --command-config
client.properties --replication-factor 2 --partitions 1 --topic MSKTutorialTopic
```
client.properties
```
security.protocol=SASL_SSL
sasl.mechanism=Amazon_MSK_IAM
sasl.jaas.config=software.amazon.msk.auth.iam.IAMLoginModule required;
sasl.client.callback.handler.class=software.amazon.msk.auth.iam.IAMClientCallbackHandler
```
要使用您为亚马逊云科技凭证创建的命名配置文件,请将 ``amazonProfileName="`your profile name`"``
<https://docs.aws.amazon.com/zh_cn/msk/latest/developerguide/iam-access-control.html?trk=cndc-detail>
### SASL
这个需要关联 Secrets Manager,而且 Secrets Manager 必须以 AmazonMSK\\_ 开头,多租户的话需要关联多个 Secrets Manager,如果在 Secrets Manage 中修改用户密码,那么需要重新绑定,否则新旧密码都能使用,这显然不符合预期。
创建 users_jaas.conf 文件,这个是用户名密码:
```
KafkaClient {
org.apache.kafka.common.security.scram.ScramLoginModule required
username="alice"
password="alice-secret";
};
```
然后导出到环境变量:
```
export KAFKA_OPTS=-Djava.security.auth.login.config=\$PWD/users_jaas.conf
```
配置信息:
```
security.protocol=SASL_SSL
sasl.mechanism=SCRAM-SHA-512
```
连接:
```
BootstrapBrokerStringSaslScram=b-1.xxxx.c4.kafka.cn-north-1.amazonaws.com.cn:9096,b-
2.xxxx.kafka.cn-north-1.amazonaws.com.cn:9096
[ec2-user@ip-10-0-10-91 bin]\$ ./kafka-console-producer.sh --broker-list
\$BootstrapServerString --topic MSKTutorialTopic --producer.config client_sasl.properties
./kafka-console-consumer.sh --bootstrap-server \$BootstrapBrokerStringSaslScram --topic
MSKTutorialTopic --from-beginning --consumer.config client_sasl.properties
```
<https://repost.aws/zh-Hans/knowledge-ceneccccvfubhkhugdueicbcbvubnlrgefkkldbeurkjfenter/msk-sasl-scram-issues?trk=cndc-detail>
### 公有访问
1. 集群必须是公有子网
2. 关闭匿名访问
3. 必须开启集群间加密,关闭纯文本连接
4. 如果是 SASL/SCRAM 或者 mTLS,那么需要配置 Apache Kafka ACL(allow\.everyone.if.no.acl.found=false),这时候用其他认证去连接。
kafka ACL:<https://docs.aws.amazon.com/zh_cn/msk/latest/developerguide/msk-acls.html?trk=cndc-detail>
<https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Authorization+Command+Line+Interface?trk=cndc-detail>
### 多 VPC 连接
待测试
[![4.png](https://dev-media.amazoncloud.cn/670bae0703374a559285146fc13156cf_4.png "4.png")](https://summit.amazoncloud.cn/2024/register.html?source=DSJAVfG2GS7gEk2Osm6kYXAa+8HnSEVdbCVjkuit7lE= )