服务对象与地域限制
PuppyIP 仅面向海外合规企业及其授权人员提供服务,不面向中国大陆地区开放或提供代理服务。本服务仅限用于中国大陆境外的合法业务活动,严禁在中国大陆境内使用本服务。
代理 IP 或服务器位于境外,不改变上述限制。不得通过中转、转接、共享或转售向中国大陆境内的最终使用者提供本服务。使用前请阅读用户服务协议。
本文要点
- 自动集成仅适用于 CloudFront scope 的 Web ACL,且其中须有定向检查级别 Bot Control、ATP 或 ACFP 规则组。
- 新建控制台 Web ACL 符合条件时默认开启;程序化创建默认关闭,既有 Web ACL 不会因新功能或新增规则组而自动开启。
- 只有 AWS WAF 放行、来自源站、状态为 200、Content-Type 为 text/html 且未压缩的响应才可能插入标签;源站还须在文档前几 KB 内提供可识别的 head。
- 集成影响整个 Web ACL;Range/If-Range 会被移除并返回完整对象,且会遇到 CSP、缓存及特定 CloudFront 架构限制。
- 没有插入指标或日志字段。应分别检查页面源码中的标签与浏览器收到的 aws-waf-token,并在强制缺少令牌的规则前先观察 Count 结果。
先看资格:仅限 CloudFront Web ACL 与三类保护
自动 SDK 集成只提供 AWS WAF JavaScript SDK 的客户端信号,适用于 CloudFront scope 的 Web ACL;Regional scope 的 Web ACL(包括用于 Application Load Balancer 的 Web ACL)没有此设置。Web ACL 至少要包含一类符合条件的托管规则组:Bot Control 且 Inspection level 为 targeted、账户接管防护 ATP,或账户创建欺诈防护 ACFP。Bot Control 的 common 检查级别不符合条件,规则组版本不影响 targeted 资格。
规则组动作设为 Count 不会取消资格,因此可以在评估阶段插入 SDK 信号。自动化本身不执行 Bot Control、ATP 或 ACFP 的保护决策,也不等于开启或强制执行这些规则。AWS 公告说明该集成本身不额外收费;这不代表 AWS WAF、托管规则组、请求处理或其他 AWS 服务整体免费。
默认取决于创建方式,旧 Web ACL 不会自动改变
通过 AWS WAF 控制台新建且包含合格规则组的 CloudFront Web ACL,自动 SDK 集成默认开启;如不需要,可在保存前取消 Enable automatic SDK integration。通过 API、CLI、SDK、CDK 或 CloudFormation 等方式程序化创建时默认关闭。功能发布前创建的 Web ACL 保持原状;给既有 Web ACL 添加合格规则组也不会替它开启。
准备开启后,可在控制台的合格托管规则组设置中启用;API 配置位于 Web ACL AssociationConfig 的 ChallengeJavascriptSdkInjection.CLOUDFRONT 项。保持开启期间必须至少保留一个合格规则组;若删除最后一个合格规则组,或将 Bot Control 从 targeted 改为 common,应在同一次更新中移除该集成设置,否则 AWS WAF 会拒绝更新。UpdateWebACL 请求若省略此设置,会关闭自动集成,即使之前是在控制台开启的。
只有满足响应条件的 HTML 才会得到标签
CloudFront 只会尝试修改 AWS WAF 放行后由源站返回的 HTTP 200、Content-Type 为 text/html 的响应。图像、样式表、脚本、JSON 等其他内容类型不插入;自定义错误页面若以 200 返回,则会像其他页面一样处理。源站对象必须未压缩,且文档开头附近要有可识别的 head 元素:CloudFront 只扫描响应正文最前面的几 KB,并把标签放到开头的 head 标签之后。
UTF-16、UTF-32 等非 ASCII 兼容编码不会被修改。
该扫描是快速字节扫描,不是完整 HTML 解析;过早出现的注释内容或无效 head 可能造成标签放错位置,浏览器因此不会运行它。若源站存储或返回带 Content-Encoding: gzip 的对象,包括已压缩的 S3 HTML,就不会插入。开启后,CloudFront 会以未压缩形式向源站请求所有被 AWS WAF 放行的对象,而不只是 HTML;若需继续向查看者提供压缩文件,应在 CloudFront 缓存行为中启用相应压缩。
设置作用于整个 Web ACL,并会改变 Range 请求
此设置不能按 URL 路径单独开启或关闭。它会尝试处理该 Web ACL 下所有符合条件且被放行的源站响应,不取决于合格规则组是否评估了该请求;规则组的 scope-down 或较早匹配的 Allow 规则也不会阻止标签插入。若要让特定页面不被转换,源站可对相应响应设置 Cache-Control: no-transform。
no-store 和 private 等其他 Cache-Control 指令不会排除插入。
开启后,CloudFront 会从所有 AWS WAF 放行请求中移除 Range 和 If-Range 请求头,并对任何对象类型返回完整对象和 HTTP 200。这会影响视频、音频、分段下载及其他范围请求客户端,并增加这些请求传输的数据量。验证时应检查应用的压缩、缓存和范围请求行为。
插入后 Content-Length 会更新,分块响应可能省略该头;ETag 会变为与源站值不同的弱校验器,Content-MD5、Digest、Content-Digest 或 Repr-Digest 等正文完整性头则不会重算。
检查 CSP 与应用自己的 API 令牌流程
页面的 Content-Security-Policy 响应头或 meta 策略必须允许 SDK 下载并发起所需请求。AWS CSP 指南列出的相关指令包括 connect-src、script-src 和 script-src-elem,应按页面实际策略在这些指令中允许 https://*.awswaf.com。使用 strict-dynamic 并依赖 nonce 或 hash 的策略不支持自动插入:注入标签没有页面的 nonce,浏览器也会忽略主机白名单。
应保留严格策略,并在需要 nonce 的页面按官方 JavaScript 集成方式手动添加带 nonce 的脚本;不要为了自动插入而削弱 CSP。
注入的 SDK 会在页面加载后获取并刷新令牌,但第一个令牌生成前发出的请求不会携带令牌。如果单页应用依赖 SDK 给自己发出的 API 请求附加令牌,应继续使用现有手动集成,或按官方 API 集成指南接入。自动功能仅插入 AWS WAF SDK 标签,不插入 CAPTCHA JavaScript API、移动 SDK,也不替应用完成任意 API 的令牌附加。
标签缺失常与缓存或架构例外有关
Origin Shield 不受支持,来自启用它的源站的响应可能无法稳定插入;旧缓存副本也可能继续提供无标签页面。带有 Lambda@Edge origin-request 或 origin-response 事件的缓存行为不受支持,viewer 事件不影响源站响应插入。启用 CloudFront embedded POPs 的分发,其 embedded POP 提供的未缓存响应不会插入。
源站请求速率较高时,未缓存请求(例如 POST 或缓存行为最大 TTL 为 0)也可能返回未插入的响应。对必须始终运行 SDK 的页面,应直接集成 SDK;手动和自动集成可以并存。
CloudFront 已缓存的 HTML 会保留开启前的无标签版本,关闭后缓存中的副本也可能仍带标签,直至过期或被淘汰。浏览器及 CloudFront 下游缓存也会保留旧页面;条件请求返回 304 时,查看者继续使用旧副本。CloudFront 缓存失效不会清除这些下游副本。
需要立即更新时,可失效对应 HTML 路径,并考虑浏览器缓存。
分别验证标签、SDK 运行和规则效果
AWS WAF 不提供记录每个响应是否插入标签的指标或日志字段。可在无痕窗口查看页面源代码,或清除浏览器缓存和 Cookie 后检查标签是否存在;缓存 HTML 时还需考虑 CloudFront 仍在提供旧副本。检查 SDK 是否运行时,可确认浏览器是否收到 aws-waf-token Cookie。
页面源码有标签不代表策略允许它执行;有令牌也不单独证明某条托管规则已生效。
插入失败时 CloudFront 会原样返回源站响应,功能采用 fail-open,不会因插入失败而阻断页面。被 WAF 阻止、挑战或 CAPTCHA 响应替代的请求不会获得源站页面标签;CloudFront Functions 生成的响应也不会修改。在把缺少令牌作为阻断条件之前,先将相应规则设为 Count 并查看结果,因为合法页面若未运行 SDK,后续请求也可能缺少令牌。
资料来源
常见问题
SDK 请求已经通过我的域名转发,还能自动集成吗?
AWS 文档说明,自动插入的标签会直接引用 AWS WAF 域名,不使用你为 SDK 请求设置的自有域名代理。需要这类代理流程时,应保留适合应用的手动集成,并确认浏览器实际请求目的地。
可以依赖自动标签的固定属性和完整脚本 URL 吗?
不宜。AWS 说明标签的具体属性、主机和路径可能变化,不应将应用逻辑、测试或安全策略绑定到这个精确格式。CSP 应按官方指南允许所需 AWS WAF 域名;采用 strict-dynamic 与 nonce 的页面则应继续手动集成。
页面已经手动加载 SDK 时,自动集成会重复运行吗?
AWS 说明同一页面即使包含多个 SDK 标签,SDK 也只运行一次,手动和自动集成可以并存。若页面采用需要 nonce 的严格 CSP,或应用依赖 SDK 给自有 API 请求附加令牌,仍须保留符合要求的手动集成。
HTML 下载中途切换开关后,还能续传吗?
AWS 提醒,若 HTML 下载在开启时开始、关闭后续传,结果可能混合切换前后的内容。为取得一致的副本,应重新完整请求该页面;不要把拼接结果用于判断标签或正文是否正确。