预览配置漂移修复

CloudflareBeginner
立即练习

简介

支持团队的预览 API 当前返回了线上配置,维护演练也拒绝预览凭据。线上环境仍然正常工作。你的任务是在不降低维护授权要求、也不改变线上行为的前提下,恢复预览环境的边界。

本独立挑战在一台全新的虚拟机中提供一个小型 Worker、两个命名的本地环境和用于测试的合成凭据。应用引导实验中介绍的配置、密钥加载和运行时测试方法。成功标准是两个本地环境都符合下面的契约,随后删除临时服务器和密钥文件。这里的 preview 和 live 仅表示本地测试环境;本挑战不需要登录 Cloudflare,也不需要部署。

恢复预览环境隔离

当前情况

准备好的项目位于 /home/labex/project/preview-drift。系统已安装 Node 22.22.0、项目本地的 Wrangler 4.131.1 和独立的测试运行时。开发服务器尚未启动。提供的处理程序实现了公开的健康检查和合成的维护演练;故障位于预览环境的公开配置和凭据加载部分。

实验范围

操作 wrangler.jsoncsrc/index.js.dev.vars.preview.dev.vars.live.gitignore。检查处理程序和配置,找出绑定契约。两个 dotenv 文件包含不同的随机测试凭据。你可以检查它们的键名,但不要显示键值。凭据必须保留在本虚拟机中,并排除在 Git 之外。

在回环地址的 8080 端口运行 preview Wrangler 环境,在 8081 端口运行 live 环境。让同时运行的两个运行时使用不同的调试器端口。使用项目本地的普通 Wrangler 开发命令;本挑战不会创建远程资源。QUEUE_LABEL 是显示字符串,不是队列服务。

目标

两个本地环境都必须公开各自预期的身份,并且只允许使用该环境配置的凭据执行维护操作。预览环境必须与线上环境隔离,同时保留现有的公开健康检查和安全失败行为。

验收标准

  • GET /health 返回状态为 ok 的 JSON。预览环境标识为 preview,队列标识为 sandbox;线上环境标识为 live,队列标识为 primary
  • 每个环境都通过处理程序的 MAINTENANCE_TOKEN 绑定加载自己的合成凭据。两个凭据值必须不同,并且不能放在源代码或公开的 Wrangler 变量中。本地 dotenv 文件只能由虚拟机用户读取,并且必须排除在 Git 之外。
  • 只有使用该环境有效的 bearer 凭据时,POST /maintenance 才返回 200,并包含 operation: dry-run 和对应的环境名称。缺少凭据、凭据无效或使用其他环境的凭据时,都必须返回 401,并包含 error: unauthorized
  • 缺少已配置的密钥时,必须安全失败,返回 503,并包含 error: maintenance_unconfigured。GET /maintenance 仍返回 405,并包含 error: method_not_allowed;未知路由仍返回 404,并包含 error: not_found
  • 响应和应用日志中不得包含任何凭据值。本步骤的两次检查期间,两个本地服务器都必须保持运行。不需要云端授权、部署、报告或复制成功标记。

提示

比较每个公开值的来源

阅读处理程序中的环境查找逻辑,然后将其与 wrangler.jsonc 中的命名环境对象进行比较。Wrangler 环境变量不会自动继承。运行时选择的环境,以及该环境内部的变量,是两个不同的概念。

调查 maintenance-unconfigured 响应

区分「缺少已配置的绑定」和「拒绝传入的凭据」。比较处理程序读取的绑定名称与环境专用 dotenv 文件中的键名。本地文件存在,并不代表它定义了处理程序读取的绑定。修改配置后,重新检查运行时是否已就绪。

保持线上行为和安全边界

从两个方向测试健康检查和维护操作。在一个环境中有效的令牌,在另一个环境中必须无效。提供的维护操作是演练,因此测试正确授权的请求不会修改应用数据。

清理工作区

当前情况

修复后的本地环境已经通过功能检查。它们的开发进程和合成凭据文件仍然保留在虚拟机中。

实验范围

只有本挑战在 8080 和 8081 端口启动的开发任务、.dev.vars.preview.dev.vars.live 文件,以及保存这些值的 Shell 变量是临时内容。保留已修复的源代码、配置、依赖项和 LabEx 服务。

目标

保留已修复的项目,同时不再留下运行中的挑战服务器或本地密钥文件。

验收标准

  • 8080 和 8081 端口都没有正在监听的开发服务器。
  • 挑战项目中不再存在任何 .dev.vars*.env* 密钥文件。
  • 清除用于保存合成凭据的 Shell 变量。这是学习者需要执行的清理操作;后端无法检查交互式 Shell 的状态。
  • 保留无关的进程和文件。本地挑战不会创建云资源或 Cloudflare 凭据,因此无需删除。

提示

定位你启动的任务

使用 Shell 的任务列表,确认两个 Wrangler 开发进程。重启服务器后,任务编号可能会变化。必须先完成功能验证,再执行清理;如果先删除密钥,前面的检查就无法得出有效结论。

总结

你将预览身份不匹配的问题追溯到命名环境的配置值,并将维护失败的问题追溯到凭据绑定名称。修复后,预览环境与线上环境重新隔离,同时保留了线上行为、公开健康检查和服务器端授权。

通过测试缺少凭据、无效凭据、跨环境凭据和有效凭据,比只验证一次成功响应更全面地确认了安全边界。最后的清理删除了本地进程和合成密钥,同时保留了已修复的项目。

✨ 查看解决方案并练习✨ 查看解决方案并练习