在多租户云应用程序的共享数据库中保护和加密数据

10
什么是保护和分离多租户应用程序中敏感数据的最便宜且PaaS无关的方法,该应用程序使用共享数据库? 一些背景信息和更具体的问题: 我们是一家小型创业公司。我们已成功为客户启动了一个内部网站Web应用程序项目,现在我们感到准备好为类似的客户提供云解决方案。 由于我们参加了Microsoft BizSpark计划,因此我们正在调查Azure App Services。我们可能稍后迁移到Cloud Services,但现在似乎App Services就足够了。尽管如此,我们不想过多地将自己绑定到Azure,以防我们以后想要转移到其他SaaS提供商。 我们的应用程序将存储一些需要受到保护的敏感信息。为每个租户提供单独的加密(Azure提供透明加密)数据库将提供最高的安全性,但我们没有预算来实现这样的解决方案,并且自动管理也很困难。 目前我们的计划是,我们将为客户提供在通配符域下注册子域名的机会,然后在内部将子域名映射到将在每个表中使用的租户ID。 对于初创公司来说,这似乎是最具成本效益的解决方案,因为每个额外租户都没有额外的管理,并且注册可以完全自动化。我理解我们必须非常小心地强制执行在每个SQL请求中使用租户ID(使用具有内置租户ID查询的SQL视图和存储过程将有所帮助),但这显然不足够。我们需要一些机制来保护每个租户的敏感数据,并提供一些加密密钥。 然后出现了一些问题: 1.我们应该为所有租户的所有敏感数据使用单个加密密钥吗?还是我们应该为每个租户使用单独的密钥? 2.如果我们选择使用单独的密钥(在注册时随机生成密钥,因此即使对于我们也不知道密钥),那么谁以及如何存储和保护租户加密密钥?我们应该将密钥交给租户,然后要求他的员工在每次通过Web浏览器登录时除了每个员工的登录名和密码外再提供密钥吗? 3.考虑到我们可能稍后需要分片或“弹性”数据库扩展(某些PaaS提供商称之为),并且我们可能从Azure和Microsoft SQL Server转移到其他东西,哪种方法最有效? 如果有人有多租户和数据库保护方面的经验,我真的很感激一些建议,一些要做和不要做的事情以及可能的注意事项。我已经阅读了一些关于此主题的文章,但它们通常过于具体化到PaaS平台或未解释可能的后果和困难,但这种知识只有来自日常经验和试错。
1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
3

为了完整起见,添加一些答案(两年后):

我们应该为所有租户的所有敏感数据使用单个加密密钥吗?还是每个租户都应该有一个单独的密钥?

每个租户都应该有一个单独的密钥。不确定Azure如何处理,但AWS有KMS来处理这种情况。

如果我们选择单独的密钥(在注册时随机生成,因此甚至我们也不知道密钥),那么谁以及如何存储和保护租户加密密钥?我们是否应该将密钥给予租户,然后要求他的员工在通过Web浏览器登录时除了每个员工的登录名和密码外还提供密钥?

使用KMS(或其他云平台上类似的解决方案,例如Square的keywhiz自制方案)。您无需向租户提供密钥。您关心的是 - 如果用户使用其密码(或SSO)进行了身份验证,则根据其权限,他们可以访问某些资源。

考虑到我们可能以后需要分片或“弹性”数据库扩展(如某些PaaS提供商所称),并且我们可能从Azure和Microsoft SQL Server转移到其他东西,哪种方法最有效?

您需要一个tenantId,它将有助于数据隔离。现在,与tenantId相关联的实际数据可以根据存储在KMS中的密钥进行加密。


使用SQL Server,您可以使用“始终加密”功能,并为每个租户设置列加密密钥。 - Amir Shitrit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,