paint-brush
如何将安全性作为 SaaS 功能内置:指南经过@ockam
3,860 讀數
3,860 讀數

如何将安全性作为 SaaS 功能内置:指南

经过 Ockam10m2024/08/07
Read on Terminal Reader

太長; 讀書

在这篇文章中,我将向您展示如何提供更细粒度、更安全的 SaaS 平台连接。我还将深入探讨幕后发生的事情,以解释其中的魔法。最终结果是一个整体解决方案,看起来和感觉上都像是 SaaS 平台的自然延伸。
featured image - 如何将安全性作为 SaaS 功能内置:指南
Ockam HackerNoon profile picture
0-item
1-item
2-item

在这篇文章中,我将向您展示如何提供更细粒度、更安全的 SaaS 平台连接。最终结果是一个整体解决方案,它看起来和感觉起来都像是 SaaS 平台的自然延伸,既可以作为企业计划的一项功能提供,也可以作为所有客户的竞争优势提供。运行演示所需的总时间仅为几分钟。我还将深入探讨幕后发生的事情,以解释魔法是如何运作的。


首先,让我介绍一下为什么会出现这种特定需求,并强调传统实现方式的缺点。因为那些旧方法不再有效。


您需要开始将安全性视为一项功能。如果您是工程副总裁、产品经理或产品所有者,请花时间考虑安全性,让您的开发人员创建更好、更安全的基础设施。

— Stack Overflow 创始人Joel Spolsky


未来十年最成功的产品将是那些意识到现状方法不再足够的产品。你也不必相信乔尔的话;看看苹果最近宣布的私有云计算的细节。过去二十年最成功的公司之一明确表示,安全、隐私和信任将成为核心差异化因素。


他们甚至讨论了当前使用的 TLS 等协议如何无法提供客户所期望的端到端安全和隐私保障。


多年前,我从事过系统互连工作,在我职业生涯的早期,这是一项劳动密集型任务。当时,我们的公司正在发展壮大,我们会将现有大楼的服务器机房与新大楼中刚刚安装的系统进行连接。新办公室就在街上几个街区外,我们当时正在与当地电信公司合作安装一条专用线路。


当时,连接两个独立的网络具有明显的、物理上有形的现实意义。


我们都从那个时候起步了。现在,现代技术栈更加复杂;一系列相互连接的应用程序遍布全球,由“同类最佳”产品公司在云中运行。几十年来,我们不断发展。如今,很少有两家独立的公司真正想将他们的整个网络相互连接——每个网络内的特定应用程序和工作负载需要通信。


然而,我们仍然继续使用旧方法来“安全地”连接我们的系统。


电缆的实际运行已被抽象化,但我们实际上在做同样的事情。这些旧方法会将您暴露在无数网络中,这是一个巨大的攻击面,很容易被利用。

连接私人系统的需求

在过去的几十年里,人们所说的“云”或“本地”的含义已经变得模糊。为了避免混淆,我将为我们创建一个假设场景:


  • Initech 平台:这是您运营的 SaaS 平台。它具有弹性和可扩展性,托管在一家主要云提供商上。客户购买该平台是为了改进他们的 DevOps 流程,因为它提供了对一系列有用指标的可见性,并直接向他们的开发工作流程提供有用的反馈。


  • ACME Corp:这是 Initech 的一家大客户,您想要为其提供支持。他们在各个地方运行着大量基础设施。它是传统意义上的“本地”,即位于他们自己的数据中心内吗?还是位于他们自己的某个主要云提供商的 VPC 内?这都无所谓!客户系统运行在一个或多个不受 Initech 控制、我们无法访问且无法从公共互联网直接访问的网络中。

积极参与开发人员工作流程

在构建 Initech 平台的早期版本时,我们与许多潜在客户合作,以证明产品与市场的契合度。它将与主要版本控制系统提供商(例如 GitHub、GitLab、Bitbucket 等)的公共 API 集成,使用提交/webhook 对事件做出反应,将结果推送到工作流中,一切都按预期进行。


当产品是被动的并且仅对 ACME Corp. 某人发起的事件做出反应时,这很好。许多服务希望通过评估世界上的外部变化并积极主动地为客户推动改进来提供价值。


想想许多依赖项或安全扫描服务——如果有新的漏洞披露,他们希望尽快在所有受影响的存储库上创建拉取/合并请求。具有公共 API 的完全托管 VCS 服务提供了实现这一点的方法,但是,这些产品的自托管版本没有可公开访问的 API。


选择自行托管这些系统的客户通常都是大型企业,因此我们现在面临着一些艰难的决定:Initech 是否无法将他们的产品卖给这些高价值客户?客户是否必须购买缺少最有价值功能之一的简化版产品?或者我们是否要求他们重新评估其安全和网络状况的某些方面,以允许 Initech 访问?

访问私人数据

Initech 需要查询数据库以显示其自定义报告解决方案。这不是 Initech 独有的问题,因为几乎每个客户数据平台 (CDP) 或可视化工具都有同样的问题:客户不希望他们的私人数据从公共互联网上访问,因此它通常会位于私有子网中的数据库中。

我们当前方法的问题

正如我之前所说,现代技术堆栈已经发展成为一系列相互连接的应用程序。然而,我们连接这些应用程序的方式与几十年前连接网络的方式相比只有一点点变化。虽然这些方法既方便又熟悉,但它们从来都不是为我们今天的用例而设计的。


他们反而试图对过去的工作方式做出尽可能微小的调整,以试图接近我们今天所需要的工作方式。

将系统置于公共互联网上

大多数私有系统的默认部署选项是将它们放置在私有网络中,具有私有子网,没有公共 IP 地址。这样做有很好的理由!对于 Initech 来说,连接到此私有系统的最简单方法是要求 ACME Corp 提供可以从互联网访问的公共 IP 地址或主机名。


这不好。


最初将系统置于与世界隔绝的私人网络中的所有好理由都立即消失了。现在整个公共互联网都可以访问此系统,成千上万的潜在黑客可以不断尝试强行进入系统或简单地对其进行 DoS 攻击。你离被控制只有一个距离,那就是泄露的凭证、CVE 或其他问题。


反向代理

另一种方法是在系统前面放置一个反向代理。我指的不仅仅是 nginx 和 HA Proxy;还有一整类托管或管理服务也符合这种描述。


这样做的好处是 ACME Corp 不再将私有系统直接放在公共互联网上。反向代理还增加了速率限制或微调访问限制的能力,以缓解潜在的 DoS 攻击。这是一项纵深防御改进,但 ACME Corp 仍然允许整个公共互联网访问并尝试攻击代理。


如果它受到威胁,它就会执行代理所做的事情:让流量到达预定的目的地。


IP 允许列表

一个渐进式改进是,Initech 提供他们将发送请求的 IP 列表,并让 ACME Corp 管理其防火墙和路由规则,以仅允许来自这些 IP 地址的请求。不过,这并不是很大的改进。



在 Initech,您不会希望将当前的应用程序实例与 IP 地址紧密耦合;您会希望能够根据需要灵活地扩展基础设施,而无需不断通知客户新的 IP 地址。


因此,这些 IP 地址很可能属于 NAT 网关或代理服务器。ACME Corp 可能认为将访问权限锁定为仅一个或两个源 IP 地址意味着只有一两台远程计算机可以访问其网络。


实际情况是,远程网络上任何可以通过 NAT 网关或代理发送请求的设备现在也将被授予访问 ACME Corp 网络的权限。这并不是允许单个应用程序或机器进入;您允许的是整个远程网络。


但更令人担忧的是,IP 源地址很容易被伪造。潜在的攻击者可以创建一个格式良好的请求,伪造源地址,并向 ACME Corp 网络发送数据或指令。SaaS 供应商(包括 Initech)也不可避免地必须记录当前 IP 地址列表,以便有一个现成的 IP 列表可供尝试和模仿。


IP 过滤方法越复杂,攻击者就越需要复杂地破坏它,但没有一种方法是完美的。我过去曾听到有人声称 IP 欺骗实际上只适用于 DDoS 攻击,因为在大多数情况下,攻击者无法收到响应,因此他们无法做任何有用的事情。


想想我们正在连接的系统 - 您有多大信心,没有任何“即发即弃”的 API 调用不会尽职尽责地创建/更新/销毁有价值的数据?良好的安全性不仅仅是防止数据泄露,还包括保护数据并保证其完整性。


如果您是一个有价值的目标,例如大型金融机构,攻击者就会有动机使用此类方法发起中间人攻击并拦截通信流。如果您的客户和潜在客户是有价值的目标,那么您也会成为一个有价值的目标。

虚拟专用网络 (VPN)

VPN 是许多公司常用的解决方案,允许员工在办公室外时连接到“公司网络”。它们还用于允许其他系统连接到现有网络。


我们在这里讨论的用例有所不同。它允许两家独立的公司、SaaS 产品及其客户相互通信。


在许多情况下,连接两端只有一个系统可以相互通信。相反,我们采用专门用于连接整个网络的工具。这就像在一家公司的路由器和另一家公司的路由器之间铺设一条虚拟配线。


如果我要求您执行物理操作,将电缆从您的生产环境直接插入另一家公司的生产环境,您可能会犹豫一下。犹豫很久。理由很充分。但 VPN 是“虚拟的”和“私密的”,而且非常容易(相对于铺设电缆而言),而且无处不在,我们不会对此进行过多考虑。


如果您所需要做的只是在每个网络中连接一个东西,那么您就使用了一种非常钝的工具来完成原本非常精确的任务。


您仍然可以使用 VPN 完成精确的任务,但您需要确保有多层网络级控制和路由规则,以关闭每个网络中所有门,只打开您想要打开的门。这是另一个例子,说明我们拥有的工具和方法在设计时就很出色,但我们正在逐步改进使用方法,以迫使它们满足我们不断发展的需求。


安全地做到这一点意味着要增加更多复杂性,并希望我们始终能够正确处理所有这些层中的所有细节。如果做错了,传递访问的风险就会超出最初的意图。


你不能相信网络

如果我告诉您,无论您在安全计划上投入多少时间、人力和金钱,您的网络几乎肯定会面临易于利用的安全漏洞,您会怎么想?...


行业数据显示,全球不到 1% 的大型企业尚未采取任何措施保护其网络免受这种新出现的威胁……


历史告诉我们,正确的做法必须是最容易做到的。这对于软件开发人员和防范故意恶意组件尤为重要。安全技术的缓慢采用曲线……实际上让坏人看到了潜力,进行了创新,并推动了网络犯罪的惊人增长


Mitchell Johnson ,Sonatype


每种方法都存在一个问题,即要假设它是安全的,就需要做出许多额外的假设:互联网上没有人会试图攻击你,你可以信任请求的源 IP,远程网络完全由好心人组成,这些假设现在和未来都将继续成立……并且所有这些假设也适用于你所连接的每个网络、他们所连接的任何网络以及任何网络……


从 ACME Corp 的角度来看看这可能是什么样的:



现在,相互连接的不仅仅是两个网络和两家公司,而是许多网络。每个 SaaS 供应商都有一套自己的服务,这使情况进一步恶化。你不仅不能信任网络,也不能信任任何其他人的网络。这幅图中的任何参与者都只是网络配置错误或依赖关系受损,从而通过网络传输该风险。


这张图片是这个问题最放大的分形示例!缩小后,每个供应商都与自己的客户群相连,有自己的供应商,有自己的客户……风险表面积呈指数增长。

那么,让我们来解决它!


我们可以在几分钟内将安全性作为一项功能融入到我们的产品中!我们将通过提供更集中、更细致的解决方案来提高安全性。我们还将停止要求 ACME Corp 等客户进行网络级更改,从而将问题推给他们。


相反,我们将把安全连接转移到应用程序级别的关注点,并通过将 Initech 平台扩展到需要的特定位置来提供整体的产品体验。


这里的示例将介绍 Initech Platform 如何与 ACME Corp 管理的自托管 GitHub Enterprise 服务器建立连接。最终结果将如下所示:


只需几分钟即可启动所有必需的部件!要了解如何操作,请查看我们构建自托管代理基础的代码之旅