如何在保持对代码的控制的同时为客户端分隔数据库?

我有一个在AWS EC2和RDS上托pipe的SAAS应用程序。 我们使用django和Postgres作为堆栈

我们所做的是我们拥有持有租户信息的公共模式,但租户特定的数据在同一数据库中的单个模式中保存

最近,我们要求一些客户想要在自己的场所中托pipe软件,因为他们想要完全控制数据。

这意味着我们失去了对源代码的控制,再加上debugging和部署托pipe在本地而不是云上的代码变得更加困难。

有可能他们可以在我们的AWS账户上部署它。 所以这是他们的ec2和rds。

这给了我们一个想法。

我们是否有可能在我们的AWS ec2上部署源代码,他们的数据是否在他们的AWS rds中?

我们需要做的是:

  1. 我们没有办法读取他们的数据
  2. 他们没有办法读取我们的代码
  3. 然而,我们可以轻松地进行代码更改和模式更改(可能通过django迁移)

我们如何使用AWS服务来实现这一点? 我需要一个粗略的计划。

到目前为止,我的想法是

A.在我们ec2数据的rds代码(确保2和3不是1)

B.关于ec2和其数据的代码(确保1而不是3和2)

还是有解决scheme涉及调整A或B?

我想问的第一个问题是,如果可以的话,我们是否应该允许这个业务,他们提出的build议是否违背了软件即服务的目的。

现在,如果你想销售你的软件的版本,可以部署到像OVA那样的前提下,就像github企业一样 ,

您可以为您的SaaS软件部署设置交叉账户angular色 ,但您仍然可以控制EC2实例的代码库,并在数据库级别为其提供读访问权限。

实施AMI,将您的软件部署到其账户中,并在AWS市场上发布

允许他们访问数据转储/导出的客户数据做他们想要的与他们的数据的前提下,像行动networking或SalesForce

你可以做任何数量的这些或所有这些,这取决于它们是否适合你的软件架构和部署以及你试图提供的商业模式。