Samza 安全
Samza 没有提供安全保障,所有安全性都在流系统中实现,或者在 Samza 容器运行的环境中实现。
保证流系统的安全
Samza 在流系统级不提供任何安全性。独立的流媒体系统可以加强自己的安全。如果流系统需要用户名和密码才能从特定流中使用,则这些值必须通过配置提供,并在 StreamConsumer / StreamConsumerFactory 实现中使用。如果流式传输系统使用 SSL 证书或 Kerberos,也是如此。Samza 运行的环境必须提供相应的证书或 Kerberos 票证,并且必须实施 StreamConsumer 才能使用这些证书或票证。
保护 Kafka
Kafka 不提供其主题的安全性,因此 Samza 在使用 Kafka 主题时不提供任何安全性。
保护 Samza 的环境
在保护 Samza 容器运行的环境时要牢记的最重要的事情是 Samza 容器执行任意用户代码。他们必须考虑对抗性的应用,并且环境必须相应地锁定。
配置
Samza 在使用 run-job.sh 脚本启动 Samza 作业时读取所有配置。如果配置包含敏感信息,则必须小心为 JobRunner 提供配置。这意味着实现一个了解配置安全模型的 ConfigFactory,并以安全的方式将配置解析为 Samza 的 Config 对象。
在 Samza 作业执行期间,配置将保存在内存中。唯一的时间配置是可见的:
- 当使用 ConfigFactory 解决配置时。
- run-job.sh 运行时,配置将打印到 STDOUT。
- 当 Samza 容器启动时,配置将写入日志。
如果配置包含敏感数据,则必须确保这三个点。
端口
默认情况下,Samza 容器打开的唯一端口是在开始时随机选择的未安全的 JMX 端口。如果不需要,可通过配置禁用 JMX。有关详细信息,请参阅配置页。
用户可能会从 Samza 容器内部打开端口。如果不希望这样做,那么执行 Samza 容器的用户必须具有撤消的适当权限,通常使用 iptables。
日志
Samza 容器日志包含配置,并且可能包含用户记录的任意敏感数据。必须向 Samza 容器提供安全的日志目录。
开始 Samza 工作
如果操作员不希望允许 Samza 容器由任意用户执行,那么 Samza 容器的部署机制必须保证。通常这意味着控制 run-job.sh 脚本的执行。推荐的模式是锁定 Samza 容器运行的机器,并从保佑的 Web 服务或特殊机器执行 run-job.sh,并且只允许特定用户访问服务或机器。
Shell 脚本
有关 Samza 使用的 shell 脚本的详细信息,请参阅包装部分。Samza 容器允许用户执行任意 shell 命令,因此必须锁定用户权限,以防止用户损坏环境或读取敏感数据。
Yarn
Samza 提供了即时 YARN 集成。有关详细信息,请查看 Samza 的 YARN 安全页面。
更多建议: