安全配置
Apache Kafka 支持客户端与代理之间的安全连接。
要利用此功能,请遵循Apache Kafka文档中的指南以及Confluent文档中的Kafka 0.9安全指南。
使用该Spring.cloud.stream.kafka.binder.configuration为绑定器创建的所有客户端设置安全属性的选项。
例如,设security.protocol自SASL_SSL,设以下性质:
spring.cloud.stream.kafka.binder.configuration.security.protocol=SASL_SSL
其他所有安全属性也可以以类似方式设置。
使用Kerberos时,请按照参考文档中的说明创建和引用JAAS配置。
Spring Cloud Stream 支持通过使用 JAAS 配置文件和 Spring Boot 属性向应用程序传递 JAAS 配置信息。
使用 JAAS 配置文件
通过系统属性,可以为 Spring Cloud Stream 应用设置 JAAS 和(可选)krb5 文件位置。 以下示例展示了如何通过使用 JAAS 配置文件启动 SASL 和 Kerberos 的 Spring Cloud Stream 应用:
java -Djava.security.auth.login.config=/path.to/kafka_client_jaas.conf -jar log.jar \
--spring.cloud.stream.kafka.binder.brokers=secure.server:9092 \
--spring.cloud.stream.bindings.input.destination=stream.ticktock \
--spring.cloud.stream.kafka.binder.configuration.security.protocol=SASL_PLAINTEXT
使用 Spring Boot 属性
作为使用 JAAS 配置文件的替代方案,Spring Cloud Stream 提供了一种机制,通过使用 Spring Boot 属性来设置 Spring Cloud Stream 应用的 JAAS 配置。
以下属性可用于配置 Kafka 客户端的登录上下文:
- spring.cloud.stream.kafka.binder.jaas.loginModule
-
登录模块名称。在正常情况下,不一定非得设置。
违约:
com.sun.security.auth.module.Krb5LoginModule. - spring.cloud.stream.kafka.binder.jaas.controlFlag
-
登录模块的控制标志。
违约:
必填. - spring.cloud.stream.kafka.binder.jaas.options
-
映射中包含登录模块选项的键值对。
默认:空白地图。
以下示例展示了如何利用 Spring Boot 配置属性启动 SASL 和 Kerberos 的 Spring Cloud Stream 应用:
java --spring.cloud.stream.kafka.binder.brokers=secure.server:9092 \
--spring.cloud.stream.bindings.input.destination=stream.ticktock \
--spring.cloud.stream.kafka.binder.autoCreateTopics=false \
--spring.cloud.stream.kafka.binder.configuration.security.protocol=SASL_PLAINTEXT \
--spring.cloud.stream.kafka.binder.jaas.options.useKeyTab=true \
--spring.cloud.stream.kafka.binder.jaas.options.storeKey=true \
--spring.cloud.stream.kafka.binder.jaas.options.keyTab=/etc/security/keytabs/kafka_client.keytab \
--spring.cloud.stream.kafka.binder.jaas.options.principal=kafka-client-1@EXAMPLE.COM
上述示例相当于以下JAAS文件:
KafkaClient {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
storeKey=true
keyTab="/etc/security/keytabs/kafka_client.keytab"
principal="[email protected]";
};
如果经纪人中已有所需的主题或管理员将创建,可以关闭自动创建,只需发送客户端的JAAS属性。
不要在同一应用程序中混合使用JAAS配置文件和Spring Boot属性。
如果-Djava.security.auth.login.configsystem 属性已经存在,Spring Cloud Stream 忽略了 Spring Boot 属性。 |
使用时要小心自动创建主题和自动添加分区与克尔伯洛斯。
通常,应用程序可以使用在 Kafka 和 Zookeeper 中没有管理权限的 Principal。
因此,依赖 Spring Cloud Stream 来创建或修改主题可能会失败。
在安全环境中,我们强烈建议通过使用 Kafka 工具创建主题并管理 ACL。 |
多束缚机配置与JAAS
当连接到多个集群时,每个集群都需要单独的 JAAS 配置,则使用以下属性设置sasl.jaas.config.
当该特性存在于应用中时,优先于上述其他策略。
详情请参见KIP-85。
例如,如果你的应用中有两个集群,且各自配置了不同的JAAS,那么你可以使用以下模板:
spring.cloud.stream:
binders:
kafka1:
type: kafka
environment:
spring:
cloud:
stream:
kafka:
binder:
brokers: localhost:9092
configuration.sasl.jaas.config: "org.apache.kafka.common.security.plain.PlainLoginModule required username=\"admin\" password=\"admin-secret\";"
kafka2:
type: kafka
environment:
spring:
cloud:
stream:
kafka:
binder:
brokers: localhost:9093
configuration.sasl.jaas.config: "org.apache.kafka.common.security.plain.PlainLoginModule required username=\"user1\" password=\"user1-secret\";"
kafka.binder:
configuration:
security.protocol: SASL_PLAINTEXT
sasl.mechanism: PLAIN
注意,卡夫卡星团和sasl.jaas.config上述配置中,每个的值都不同。
有关如何设置和运行此类应用的更多细节,请参见此示例应用。