验证范围与安全访问

“已验证”表示某份可追溯记录中的检查通过,不等于无漏洞、免维护、高可用,也不表示本站能查看你账号中的部署状态。请先了解证据覆盖范围,再按私有访问路径完成初始化。

怎样阅读验证证据

层次证明范围不能代替什么
容器验证Compose 启动、健康检查、版本断言、该套测试实际覆盖的业务行为和截图。用户 AWS 账号内的网络、权限、磁盘和访问链路。
平台引用该记录引用了有效的 AMI、CloudFormation 与运行时平台证据。该应用版本单独部署到 EC2 的实测。
生产核对声明了生产核对的候选版本须在正式切换前核对同一镜像、模板与私有访问参数。域名证书签发、完整业务验收、恢复、负载或跨版本迁移,除非报告明确给出相应证据。

容器发布门禁包含启动、健康、应用测试、版本断言、截图生成,以及截图、报告和 Manifest 的上传可读性;平台契约另行校验。查看报告中的具体测试名称及结果,不要把“首页能打开”理解为“全部业务都可用”。

主推应用的业务验收目标是:Ghost 创建管理员并发文、Uptime Kuma 创建监控并收到隔离测试通知、n8n 保存和执行工作流。容器重启后还需读回业务数据并再次操作。这是验收范围,不是对所有历史记录的追认;仅以该版本报告实际执行的测试为准,不能从截图推断测试已完成。

有生产核对声明的版本先作为候选保存,核对通过后才切换公开 current 与版本索引;失败保留旧稳定版本,不能借用旧版本的绿灯解除部署暂停。历史记录没有生产核对报告时,不应推断已完成这一步。

镜像通过完整 tag@digest 锁定,模板 revision 表示验证时模板内容的摘要。当前模板发布地址可能更新;展示历史 revision 并不代表该 URL 永远返回旧字节。生产核对必须检查模板一致性,不能用时间接近代替内容匹配。

默认路径:通过 SSM 私有访问

部署前准备

  • 在支持区域准备 AWS 账号和创建 CloudFormation、IAM、VPC、EC2、EBS、日志资源的权限,先阅读费用与清理。
  • 本机安装 AWS CLI 和 Session Manager 插件,通过你自己的组织登录或 AWS 配置完成身份验证。不要将 AWS 密钥交给本站。
  • IAM 身份需允许对目标实例启动 SSM 会话,并使用 AWS-StartPortForwardingSession 文档;实例必须出现在 Systems Manager 托管节点列表中。组织 SCP、权限边界和网络策略也可能限制访问。
  • 本机 8080 端口需空闲。无需域名,也无需开放 SSH 22 端口。

创建与初始化

  1. 在应用详情页核对版本、区域、资源规格、费用和准备清单。CloudFormation 深链默认使用 LaunchUrl=http://localhost:8080、AllowedWebCidr=127.0.0.1/32、SelfSignedTls=false,不要改成全网 HTTP 来图省事。
  2. 创建栈后等待 CREATE_COMPLETE。这表示基础设施初始化完成,不代表应用管理员已创建。创建失败时先看 Events。
  3. 在 Outputs 中复制 SSMPortForwardCommand,在本机终端执行。命令使用栈的实例 ID 与区域,将本机 8080 端口转发到实例 80 端口;保持终端会话打开。
  4. 用浏览器打开 http://localhost:8080。HTTP 仅存在于本机入口及实例回环链路,中间通过 SSM 加密传输;这不是在公网明文登录。不要把本机转发端口再共享到局域网或公网。
  5. 按应用指引创建管理员、退出并重新登录,完成一项实际任务。不同应用的后台路径与初始化方式以详情页注册说明为准,不存在全站通用的应用管理员密码。

关闭会话会中断访问,重新执行 Outputs 命令即可再连接。若 8080 被占用,先关闭自己的冲突程序;不要只改本机端口而忽略应用生成链接、回调或 Cookie 使用的 LaunchUrl。

可选路径:初始化后启用受保护的 HTTPS

