随着云计算的普及,Serverless 架构正在成为一种趋势。相较于传统的基于虚拟机的架构,Serverless 更为灵活与高效,并且承诺降低资源和成本消耗。但是,DDos 攻击也随之而来,Serverless 架构也面临着类似于传统架构的攻击风险。
DDos 攻击是指一定数量的计算机同时对一个目标进行攻击,造成不同程度的瘫痪。而在 Serverless 架构下,应用程序不再运行在固定的虚拟机实例上,而是由云服务提供商来自动管理管理并自动分配资源。这导致传统的 DDos 防御策略可能并不适用,然而 Serverless 架构本身的特性,也使得 DDos 攻击变得更难追踪与防止。本文将分析 Serverless 架构下的 DDos 攻击与防范,并提供一些 tips 和指导意义。
DDos 攻击对 Serverless 架构带来的风险
Serverless 架构的本质是将应用程序的计算和存储部分从基础设施中抽象出来,使得开发者可以专注于实现业务逻辑,而由云服务提供商来自动管理和扩展系统。在传统的计算机架构中,攻击者会尝试让其目标服务崩溃,使得目标服务不能响应客户端请求。在 Serverless 架构中,攻击者可能会更多地关注与应用程序所依赖的云服务本身,如云函数的调用与数据存储、消息队列等。这意味着,构建防御策略时,需要考虑到 Serverless 架构的特点,并且仔细分析可能会影响系统稳定性的攻击场景。
DDos 攻击防范的建议
- 加强认证和鉴权
任何访问你的部署环境的请求必须要经过安全认证才能被执行。在 Serverless 架构中使用 Token 或者 API 密钥鉴权,限制在数据可能被泄露时,只允许通过审核的请求进入系统。
def check_token(): token = request.args.get('token') if token != app.config['API_TOKEN']: abort(403)
- 减少网络延迟
网络延迟能够给攻击者充足的时间进行攻击。一些技术措施可以大大减少网络延迟,例如使用 CDN 和短周期的刷新缓存、缓存处理过的数据等。
-- -------------------- ---- ------- ------------------ ----------------- ------------------------ --- ----------- ---- - ---- -- --------------------- ---- - ----------------- ----- - -- ---- --------- ----------- ---- - ------- ------------------- ----------- ----------- ------ ----
- 攻击识别与限制
通过使用 WAF、IDS 和 AI 等技术,可以识别出各种类型的攻击,并采取相应的限制措施。因为 Serverless 架构的自动扩展与自动配置的特性,可能会导致这些限制措施无法直接使用,需要使用其他技术手段进行处理。
-- -------------------- ---- ------- --- -------------- --------------- - ----------------- - ------- ------- --- ------ - ------- ------- ------------- - ---------------- --- ------- -- ---------------- -- - ----------------- ----------------- -- - ------ - ------------------------- ---------- -- ----------------- -- --------------------- - ----- ------ ---- ------ -----
- 控制函数并发数
在函数并发执行时,会导致云服务提供商的资源下降,当这些资源被占满时,可能会对系统造成 DDos 攻击。以下是如何对函数进行限制的示例代码:
from multiprocessing import Lock semaphore = Lock() def handler(event, context): with semaphore: # do something
- 合理分片异步处理
当系统规模扩大时,需要分片异步处理以节省资源。分片需要满足两个条件:每个分片都能够被一台底层机器上的 CPU 执行,每个分片相互之间独立。如果分片不是独立的,则可能在共享数据时出现竞争,从而更容易出现 DDos 攻击。因此在设计分片的过程中需要多加考虑。
def handler(event, context): shard_index = event['shard_index'] # do some computation based on shard_index return results
结论
Serverless 提供了一种便捷有效的架构方式,但同时也引入了新的威胁和安全挑战。DDos 攻击是目前 Serverless 部署环境面临的最严重的安全威胁之一,但通过合理的防御策略,可以帮助开发人员在 Serverless 环境下保持应用程序的安全性。本文提供了一些建议的防御策略以供参考,但是因为每个系统的架构和部署环境都有所不同,需要根据具体情况选择相应的防御策略。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/671478dbad1e889fe213f619