Skip to content

fix(system): resolve R01-R18 review findings across security, data, lifecycle and UX - #52

Merged
tyrchen merged 5 commits into
masterfrom
fix/system-review-r01-r18
Sep 7, 2026
Merged

fix(system): resolve R01-R18 review findings across security, data, lifecycle and UX#52
tyrchen merged 5 commits into
masterfrom
fix/system-review-r01-r18

Conversation

@tyrchen

@tyrchen tyrchen commented Sep 7, 2026

Copy link
Copy Markdown
Owner

解决系统审查 R01–R18:安全、数据正确性、生命周期与开发者体验

对照 specs/rustack-system-review.md 的 18 项审查发现,在本分支完成全部修复;原审查段落保留为历史,逐项实现/验证/已知边界记录见 specs/rustack-system-hardening-impl-plan.md §8。

安全边界

  • R02/R03:所有 HTTP adapter 统一 AuthMode fail-closed(严格验签缺凭据即拒绝);普通 SigV4 校验实际收到字节的摘要而非请求声明;S3 的 UNSIGNED-PAYLOAD 与流式签名走独立受限策略并验证 chunk/trailer 链;重复/畸形哈希头拒绝;日志与错误不出现签名材料。
  • R04:CloudFront/API Gateway 上游客户端不跟随任何重定向、不继承环境代理,连接/请求有截止;回归覆盖 25 组 30x(绝对/相对/协议相对/IPv6)第二上游零请求。
  • R01:Lambda FunctionName/Qualifier/ARN 在 resolver/store/导入边界独立校验,逻辑名不进入文件系统路径;ZIP 不可变 staged artifact,路径/symlink/CRC/大小/条目数校验后才发布引用。
  • R05BudgetedBody 帧级字节/总时长/空闲预算;控制面 16 MiB vs S3 对象 5 GiB 流式;网关连接+在飞信号量,许可持有到响应体结束;健康/诊断保留通道不占业务许可。

数据正确性

  • R07/R08:DDB 唯一操作门下 prepare→不可失败 commit→提交后 stream;10 分钟幂等 token(SHA-256 指纹、满容量不淘汰有效项、无部分写入/重复 stream);quiesce 排空已准入 blocking 工作后再快照。
  • R09/R10:SQS DLQ manager/actor 移交(无跨 actor 等待、失败恢复不丢消息、毒消息不阻塞后续健康消息);FIFO 结构化 dedup 键(Queue vs Group+Id 分空间)。
  • R15:Events 保留完整 SqsParameters,unsupported 参数/目标显式拒绝(不再静默丢弃);SNS/Events 明确 unavailable/unsupported;有界、受监督、panic 隔离的投递与统计(API 接受 ≠ 投递成功)。

生命周期

  • R06/R11/R12:Lambda 全局 32/每函数 8/Event 128/reserved=0 拒绝/Event 载荷 1 MiB;发布版本复用不可变 artifact、warm 指纹含 revision;坏更新保留旧版与旧 warm;原生子进程 kill-on-drop + 收割,quiesce 超时即取消并 reaping(不等 900 s)。
  • R13/R14:SIGINT/SIGTERM → 停接入 → Events/SNS→DDB→Lambda→SQS quiesce → 快照 → 并行停止,共享 deadline(默认 30 s);快照加排他锁、staged fsync 后原子发布、.previous 代际崩溃恢复,失败不再静默以空启动。

配置与体验

  • R16RUSTACK_CONFIG YAML + 环境 + 默认三层校验(未知键/坏值/别名冲突/未知服务/严格认证缺凭据均启动失败);裸进程默认监听 127.0.0.1,容器显式 0.0.0.0;bind 与 advertised endpoint 分离。
  • R17/_health/{live,ready}/_localstack/health/_rustack/capabilities;探针走真实 HTTP 状态 + 有界 JSON 解析(≤64 KiB/3 s),不再字符串子串匹配。
  • R18:修正 -p rustack-p rustack-cli --bin rustack 与 README 示例;能力/持久化声明降级为诚实表述;新增 docs/runtime-hardening.md 操作与能力指南;依赖升级 quick-xml 0.41/h2/quinn-proto/anyhow 修复审计通告。

兼容与迁移影响

  • 裸进程默认监听从 0.0.0.0:4566 改为回环;需要全网监听请设 GATEWAY_LISTEN=0.0.0.0:4566(容器已内置该值)。
  • Lambda 默认执行器 Disabled:Invoke 会明确报错而不是 echo 成功;需要执行必须显式 LAMBDA_EXECUTOR=native(可信主机执行,非沙箱)。
  • 用户删除 rust-toolchain.toml 的本地改动未纳入本 PR(按用户要求保留删除);提交内固定工具链沿用基线。

