SaaS:保护来自其他租户和服务的数据

时间:2017-03-11 20:05:48

标签: node.js mongodb encryption multi-tenant saas

我们希望仔细构建我们即将推出的数据安全SaaS应用程序。 Much has been written here and elsewhere关于这个主题,所有这些都是很好的思考。但是,没有找到一个专门处理我们场景的问题,或者确实提供了明确的答案,所以请耐心等待。

背景

  • Node.js后端有多个前端但具有整体SaaS主题。
  • 多个用户,但数百人不是数百万。
  • 持有的数据非常敏感,其安全性和完整性既是法律/监管问题,也是我们反对竞争的关键卖点之一。
  • 每个用户的架构都有点不同,所以最初的计划是解决像MongoDB这样的NoSQL解决方案。

安全阶梯

  1. 第一级:来自其他用户的软保护。任何多租户应用中的最低要求是确保没有用户可以查看其他用户的数据。这应该由应用程序及其数据访问层完成。 (但总有可能在这里或那里悄悄出现一个bug,成功的恶意攻击会将所有保护措施小心地发送到DAL中。)
  2. 第二级:对其他用户的强保护。在每个租户数据库策略中,我们在用户(不同的数据库连接等)之间有更好的隔离墙,这会减少攻击面。在我们的特定情况下,从文档完整性的角度来看这也是有意义的(每个用户都有完全不同的模式)。
  3. 第三级:系统入侵。防止设法获得对数据库文件的物理访问的攻击者。大多数主要的DBaaS都提供硬件支持的磁盘加密和密钥轮换策略,以便在休息时进行加密,因此即使有人获取文件,他们的使用也是有限的。
  4. 第四级: SaaS入侵。将每个租户数据库与静态加密相结合,只有用户持有解密密钥才能阻止SaaS人员读取数据。可能听起来有点极端,但有些数据太敏感,无法冒险让dbo能够随意进行SELECT *。持有并提供用于即时数据解密的解密密钥的用户还有助于确保没有恶意客户端能够逃离其沙箱并损害其他客户端。数据。
  5. 加密天堂之路

    Azure Table Storage提供Transparent Data Encryption,但委托对有权访问Azure门户的所有人访问加密密钥。因此,只有3级。

    我们遇到的MongoDB Encrypted Storage Engine听起来就像我们想要的那样:静态加密数据,解密数据只驻留在内存中,密钥可以用KMIP进行用户管理 - 合规的第三方。但是,密钥是每个mongod进程,并且每个用户需要一个新的mongod实例。不理想,只有真正的3级。

    我们考虑的另一个解决方案类似于mongoose-encryption(大致相当于SQL Server中的列加密),其中敏感集合具有部分或全部列/解密。听起来很有希望,但我们的直觉表明,在数据库引擎级别而不是DAL插件中使用此功能会更好。而且,它只是'提供列级加密;我们更喜欢加密,因为它看不到集合驻留在数据库中的内容以及它们有多少行。

    更极端的解决方案是让客户端直接连接到某个文档存储,然后对自己进行身份验证。我们的SaaS只保留基本订阅和可能的架构信息,并提供SPA应用程序代码。这需要服务器端中间...但是服务器端不会发生数据验证,这是不理想的。

    (为了简洁起见,我跳过了整个密钥管理后勤:用户应该如何让应用程序临时访问第三方持有的解密密钥,如何处理多个请求的解密等等。我意识到这是一种蠕虫本身。 另外,我没有提到数据安全的所有其他方面,即人员和流程。 "加密不是神奇的小精灵粉尘,你可以洒在系统上,使其安全"但它确实有所帮助。)

    还有什么?

    花了两天谷歌搜索并向许多主要的DBaaS寻求帮助我转向了SO。 哪些编程方法和/或具体解决方案(有利有弊)可以提供这种SaaS盲目安全性? 的任何数据库引擎或提供商都假设应用程序和任何数据库管理员应该不受限制地访问客户数据?

    编辑:还遇到ZeroDBNucypher,它们都提供端到端加密和代理重新加密。从一开始,他们似乎符合这个要求......但是在网上对他们的了解很少。任何人都有第一手的经验,要么分享?

1 个答案:

答案 0 :(得分:0)

IronCore Labs非常适合此用例。 (全面披露-我是联合创始人兼CTO)。

我们是一个隐私平台,可帮助开发人员在其应用程序中添加加密支持的访问控制和端到端加密。我们使用代理重新加密来管理组并控制对已加密到这些组的数据的访问。可以在不添加加密数据的情况下将成员添加或删除组。

这是端到端加密,因此,作为SaaS提供者,如果您不需要访问租户的数据,则可以向他们保证不能解密。该服务旨在允许每个租户进行组管理,因此您可以保证,即使可能偶然允许跨租户访问数据的应用程序错误也不会泄漏未加密的数据。它还允许您加密数据,然后将其存储在您选择的数据存储中。显然,存在一些限制-尤其是索引编制和搜索。

我们有一个由ACM发布的paper,其中描述了用例并提供了有关代理重新加密算法的详细信息。