01 · 事件源类型与配置基线
事件源是函数平台的"隐形边界"——大量安全方案只保护HTTP入口,却忽略了S3事件、定时规则、队列消息同样能触发函数。下表覆盖主流事件源类型、其典型配置错误与基线防护(以AWS为例,其他平台机制对应):
| 事件源类型 | 示例 | 典型配置错误 | 基线防护 |
|---|---|---|---|
| HTTP入口 | API网关、函数URL、ALB触发 | 无认证、无节流、CORS通配、函数URL AuthType NONE | 授权器+Usage Plan;函数URL默认IAM型并纳入审计 |
| 消息队列 | SQS、Azure Queue、Pub/Sub订阅 | 队列策略公开、未启用服务端加密、批处理失败语义未配置 | 策略最小化;SSE-KMS;启用部分失败报告(SQS batch item failures) |
| 主题订阅 | SNS、EventBridge事件总线 | 主题允许匿名订阅/发布;跨账号事件规则无审计;归档回放未管控 | 主题策略最小化;EventBridge规则变更告警;Archive/Replay操作审计 |
| 对象存储通知 | S3 Event Notification、Blob存储触发 | 桶公开可写(任何人投递恶意对象触发函数)、对象键未经校验直接使用 | 桶默认私有;触发前校验对象键与来源账户;仅接受指定前缀/后缀 |
| 数据库流 | DynamoDB Streams、Firestore触发器 | 流未加密、消费函数权限过宽、流记录含敏感字段未脱敏 | 流级加密;消费角色限定;敏感字段入流前评估 |
| 定时调度 | EventBridge Scheduler、CloudWatch Events、Cloud Scheduler | 规则被篡改或新增实现持久化;调度目标权限过宽 | PutRule/CreateSchedule事件实时告警;调度目标角色最小化 |
| 第三方Webhook | 支付回调、代码仓库事件、客服系统回调 | 无验签、无重放保护 | HMAC验签+时间戳防重放;密钥分函数隔离 |
核心原则:每条事件链路都是独立入口。"网关上有认证"对S3事件、定时规则、队列消息毫无约束意义。函数安全盘点必须以事件源映射清单为单位:逐一核查"谁能产生事件、事件如何被校验、失败去向何处"。定时事件与规则类配置同时是攻击者最青睐的持久化位(第7页检测场景),其变更必须进入实时审计。
02 · 事件注入、重试与幂等
2.1 事件注入防御纵深
- Schema校验前置:每类事件在函数入口以JSON Schema强校验;EventBridge支持事件模式注册与发现——让模式成为团队契约。
- 不可信字段清单化:对象键、消息属性、detail字段、Header按不可信输入对待,进入任何命令/查询/模板/路径拼接前必须消毒(第4页风险表)。
- 事件溯源校验:对S3类触发,校验事件中的来源账户ID与桶名是否属于允许集合(防止跨账户投毒事件)。
2.2 重试语义:功能特性即攻击放大器
官方重试语义是双刃剑——可用性机制在攻击场景下会放大破坏:
- AWS Lambda异步调用:官方文档明确异步事件默认重试2次(共3次尝试),事件在队列中保留最长约6小时;超限后若无死信队列则静默丢弃。注入事件因此被自动重复执行3次。
- 下游故障的级联:函数故障→平台自动重试→下游压力放大→更多函数超时——重试风暴可在数分钟内打满并发配额并产生账单。
- 基线要求:全部异步函数配置DLQ或Destinations(失败事件可路由至SQS/SNS/EventBridge做审计与人工重放);消费型函数必须幂等(按事件ID去重、写库唯一约束、状态机检查)。
幂等是事件驱动架构的安全属性,不只是稳定性属性:攻击者无法利用"重试"使恶意事件被执行多次产生累计效应(如重复转账、重复发券);故障恢复时的人工重放(EventBridge Archive Replay)也以幂等为前提。组织应将"本函数是否幂等"列为代码评审必答项。
03 · API网关与函数URL安全基线
3.1 网关四层基线
| 基线域 | 要求 | 依据与说明 |
|---|---|---|
| 认证授权 | 所有公开方法强制授权器;内部方法至少IAM签名 | JWT授权器强制校验iss/aud/exp;Lambda授权器注意缓存吊销窗口(第3页F2) |
| 节流配额 | 账户级默认10,000 RPS需按方法/Usage Plan细分;每API配置突发限制 | API Gateway REST官方默认账户级节流;Usage Plan绑定密钥与配额 |
| 超时边界 | REST集成超时上限29秒——超过即架构缺陷 | 官方上限;长任务必须异步化或经编排拆分 |
| WAF防护 | 公开API挂载WAF,启用托管规则基线(如AWS WAF托管规则集) | WAF托管规则提供常见攻击模式基线;自定义规则按业务收敛 |
| 日志审计 | 访问日志+执行日志开启,集中留存≥6个月 | 《网络安全法》第21条日志留存要求;日志脱敏防敏感字段入库 |
| CORS | 精确Origin白名单;禁止通配+凭据组合 | 第3页F5模式 |
API密钥≠认证:API Gateway的API Key(配合Usage Plan)设计用途是配额管理与用量追踪,AWS官方文档明确其不构成安全认证机制——泄露的API Key无法被吊销为"拒绝访问"语义,且可被多方共享。公开或敏感接口必须叠加授权器(JWT/Lambda/IAM)实现真正认证,API Key仅作为辅助的用量治理手段。
3.2 函数URL专项
Lambda函数URL(2022年4月发布)为函数提供专用HTTPS端点,AuthType为NONE时即公网匿名可达。基线要求:①默认创建为IAM型;②AuthType NONE必须经安全评审并叠加资源策略限制;③函数URL纳入资产台账与持续审计(与第2页D1合并核查);④对外暴露的函数URL视同公网API,套用WAF与日志基线。
3.3 私有端点模式
内部函数不接触公网:API Gateway Private REST API经VPC终端节点暴露(仅VPC内可达)、函数接入VPC并经PrivateLink访问后端、入口收敛至内网负载均衡。私有化的代价是冷启动与可用性设计复杂度上升(VPC内函数弹性伸缩与ENI管理),应纳入架构评审权衡。
04 · 网络隔离与出站治理
- 出站收敛:函数默认全互联网可达。持有数据或凭证的函数应接入VPC,经NAT网关做目的地白名单,或使用VPC终端节点直连云服务(流量不出AWS骨干网,可审计且不受公网出口影响)。
- DNS层管控:Route 53 Resolver DNS Firewall可对VPC内函数的DNS查询做域名名单拦截——直接命中Denonia类DoH规避的检测盲区上游(DoH走443仍需出口管控配合)。
- 同步优先异步:服务间调用优先经队列/总线解耦(削峰、天然重试、可审计),避免同步调用链的雪联;确需同步时使用签名请求(SigV4类)鉴权。
- mTLS与服务网格:函数与常驻服务混布时,可经服务网格(如Cloud Service Mesh、Consul)统一东西向mTLS与身份——函数以网格外部身份接入的复杂度较高,建议仅对高敏感链路启用,避免为全量函数引入运维负担。
05 · 编排与工作流安全
900秒执行上限使长任务必须拆解到状态机层(AWS Step Functions、GCP Workflows、Azure Durable Functions),编排层因此成为新的信任枢纽:
- 状态机权限最小化:状态机服务角色的每个Task只授予完成该步骤所需的最小动作集;输入输出经JSONPath过滤,避免敏感字段贯穿全状态机历史。
- 任务令牌保护:回调型任务令牌(Task Token)等价于执行授权——泄露即被冒名回调完成;令牌按任务粒度生成、短期有效、不得写入可公开读取的状态。
- 执行时长意识:Step Functions标准工作流官方支持最长1年执行——长窗口意味着凭证轮换、权限回收必须在状态机设计中显式处理(任务间AssumeRole而非全程固定凭证)。
- 幂等与补偿:Saga式补偿逻辑必须可重入;人工重放与失败重试同样以幂等为前提(第2节)。
本节参考来源(第5页)
以下均为真实可查的权威来源,用于支撑本页事实性表述。
AWS Lambda异步调用官方文档(默认重试2次、异步事件队列保留与死信队列/Destinations):Asynchronous invocation。
AWS SQS与Lambda集成官方文档(事件源映射、批处理部分失败报告):Using Lambda with Amazon SQS。
AWS EventBridge官方文档(事件总线、事件模式、Archive与Replay):Amazon EventBridge。
AWS API Gateway官方文档(节流与使用计划、授权器、集成超时):API Gateway开发者指南。
AWS WAF托管规则官方文档:AWS WAF managed rule groups。
AWS官方博客:Lambda函数URL发布(2022年4月):Announcing AWS Lambda Function URLs。
Amazon Route 53 Resolver DNS Firewall官方文档:Resolver DNS Firewall。
AWS Step Functions官方文档(标准工作流执行时长上限1年、任务令牌回调模式):AWS Step Functions。