云与基础设施安全

无服务器安全

约 3 分钟阅读

什么是无服务器安全

无服务器安全是指应对 AWS Lambda、Azure Functions、Google Cloud Functions 等无服务器计算环境特有安全风险的实践。

在无服务器环境中,操作系统和运行时管理委托给提供商,因此共享责任模型发生了转变。虽然消除了操作系统补丁和服务器加固的负担,但应用层安全 - - 函数代码、权限、依赖项和输入验证 - - 成为用户的主要责任。

无服务器特有的攻击面

无服务器环境具有与传统基于服务器的应用不同的攻击面。

  • 事件注入:Lambda 函数从 API Gateway、S3、SQS、DynamoDB Streams 等多种事件源调用。不应信任来自各事件源的输入 - - 必须在函数内进行验证和清理。例如,包含特殊字符的 S3 对象键如果直接用于文件操作,可能触发路径遍历
  • 过于宽泛的权限:为所有函数分配一个具有广泛权限的 IAM 角色意味着一旦某个函数被入侵,攻击者就能访问所有资源。应为每个函数单独设计最小所需权限
  • 依赖漏洞:函数包中包含的第三方库可能存在已知漏洞。由于无服务器函数部署频繁,依赖扫描必须集成到 CI/CD 流水线中
  • 执行环境复用:Lambda 为了性能会复用执行环境(热启动)。前一次调用存储在全局变量或 /tmp 目录中的数据可能会保留。绝不在这些位置存储敏感信息

无服务器安全最佳实践

加强无服务器环境安全的实用措施。

  • 每个函数独立的最小权限 IAM 角色:不要在所有函数间共用一个 IAM 角色。使用 AWS SAM 或 Serverless Framework 模板为每个函数定义策略
  • 输入验证:在函数入口点验证事件数据的模式、数据类型和值范围。使用 API Gateway 请求验证器和 Lambda Powertools 进行结构化验证
  • 依赖管理:定期更新依赖项,将漏洞扫描(Snyk、Dependabot)集成到 CI/CD 中。固定依赖版本并通过锁文件验证完整性
  • 环境变量加密:使用 KMS 加密 Lambda 环境变量。对于高度敏感的信息,在运行时直接从 Secrets Manager 获取,而非使用环境变量

监控与事件响应

无服务器环境的监控需要与传统服务器监控不同的方法。

  • 函数级日志:向 CloudWatch Logs 输出结构化日志,使请求 ID、执行时间和错误信息可追踪。过滤日志以确保不包含密钥和个人信息
  • 异常检测:检测函数调用次数异常增加、执行时间激增和错误率上升等异常。CloudWatch Alarms 和第三方工具(Datadog、Lumigo)提供无服务器专用监控
  • 分布式追踪:使用 AWS X-Ray 可视化跨多个函数和服务的调用链。快速定位性能瓶颈和错误来源

常见误解

无服务器没有服务器,所以不需要担心安全问题
即使在无服务器环境中,应用层安全风险仍然存在,包括函数代码漏洞、IAM 配置错误、依赖漏洞和来自事件源的恶意输入。虽然操作系统管理负担减轻了,但安全责任并没有消失。
Lambda 函数执行时间很短,没有时间被攻击
即使执行时间很短,一次调用就可以窃取敏感数据或滥用资源。在函数被反复调用的环境中,攻击者可以尝试任意多次。执行时间短并不是安全保障。
分享

相关术语