此路径需要你拥有域名、可修改 DNS,并在自己的 AWS 账号中操作。它不会替你注册域名,也不会把自签名证书当作正式证书。

  1. 先通过上述私有路径完成管理员初始化。--confirm-initialized 是操作人员确认,不是脚本自动验证应用账号已创建。
  2. 将域名 A 记录直接指向实例当前公网 IPv4;移除错误的 AAAA 记录。等待公共 DNS 生效,证书 HTTP-01 验证需要直达本机,不要先套上未经验证的 CDN/反向代理。
  3. 在目标实例的安全组中核对入站:证书签发与续期需要 TCP 80 可被 ACME 服务访问;TCP 443 按预期用户来源放行。端口开放不代表应用已开放,私有 Nginx 策略仍应阻止未初始化的公网应用访问。不要开放容器原始端口或 SSH。
  4. 从 EC2 的 Connect → Session Manager 打开实例终端。将下面的示例域名、邮箱替换为自己的值,再执行:
sudo /opt/corenova/bin/enable-https.sh app.example.com [email protected] --confirm-initialized
  1. 脚本检查参数及 DNS,使用 Certbot 申请可信证书并配置续期、Nginx 与应用 URL。签发失败应保留私有配置,不能静默退回公开 HTTP;通过私有通道排查后再试。
  2. HTTPS 入口仍保留额外的代理登录保护。仅通过 SSM 在实例上读取 /opt/corenova/credentials/admin.txt,不要截图、发到工单或写入部署链接。代理账号与应用管理员是两套凭据。
  3. 从外部浏览器访问自己的 https://域名:证书无警告、未授权被拒绝、代理认证后应用可登录;检查生成链接、回调地址和 Cookie,再核对 Certbot 续期任务。HTTP 入口只能重定向 HTTPS,不能用来提交凭据。

启用后应保留 SSM 管理入口,但应用可能按其正式 HTTPS 地址重定向。带代理认证的 HTTPS 不等于匿名公开网站:Ghost 的匿名阅读、公开状态页和外部 Webhook 可能被代理认证阻止,需另行设计并验证细粒度路由,不要直接删除整站保护。

实例停止再启动后公网 IP 可能改变,DNS 必须重新核对。证书及主机配置不在数据卷快照中,恢复到新实例时需重新配置。旧实例没有上述脚本时,不要假定新文档已经改变了旧部署行为。

故障排查与退出

问题下一步
创建权限不足核对所用账号/区域、CloudFormation Events 的拒绝项、IAM 权限边界及组织策略,不要把密钥贴到网站。
回滚或初始化超时找到最早的 CREATE_FAILED 及原因;能连接 SSM 时检查 cfn-init 日志、容器状态和数据卷挂载。不要通过跳过挂载保护继续启动。
无法建立 SSM 会话确认 AWS CLI 身份、区域、插件、实例托管状态和会话权限,以及本机 8080 未占用。
公网被拒绝默认私有模式下属预期行为;使用 SSM 隧道,不要将 AllowedWebCidr 改为全网 HTTP。
HTTPS/域名失败保留私有访问;核对公共 DNS、错误 AAAA、80 端口可达性、Certbot 错误和续期任务,不要忽略证书警告。
管理员初始化失败在私有通道中查看应用日志和实际后台路径,区分代理密码与应用账号;已有数据时不要重置数据库来“重试”。

求助时只提供应用版本、区域、失败资源名、测试步骤及脱敏后的错误。日志可能含密码、令牌或连接串,不要未经审查公开。放弃部署时按清理步骤删除目标栈,并核对保留卷、快照和日志;失败和回滚也可能留下计费资源。

不在保证范围内

没有报告证据时,不声称完成真实 EC2 重启、可信证书签发续期、EBS 备份恢复、升级迁移、生产负载或安全漏洞审计。用户账号的权限、配额、网络和外部依赖仍需现场验证;主推应用的验收目标也不能代表全部目录应用具有相同覆盖。