正如问题所述,设置 MSK 时 - 它没有启用安全性,进而导致创建规则本身出现问题。
通过 AWS GUI 创建规则时,必须使用“get_secret 函数”配置操作用户名和密码属性 - 我最初是这样配置 CloudFormation 的:
IoTCoreToKafkaRule:
Type: AWS::IoT::TopicRule
Properties:
RuleName: !Sub "IoTCoreToKafkaRule"
TopicRulePayload:
Description: Rule to forward MQTT messages to MSK
RuleDisabled: false
AwsIotSqlVersion: "2016-03-23"
Sql: "SELECT encode(*,'base64') AS message, topic() AS topic FROM 'topic/#'"
Actions:
- Kafka:
DestinationArn: !GetAtt TopicRuleVpcDestination.Arn
Topic: "iotcore"
ClientProperties:
'sasl.mechanism': SCRAM-SHA-512
'security.protocol': SASL_SSL
'bootstrap.servers': !Ref BootstrapServers
'sasl.scram.password': "DummyUsername"
'sasl.scram.username': "DummyPassword"
我认为我可以提供“虚拟”值,并且由于 MSK 没有安全性,因此它在技术上会忽略此配置并让数据通过。现在,我知道有一种情况是“如果删除 bootstrap.servers 之外的所有内容会怎样”——这会导致问题,并且我收到一条错误消息,指出 ClientProperties 需要 SASL_SSL 或 SSL 配置,就像在 AWS GUI 中一样.
有没有办法让我创建规则,而无需在 MSK 上启用 SASL_SSL 或 SSL 安全性?我是否需要创建一个包含任何可以从中提取的奇数值的 Secret,或者是否有更简单的解决方案?
最佳答案
好吧,看来我这些天回答了自己的问题。
事实证明我是对的,尽管如果没有安全性,AWS 无法选择为 Kafka 创建规则,但只要您检索,您就可以使用任何用户名/密码创建值来自 secret 管理员。
使用this repository和我上面的代码,再加上以 ${get_secret("")) 的形式获取密码,我能够满足安全值,但据我所知,除了通常的 VPC/子网/Bootstrap 经纪人,我不需要满足任何其他值。
关于amazon-web-services - MSK 没有安全性,当创建从 IoT Core 到 Kafka 的规则操作时,它要求我选择安全性,我可以避免这种情况吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72446413/