CloudFront 与 WAF 及 Lambda@Edge
附加 AWS WAF 以阻止常见网络攻击,并借助 Lambda@Edge 在边缘执行轻量级请求和响应转换。
CloudFront 与 WAF 及 Lambda@Edge 是 CoddyKit 上的免费 AWS Solutions Architect 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AWS Solutions Architect 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AWS Solutions Architect 课程共包含 4 节课。
使用 AWS WAF 保护 CloudFront
AWS WAF(Web 应用程序防火墙)会过滤和监控到达 CloudFront 分配的 HTTP/HTTPS 请求。通过将 WAF Web ACL 关联到您的分配,您可以在常见 Web 攻击到达源站之前阻止它们,例如 SQL 注入、跨站脚本攻击(XSS)、恶意机器人和 OWASP Top 10 攻击。
WAF 在 CloudFront 边缘位置运行,这意味着恶意请求会在距离攻击者最近的边缘位置被拒绝,而不是到达您的 ALB 或应用程序服务器。这样可以减轻后端负载,并在更靠近攻击者的位置阻止攻击。
# Associate a WAF Web ACL with a CloudFront distribution
aws wafv2 associate-web-acl \
--web-acl-arn arn:aws:wafv2:us-east-1:123456789:global/webacl/MyACL/12345 \
--resource-arn arn:aws:cloudfront::123456789:distribution/EDFDVBD6EXAMPLEWAF 规则和规则组
WAF Web ACL 包含按顺序排列的规则和规则组,每条规则都会匹配请求属性并执行相应操作(Allow、Block、Count、CAPTCHA)。规则按照优先级顺序进行评估,并应用第一条匹配规则的操作。
AWS 提供托管规则组,其中包含由 AWS 和 AWS Marketplace 卖家维护的预构建规则集。AWS Managed Rules - Core Rule Set 无需任何配置即可覆盖 OWASP Top 10。随着新威胁出现,AWS 会更新托管规则组,从而减少您的运维负担。
# Create a Web ACL with AWS Managed Core Rule Set
aws wafv2 create-web-acl \
--name MyCloudFrontACL \
--scope CLOUDFRONT \
--default-action Allow={} \
--rules '[{
"Name": "CoreRuleSet",
"Priority": 1,
"Statement": {
"ManagedRuleGroupStatement": {
"VendorName": "AWS",
"Name": "AWSManagedRulesCommonRuleSet"
}
},
"OverrideAction": {"None": {}},
"VisibilityConfig": {
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "CoreRuleSet"
}
}]' \
--visibility-config SampledRequestsEnabled=true,CloudWatchMetricsEnabled=true,MetricName=MyACL \
--region us-east-1WAF 速率限制和机器人控制
WAF 中的基于速率的规则会在 5 分钟时间窗口内统计每个源 IP 发出的请求数。如果某个 IP 超过阈值(例如每 5 分钟 2,000 个请求),WAF 会阻止该 IP 的后续请求,直到请求速率下降。基于速率的规则可以防御暴力破解、凭证填充和简单的 DDoS 抓取攻击。
AWS WAF Bot Control 是一个托管规则组,可将流量分类为以下类别:已验证的机器人(Googlebot、Bingbot)、抓取程序、监控工具和人工流量。您可以针对每个类别配置不同的操作——允许搜索引擎机器人,使用 CAPTCHA 验证未知机器人,阻止恶意抓取程序。
WAF 范围:CLOUDFRONT 与 REGIONAL
WAF Web ACL 的范围可以是 CLOUDFRONT(全局范围,用于 CloudFront),也可以是 REGIONAL(用于特定区域中的 ALB、API Gateway、AppSync 或 Cognito User Pools)。无论流量从哪里发起,CloudFront 范围的 WAF ACL 都必须在 us-east-1 Region 中创建,因为 CloudFront 由该区域管理。
这是考试中一个重要的易错点:如果您在 eu-west-1 中创建 WAF Web ACL,然后尝试将其关联到 CloudFront,关联会失败。请始终在 us-east-1 中创建 CloudFront WAF ACL。
Lambda@Edge 简介
Lambda@Edge 允许您运行 Node.js 或 Python Lambda 函数,以响应 CloudFront 事件,并在 CloudFront 边缘位置执行。函数会在用户请求后的几毫秒内运行,无需将流量路由回中心区域进行处理。
Lambda@Edge 函数会部署到 us-east-1 区域,但随后自动复制到全球所有 CloudFront 边缘位置。这意味着您的代码会尽可能靠近用户执行,从而以极低的延迟开销在边缘位置实现个性化、身份验证和 A/B 测试。
Lambda@Edge 触发点
Lambda@Edge 函数可以在生命周期中的四个节点拦截 CloudFront 请求和响应:
- Viewer Request:CloudFront 从查看者接收请求后、检查缓存之前——用于身份验证、重定向和标头操作
- Origin Request:缓存未命中后、转发到源站之前——用于网址重写和向源站添加自定义标头
- Origin Response:从源站收到响应后、缓存响应之前——用于添加安全标头和修改响应
- Viewer Response:CloudFront 将响应发送给查看者之前——用于添加或修改响应标头
Lambda@Edge 与 CloudFront Functions
AWS 提供了两种边缘计算选项,各自具有不同的取舍:
- CloudFront Functions:亚毫秒级执行,仅支持 JavaScript,成本极低(约为原价格的 1/6),仅在 Viewer Request 和 Viewer Response 事件运行,计算时间限制为 1 毫秒,无法访问 VPC 或网络
- Lambda@Edge:执行时间最长可达 30 秒(Viewer)/30 秒(Origin),支持 Node.js 或 Python,支持全部四个触发点,可以发起网络请求,并可访问请求正文和响应正文
对于简单的标头操作、网址规范化和缓存键计算,请使用 CloudFront Functions。对于需要网络调用、更长计算时间或源站侧处理的复杂逻辑,请使用 Lambda@Edge。
Lambda@Edge 使用场景
SAA-C03 考试中的常见 Lambda@Edge 模式:
- 在边缘位置验证 JWT:Viewer Request 函数验证 Authorization 标头;未经授权的请求会返回 401,不会到达源站
- A/B 测试:Viewer Request 通过 Cookie 将用户分配到 A 组或 B 组,并修改请求以获取
/a/page.html或/b/page.html - 网址重写:Origin Request 将简洁网址重写为 S3 中实际的文件路径
- 动态调整图像大小:Origin Request 构造对图像处理 Lambda 的请求;Origin Response 缓存调整大小后的图像
- HTTP 安全标头:Viewer Response 注入 CSP、HSTS 和 X-Frame-Options 标头
Lambda@Edge 的限制
与标准 Lambda 相比,Lambda@Edge 有以下几项限制:
- 函数必须位于 us-east-1 区域
- 不支持 VPC(无法访问 VPC 中的资源)
- 不支持环境变量(请将配置嵌入函数代码,或在冷启动时从 Parameter Store 获取)
- 无法使用 Lambda Layers
- 查看者事件超时时间:5 秒;源站事件超时时间:30 秒
- 部署包大小限制:1 MB(查看者事件)/ 50 MB(源站事件)
这些限制使 Lambda@Edge 不适合长时间运行的计算、依赖 VPC 的操作,或需要在每次部署时使用动态配置的函数。
WAF + Lambda@Edge:分层安全防护
WAF 和 Lambda@Edge 承担不同的安全职责,二者可以相互补充:
- WAF:基于特征的攻击拦截(SQL 注入、XSS、已知恶意攻击者、速率限制);托管规则会自动处理常见攻击
- Lambda@Edge:自定义业务逻辑安全防护(JWT 验证、会话检查、访问令牌验证);灵活,但需要投入开发工作
这是一种纵深防御架构:WAF 首先拦截已知攻击模式;Lambda@Edge 验证业务层身份认证;CloudFront 签名 URL/签名 Cookie 限制内容访问;OAC 确保 S3 保持私有。每一层都能独立防御不同类型的攻击。
监控 WAF 和 Lambda@Edge
您可以使用以下工具监控边缘安全层:
- WAF 日志:启用完整请求日志记录,将日志写入 S3、CloudWatch Logs 或 Kinesis Firehose,以查看哪些规则匹配以及哪些流量被阻止
- WAF 指标:在 CloudWatch 中按规则查看
BlockedRequests、AllowedRequests和CountedRequests - Lambda@Edge 日志:函数在哪个区域执行,就会在哪个区域创建 CloudWatch Logs 日志组;使用 CloudWatch Insights 跨区域查询
- CloudFront 实时日志:将访问日志流式传输到 Kinesis,以便立即分析(而标准访问日志每隔几分钟批量传输一次)
快速检查
测试您对本课 AWS 解决方案架构师(SAA-C03)相关概念的理解。
课程回顾
本课您学习了以下内容:AWS WAF 使用托管规则组和自定义规则组,在 CloudFront 边缘位置拦截常见 Web 攻击;Lambda@Edge 在全球四个 CloudFront 触发点运行自定义代码;CloudFront Functions 为简单的查看者端逻辑提供亚毫秒级执行速度。CloudFront 使用的 WAF ACL 必须在 us-east-1 中创建。接下来我们将学习 Application Load Balancer、Network Load Balancer 和 Gateway Load Balancer。
常见问题解答
「CloudFront 与 WAF 及 Lambda@Edge」课时是免费的吗?
是的 — 「CloudFront 与 WAF 及 Lambda@Edge」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AWS Solutions Architect 课程的其余内容,请升级到 CoddyKit PRO。 AWS Solutions Architect 课程共包含 4 节课。
「CloudFront 与 WAF 及 Lambda@Edge」这节课中我会学到什么?
附加 AWS WAF 以阻止常见网络攻击,并借助 Lambda@Edge 在边缘执行轻量级请求和响应转换。 你通过在浏览器中直接运行的动手代码来练习 AWS Solutions Architect,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 AWS Solutions Architect 需要有经验吗?
无需任何先前经验。CoddyKit 上的 AWS Solutions Architect 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「CloudFront 与 WAF 及 Lambda@Edge」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 AWS Solutions Architect 课中编写并运行代码吗?
能。每节 AWS Solutions Architect 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- CloudFront 分配与源站
- 缓存行为与 TTL 设置
- 签名 URL、签名 Cookie 与地理限制
- CloudFront 与 WAF 及 Lambda@Edge