这是一个多部分的问题,真正回到主要问题:
(当前版本,香草主分支发行版 - 尽管我愿意听到其他人的消息)。经过大量搜索和研究,我还没有想出很多...
我的场景是一个服务提供商,它托管和处理来自几个大企业客户(多租户)的大量数据。这些客户不直接访问 Hadoop,而只能通过 SaaS 应用程序访问。然而,这些客户通常是直接的竞争对手,而且往往非常偏执(这是有道理的,因为每个人都可能对某些针对其他人的公司间谍活动感到高兴......)。
我的老派、下意识的反应是为每个客户部署单独的、孤立的实例。但是,这不切实际,也不允许利用 Hadoop 的优势和功能。
另外,我很难相信对于 Hadoop 的所有大用户来说,对于这些问题没有好的解决方案......
特别是,我正在研究这些问题:
- 限制对每个应用程序使用的特定用户的访问(每个客户的应用程序用户)
- 加密
- 客户之间的隔离,即不允许一个客户查看另一个客户。
- 一般硬化建议
我设法提出了一些方向,但无法验证这些方向是否是好的方向,或者是否有更好的解决方案。
- 服务级别授权
- 网络/系统隔离,防止应用程序以外的任何人直接访问
- 每个应用程序用户(即客户)的文件/文件夹权限。
我用这种方法发现的问题:
- 权限只应用于 NameNode;直接访问 DataNodes 仍然可以提供访问权限。
- 身份验证有点“不确定”,至少在他们添加 Kerberos 支持之前(之后,我们将不得不看到重新实现......)
- 在我看来,这并没有在客户之间提供足够的隔离。
- HDFS 联合/命名空间
这可能能够提供更好的权限隔离,更不用说单独的服务器和为每个客户分配的带宽(以防止一个人尝试通过 NameNode 单点故障对另一个人进行 DoS)。但是我还没有找到任何关于真实世界使用的真实信息,或者它如何经得起滥用。
此外,这并没有解决软身份验证的问题(是吗?)和直接 DataNode 块访问(是吗?) - 对于数据加密,我在 HDFS 加密(所有节点之间共享的单个对称密钥)或应用程序级加密(并且密钥(或密钥,例如每个客户一个)仍然需要分发给每个任务MapReduce 作业的节点)。