限时优惠

OpenClaw 制品出口与最小权限:预签名 URL、短时 STS 与 Runner 完整性校验——云 Mac 构建物入库与审计链路设计

OpenClaw openclaw
2026-05-09 约 9 分钟阅读

OpenClaw 调度到独占云 Mac Runner 后,真正的风险往往不在编译本身,而在制品离开 Runner 的那一刻:长期云密钥、过宽的桶策略、缺少清单校验的上传,都会在复盘时变成「说不清是谁写了哪段对象」。本文用工程顺序固定预签名 URL、短时 STS、完整性校验与审计字段四层,让出库链路可降级、可举证、可对照 Runbook 执行。

本文要点

  1. Runner 侧禁止存放长期云账号密钥;上传出口优先预签名 PUT短时 AssumeRole,并与repo/sha/job_id路径前缀绑定。
  2. STS 会话名、ExternalId、策略版本号写进结构化日志,拒绝「同一角色打全场」的模糊归因。
  3. 上传前生成manifest.json(逐文件 SHA-256/大小/mtime)并对 manifest 再哈希;对象存储侧用版本控制不可变前缀承接争议回放。
  4. 控制面入库事件必须记录:trace_idrunner_idpolicy_version、对象键、ETag/VersionId 与凭据指纹(截断哈希)。
办公桌上的笔记本电脑与文档,象征构建产出与安全出库流程
制品出库更适合画成「Runner → 短时凭据 → 限定前缀对象键 → 控制面入库确认」四跳;封面为氛围示意。

1. 威胁模型:把「能写桶」缩成「能写这一条键」

默认假设 Runner 进程空间可被恶意任务读取环境:任何静态 AWS_ACCESS_KEY_ID 级别密钥最终都会进日志、crash dump 或供应链投毒脚本。最小权限的第一刀是按任务颁发写权限:要么控制面为单次上传mint 预签名 URL(HTTP PUT,Content-Type 固定,过期 5–15 分钟),要么下发STS 临时会话,内联策略只允许 s3:PutObjectarn:…:prefix/${tenant}/${repo}/${sha}/…。两者都要拒绝 ListBucket 与删除类动作,除非你有单独的 GC 服务账号。

与队列容量、出口形态相关的权衡,可对照 2026 Bitrise 云 iOS 与自建云 Mac Runner:私库 CocoaPods、并行工作流、按分钟消耗与队列 P95——决策矩阵与 FAQ:把「上传并发 × 单次对象大小 × 预签名窗口」放在同一页评审材料里,避免上传风暴把边缘签发服务打满。

2. 预签名 URL:短寿命、单意图、可观测

预签名 URL 让 Runner 无需常驻云 SDK 配置:控制面验签任务后下发 URL,并同步期望对象键最大字节数。日志至少包含 upload_intent_id、签发/过期时间与签名算法;若 Runner 上报 ETag 与控制面 HeadObject 不一致,应判部分失败并走补偿,而非静默覆盖。

大目录可拆「清单 + 分块」,块键仍落在同一 sha 前缀,便于按提交列举与销毁。

3. 短时 STS:会话就是审计的第一公民

若你必须让 Runner 直接调用 SDK(例如 multipart 或需要服务端加密参数),用 AssumeRole 颁发≤15 分钟的会话,并在 RoleSessionName 嵌入 tenantjob_id(注意长度与字符集限制)。配合账户侧 sts:ExternalId 防止混淆代理人问题;IAM 策略里用条件键限制 s3:prefixaws:userid。日志侧至少打印:assumed_role_idpolicy_versionfederated_from(OIDC 主体)——这与后续法务举证对齐。

苹果生态产出若还需 codesign、公证与 stapler,上传前的「签名线程」与「出库线程」应分离,密钥边界可参考 Apple Silicon 云 Mac 上跑 iOS/macOS CI:codesign、Notarization、stapler 与密钥/钥匙串边界——可复现流水线与常见拒绝码排障表:出库层永远碰不到 p12,只提交「已签名产物的 digest 与路径声明」。

4. Runner 完整性校验:manifest 优于口头约定

在上传前由 Runner 生成 manifest.json:列出相对路径、长度、SHA-256;再对 manifest 文件本身计算 manifest_sha256。控制面入库时先校验 manifest,再接受对象列表;可选叠加代码签名或 SBOM digest,但清单哈希是底线。遇到缓存污染或并行构建写同一目录时,manifest 能在分钟级定位「哪棵文件树不该出现」。

字段 用途
upload_intent_id 绑定预签名或 STS 会话与对象键集合
manifest_sha256 入库验收与回放比对
object_version_id / ETag 对象存储版本举证
credential_fp 临时凭据指纹(截断 SHA),不存密钥材料

5. 入库与审计链路:让财务与合规读得懂

控制面对「上传完成」写入不可变事件:OIDC subrunner_idpolicy_version、对象键、manifest 与 VersionId。对外分发继续用短时 GET 签名;周期清理用独立角色,与 Builder 分离。

与 OpenClaw「队列验签、Runner 独占」一致:出库/入库都应是策略驱动,先固定字段字典再扩并发。

在云端 Mac 上,制品出库与观测更容易对齐

Apple Silicon 统一内存与低待机功耗,适合作为长期在线、独占槽位的 CI Runner;macOS 原生工具链让签名与上传脚本行为更接近开发者笔记本,减少「仅限 Linux Runner」的漂移。把预签名窗口、STS 会话名与 manifest 校验放进同一套日志与告警后,独占云 Mac 能把「哪次任务写了哪个前缀」一次说清;Gatekeeper、SIP、FileVault 叠加也让交互式排障与无人值守收敛到更可预期的攻击面。

若你正在为 OpenClaw 流水线设计可举证出库并希望审计台账可直接对齐对象存储版本,kvmboot 云端 Mac mini M4 是性价比很高的落地起点——立即了解套餐方案,让 Runner、对象存储与最小权限策略在同一台稳态机器上闭环。