codecamp

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 作业执行期间,配置将保存在内存中。唯一的时间配置是可见的:

  1. 当使用 ConfigFactory 解决配置时。
  2. run-job.sh 运行时,配置将打印到 STDOUT。
  3. 当 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 安全页面。

Kafka »

Samza 从HDFS文件读取
Samza Kafka自动创建主题
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Samza API

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }