企业使用无服务器架构时需考虑其安全问题
扫描二维码
随时随地手机看文章
(文章来源:百家号)
无服务器是虚拟化和云计算发展的结果,是指其企业完全通过租赁云供应商的资源来实现业务的模式,无服务器的核心是在架构中完全摒除硬件和后端基础软件服务(比如数据库,账号体系等),而依赖第三方的云资源(BaaS或者FaaS)。
当考虑无服务器架构时候主要基于一个想法:如果并不是所有应用程序的功能都是一直要用,那么为什么要为不经常使用的服务器支付租金呢?一般来说系统都需要一些功能,如业务逻辑,用户认证系统,数据库,以及其他一些用户简短的和特定活动需要的功能。使用服务器架构,会执行和打包这一系列的功能,所以一般也将无服务器叫做功能即服务(FaaS);这些功能为后端服务,所以也叫为BaaS "Backend as a Service"。
FaaS服务最典型的例子是知名云厂商亚马逊AWS的AWS Lambda。虽然云厂商会提供了很多安全服务和一些基本的安全策略,但是需要你花费购买相关服务,而且一些策略也需要自己配置。关于无服务器架构的安全我们需要注意以下事项。为了确保应用程序的安全,最有效方法之一是确保所有组件都是最新的。使用的第三方模块是否需要打安全补丁?
软件更新时候经常被忽略的问题是忘记更新组件依赖项,尤其是在应用程序中使用开源组件时。据统计有超过92%的应用程序使用的开源组件会占到其代码库的60-80%,基础开源组件的安全是不容忽视的部分。如何安全地使用开源模块与商业软件存在一些明显差异,例如在开源组件在发布新漏洞或修复程序时无法很好的跟踪其影响面,做到有效的升级通知。
另一个方面是要考虑构建组件的依赖关系。如果其中一个依赖存在漏洞,则会影响整个应用程序的安全。现在的基本的Git服务器端,比如Github和Gitlab都提供了对依赖的基本类库安全自动化扫描工具。我们可以借助这些工具来确保我们的组件都更新到安全的版本。
进行权限和访问控制是维护无服务器安全性的重要规则,通过安全策略设置为每个功能授予最小权限,并使用基于角色的身份验证(IAM角色),以最大限度地减少潜在安全风险。
这个原则很重要,因为可访问的用户越多,对系统安全的潜在的风险就越大。比如一个例子,黑客成功窃取了你的一个用户的电子邮件账户,窃取了其登录凭据。为了最大限度地降低风险,我们应该分角色限制可访问的功能,并对访问IP进行限制,比如通过防火墙和VPN等设置限制登录,这样就算登录凭据被窃取了也无法登陆。当然除了外部黑客的攻击以外我们也要防止内部人员窃取其不应该知道的信息,所以基于角色限制每个用户的权限至关重要。
与限制用户权限原理类似,将每个功能的网络和资源访问隔离也很重要。这条原则也被称为微分段(Micro-Segmentation),就是通过设置访问屏障的,保证我们的某功能被攻克后,不影响其他功能和节点。安全界常遵守一个常理就是"鸡蛋不能放在同一个篮子里"。
如果正如我们将数据库与另一个数据库分开一样,通过隔离不同的功能,不同的人容器,可以保证整体的安全不受部分节点的影响。