无服务器(Serverless)是指根据用户需求提升计算资源的云计算服务。无服务器的最大优点是用户不需要监控和管理。用于开发中,为开发者腾出更多时间优化代码,或者为应用特性或功能寻找更多创新点。
随着云生态系统的发展和扩展,可以满足用户对系统的灵活性和动态按需可塑性方面的需求,用户可以根据业务情况在高峰期短时间内部署大量服务器上线,然后再过了高峰后又撤下来,整个过程自动调控,自动收缩。
一个典型例子是新浪微博服务,在突然出现爆发事件时候(比如明星出轨新闻),其流量可能是平时几百甚至上千倍,对这样的爆发流量用传统的扩容方式根本满足不了需求,也没有那么多资源,新浪的解决方法是私有云+租赁公有云方式,花钱利用阿里云实现峰值时服务扩容。对于一般企业则可以完全利用租赁第三方云服务方式构建自己服务模式,自己无需维护任何硬件设备和基础后端软件服务,这样的架构叫 Serverless ,即“无服务器”架构。
无服务器是指根据用户需求提升计算资源的云计算服务。所有常见的基础设施管理事件都可以归因于云计算服务提供商和产品,让企业用户可以将全部精力投入到应用定制中。在服务器免费服务中,服务器在运行,但在用户看来,并没有真正的体验。可以看出,用户不需要进行管理和交互,所以取名增强系统可扩展性的方法有很多,无服务器技术就是其中之一。
无服务器最明显的效果是提高企业生产力和可扩展性。顾名思义,无服务器的最大优点是用户不需要监控和管理。用于开发中,为开发者腾出更多时间优化代码,或者为应用特性或功能寻找更多创新点。
无服务器服务仅通过代码执行来执行。当请求发生时,它在无状态容器中执行。扩展/查看服务的请求数量也以透明方式呈现。该服务只对内容收费,对容量浪费没有限制。
无服务器是虚拟化和云计算发展的结果,是指其企业完全通过租赁云供应商的资源来实现业务的模式,无服务器的核心是在架构中完全摒除硬件和后端基础软件服务(比如数据库,账号体系等),而依赖第三方的云资源(BaaS 或者 FaaS)。
当考虑无服务器架构时候主要基于一个想法:如果并不是所有应用程序的功能都是一直要用,那么为什么要为不经常使用的服务器支付租金呢?一般来说系统都需要一些功能,如业务逻辑,用户认证系统,数据库,以及其他一些用户简短的和特定活动需要的功能。使用服务器架构,会执行和打包这一系列的功能,所以一般也将无服务器称为功能即服务(FaaS);这些服务也为后端服务,所以也叫为 BaaS “Backend as a Service”。
无服务器安全
虽然云厂商会提供了很多安全服务和一些基本的安全策略,但是需要你花费购买相关服务,而且一些策略也需要自己配置。关于无服务器架构的安全我们需要注意以下事项。
保持最新版本
为了确保应用程序的安全,最有效方法之一是确保所有组件都是新的。使用的第三方模块是否需要打安全补丁?
软件更新时候经常被忽略的问题是忘记更新组件依赖项,尤其是在应用程序中使用开源组件时。据统计有超过 92%的应用程序使用的开源组件会占到其代码库的 60-80%,基础开源组件的安全是不容忽视的部分。如何安全地使用开源模块与商业软件存在一些明显差异,例如在开源组件在发布新漏洞或修复程序时无法很好的跟踪其影响面,做到有效的升级通知。另一个方面是要考虑构建组件的依赖关系。如果其中一个依赖存在漏洞,则会影响整个应用程序的安全。现在的基本的 Git 服务器端,比如 Github 和 Gitlab 都提供了对依赖的基本类库安全自动化扫描工具。我们可以借助这些工具来确保我们的组件都更新到安全的版本。
最小权限原则
进行权限和访问控制是维护无服务器安全性的重要规则,通过安全策略设置为每个功能授予最小权限,并使用基于角色的身份验证(IAM 角色),以很大限度地减少潜在安全风险。
这个原则很重要,因为可访问的用户越多,对系统安全的潜在的风险就越大。比如一个例子,黑客成功窃取了你的一个用户的电子邮件帐户,窃取了其登陆凭据。为了最大限度地降低风险,我们应该分角色限制可访问的功能,并对访问 IP 进行限制,比如通过防火墙和 VPN 等设置限制登录,这样就算登录凭据被窃取了也无法登陆。当然除了外部黑客的攻击以外我们也要防止内部人员窃取其不应该知道的信息,所以基于角色限制每个用户的权限至关重要。
保持 Em 分离
与限制用户权限原理类似,将每个功能的网络和资源访问隔离也很重要。这条原则也被称为微分段(Micro-Segmentation),就是通过设置访问屏障的,保证我们的某功能被攻克后,不影响其他功能和节点。安全界常遵守一个常理就是“鸡蛋不能放在同一个篮子里”。
如果正如我们将数据库与另一个数据库分开一样,通过隔离不同的功能,不同的人容器,可以保证整体的安全不受部分节点的影响。
紧盯日志
一旦开始使用无服务器基础架构,就会发现架构都会变点很乱不着头脑,快速迭代的功能和业务,可能会让我们忽略一些安全问题迹象。比如发送到无服务器架构的大量请求,可能意味着功能存在漏洞功能,而你却将其忽略,没注意到。这时候就需要注重安全和日志了。
熟悉无服务器架构(其他一些架构也类似)很好的工具是浏览和系统日志。解决无服务器安全挑战的第一步就是维护和分析日志,识别执行日志中的异常情况。
安全扫描
其次,我们应该使用全自动工具扫描功能,包括检查和监控系统所有使用的开源组件。比如你使用 AWS Lambda 你可以使用 WhiteSource 的无服务器集成来扫描和监控已部署,WhiteSource 会自动识别所有开源组件和依赖项,然后针对其开源存储库的综合数据库检查它们,以获取安全漏洞和许可证。检测到后,您可以应用自动策略,定义工作流程以及在团队中协作信息。
合规事宜
当涉及金融,电信,健康等受监管行业时,数据隐私问题变得更加敏感。由于我们运行应用程序并在云上存储数据,因此总是存在与这些资产面向公众相关的风险。对云上数据做合格性可以需要通过法律及专业人士进行协助进行。
总结
总之使用无服务器架构具有很多优势,可以帮助我们节省成本,提高灵活性和可塑性。但是无服务器架构安全的问题也不容忽视。本文我们列举了一些常用的安全原则和技巧也帮大家避免常见的无服务器安全隐患,并确保应用程序的安全可靠。