# 生产加固与安全恢复

> 核验版本：1.1.0；通道：stable；文档 ID：operations.security

本清单供部署/安全管理员与项目 Owner 使用。**不能仅因文档列出就执行真实修改。** 所有命令/配置示例未执行；生产密钥轮换、账号重置、网络变更和删除均须明确批准。准确解析/默认见[安全配置](../configuration/security.md)。

## 明确信任边界

Viat 执行开发者代码。不同 UID、清空环境和资源代理能减少暴露，但**不保证恶意代码不能访问网络、耗尽资源或读取所有已授资源凭据**。1.1.0 部分数据库/缓存/AMQP/S3 对象仍向脚本投射凭据。因此：

- 仅向可信作者开放其可访问资源的代码权限；互不信任的租户/负载使用独立实例、账号和网络。
- 业务账号按最小权限设置；广泛生产凭据会扩大脚本权限，日志屏蔽无法消除。
- 保留内存/PID 限制、系统调用约束与主机补丁；不挂 Docker socket、宿主根、密钥目录或无关备份到脚本可见树。
- 出口由网络策略限制。`VIAT_OUTBOUND_DENY_PRIVATE` 只是选定保存路径的主机检查，不是完整 DNS 重绑定防护或任意代码防火墙。
- Rust 编译能力属于 builder 上的特权代码执行：依赖/build script 可在运行 worker 降权前执行。

## 向用户开放前

1. 固定批准的 1.1.0 镜像/摘要，分别记录服务端/客户端版本。使用受支持主机和容器运行时并维护补丁；旧 bullseye 镜像只是过渡，不是长期安全建议。
2. 设置独立强主密钥/JWT，原主密钥独立保管并演练获取；确认启动没有开发 JWT 警告。二进制不会因危险默认值拒绝启动。
3. 非明确需要则关闭公开注册；移除初始凭据前确认可用 Owner。修改 bootstrap 密码不重置已有账号。
4. 限制管理入口，使用 HTTPS 和可信 `VIAT_PUBLIC_URL`；只有受控代理后才信任转发头。API-only 可关控制台/文档，但 API 本身仍须认证/网络策略。
5. 查 worker 身份日志：Docker 父进程 root 用于启动 10001/10001 子进程；账号缺失、UID 非法或降权关闭可让 worker 与服务器同身份。父进程改为非特权不会神奇保留不同子 UID。
6. 限制文件/监听/SQLite 根，只挂批准目录。`VIAT_WORKER_DATA_DIRS` 递归改属主，不可指向宽泛宿主目录或平台 spool。
7. 先准备登记与恢复再强制 MFA，使用最小 PAT scope，并审核实际 **operator/developer/admin/owner** 项目角色。平台角色与项目成员资格不同。
8. 指标使用随机 token 和专用网络；外部日志/追踪及负载均按敏感数据保护。私有 CA 不应通过关闭 TLS 验证解决。
9. 一致备份平台、主密钥、外部秘密/业务库/文件，并验证[隔离恢复](backup-restore.md)。

## 凭据与证书变更

| 对象 | 运维方式 | 风险 |
| --- | --- | --- |
| 平台 JWT | 批准后同步重启所有节点，再重新登录/签发受影响凭据 | 已签令牌失效，节点不一致会间歇失败 |
| 主密钥 | 保留原值；重加密/迁移须单独设计验证流程 | 只替换环境会使 AES 密文不可用，不存在自动轮换 |
| 资源凭据 | 通过授权控制台/API 修改，受控验证并协调 live/published 行为 | 部分脚本对象可读凭据，旧凭据还须 provider 撤销 |
| Vault/AWS 身份 | 轮换受限身份，保留历史引用读权限，按需重启静态客户端 | Viat 不续期 Vault token，换后端不迁移 blob |
| TLS 证书 | 原子替换匹配 PEM 对；内置 TLS 每 60 秒检查 mtime | 失败保留旧证书，须外部监控期限/实际指纹 |
| CLI/MCP 会话/PAT | 用真实认证控制撤销服务端凭据，按政策移除本地副本 | 删 `.viat/config.yaml` 不证明所有服务端凭据撤销 |

不要用宽泛 passthrough 规则传秘密。禁止表只保护特定核心名及 Cargo/SSH 前缀，**不识别所有应用秘密**。默认透传包源命名空间中的 token 也可被 worker 读取。使用无害标记验证规则，不把真实秘密打印出来。

## 怀疑泄露时

1. 记录 UTC 区间、身份/项目、请求/运行 ID、节点和镜像；私密保留日志/审计/provider 事件，不把秘密复制进工单。
2. 按事故计划隔离恶意入口、生产者和节点；取消不回滚外部提交，杀掉全部容器可能丢失易失证据。
3. 在正确控制面撤销会话/PAT/资源/provider 凭据；检查权限、发布快照、共享模块、告警目标和绑定。旧备份可复活队列/凭据。
4. 结合[控制/业务审计](audit.md)、provider 日志和资源权限判断暴露。匿名请求、部分读取和尽力日志有明确缺口，没记录不等于没行为。
5. 从批准产物重建并在隔离环境恢复，不盲拷受污染缓存/二进制或重放副作用。
6. 用已知夹具验证、正确 worker 身份、激活、探针和外部监控证明恢复，分阶段开放，记录未测依赖和根因。

## 已知保证边界

业务 PostgreSQL 资源 ssl 当前被忽略；MySQL ssl=true 为 Preferred，可回退。通过经验证数据库/代理/网络边界强制传输并验证，不把资源保存当证据，见[数据库](../configuration/database.md)。

进程内告警无法保证进程/库/出口宕机时通知，provider 接纳不代表收件人收到。审计表不独立防御 DBA，不是 WORM。租约/锁/幂等不是笼统 exactly-once/HA。按风险/合规需求明确补偿控制。