验证

  • cargo +1.98.1 check --workspace --all-targets --all-features 通过。
  • cargo +1.98.1 test --workspace --all-features --exclude rustack-integration:119 组 1683 项全部通过(含真实原生 Lambda A/B/warm/Event 收割与 S3 17 MiB 流式等回归)。
  • cargo +nightly fmt --check 通过;strict clippy 通过(显式允许基线已存在的 unused-async-trait-impl/result_large_err 两存量类别,不在本次领域改动范围)。
  • cargo audit exit 0(仅 dev/test 的 aws-sdk-s3 → lru 0.16.4 警告,修复需 sdk ≥1.145 超出本仓库保留工具链);cargo deny ok。
  • 真实进程冒烟:SIGTERM 下快照保存→重启→DynamoDB 表与数据恢复。
  • 独立 reviewer 数据域 4 项 P2 已修复并复验;本机无 docker,Dockerfile 重写未实机构建。

已知边界(如实公开)

  • rustack-integration(需要运行中 server 的 aws-sdk 套件)按仓库约定不纳入默认 workspace 测试;用真实进程冒烟覆盖代表性路径。
  • 全部使用显式 +1.98.1 验证;不修改/不恢复本地工具链删除。

独立审查与已知边界(更新)

  • 两轮独立只读审查(数据域 4 项 P2;运行时域 1 项 P1 + P2/P3;HTTP/认证/Lambda 域 5 项 P2)均已处理:Dockerfile 不再 COPY 本地已删除的 rust-toolchain.toml(改用 rust:1.95-slim 内置工具链);Lambda Invoke 超时提为可配置预算 budgets.lambdaInvokeSeconds;健康 JSON 为 disabled/disabled-executor 显式状态且探针接受 disabled;RUST_LOG 走配置 facade;快照 load 校验快照名并清理中断残留;S3 严格模式在落盘前快速拒绝缺失/未知凭据(回归断言零字节读取);APIGW 遗留记录无 timeout 时强制总 wall-clock 截止;停机 deadline 用尽改为显式报错说明(kill_on_drop 兜底收割子进程)。
  • 仍未在本次范围内修复、如实记录的边界:响应发送侧停滞客户端无独立写 idle deadline(见 docs/runtime-hardening.md 边界说明);Lambda artifact 长期运行的引用计数 GC 未实现(cleanup 仅在删除函数时释放直接引用,建议作为后续项);严格模式错误可区分性/重复 signed header 逗号合并属 AWS parity 差距。无 docker 环境未实机构建镜像;rustack-integration(需运行中 server)仍按仓库约定在 PR 分支手动运行即可。

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

…ifecycle and UX

- auth: internal AuthMode fail-closed on every adapter; verify actual payload digest;
  S3 streaming/unsigned markers get narrow policies with trailer validation; redact signatures
- http: BudgetedBody frame/byte/idle/total budgets; per-request S3 5GiB streaming vs 16MiB
  control; CF/APIGW proxies disable redirects and environment proxy; remove unsafe projection
- lambda: validated identifiers/ARNs, immutable staged artifacts, immutable published
  revisions, warm fingerprint, global/per-function admission, bounded Event set, Event 1MiB,
  native child kill-on-drop with reaping; Disabled/Docker explicit errors
- ddb/sqs/events/sns: serialized prepare/commit isolation, 10-min idempotency tokens,
  recoverable DLQ manager/actor handoff, structured FIFO dedup keys, full SqsParameters,
  supervised bounded delivery with explicit unavailable/unsupported
- runtime: validated YAML+env settings (RUSTACK_CONFIG), fail-closed credentials/services,
  loopback default bind, gateway admission surviving response bodies, health-only reserved
  connections, SIGINT/TERM quiesce->snapshot->stop with shared deadline, snapshot exclusive
  lease + previous-generation crash recovery + fsync publish, structured bounded probe,
  capabilities registry; explicit Runtime shutdown_timeout(0)
- docs/ops: README/Makefile/Dockerfile/docs runtime-hardening guide; dep updates
  quick-xml 0.41, h2 0.4.19, quinn-proto, anyhow 1.0.104
@tyrchen
tyrchen force-pushed the fix/system-review-r01-r18 branch from 52071f9 to 2e5d904 Compare September 7, 2026 21:26
@tyrchen
tyrchen merged commit 28778a0 into master Sep 7, 2026
34 checks passed
@tyrchen
tyrchen deleted the fix/system-review-r01-r18 branch September 7, 2026 23:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant