本文要点
- Runner 侧禁止存放长期云账号密钥;上传出口优先预签名 PUT 或短时 AssumeRole,并与
repo/sha/job_id路径前缀绑定。 - STS 会话名、ExternalId、策略版本号写进结构化日志,拒绝「同一角色打全场」的模糊归因。
- 上传前生成
manifest.json(逐文件 SHA-256/大小/mtime)并对 manifest 再哈希;对象存储侧用版本控制或不可变前缀承接争议回放。 - 控制面入库事件必须记录:
trace_id、runner_id、policy_version、对象键、ETag/VersionId 与凭据指纹(截断哈希)。

1. 威胁模型:把「能写桶」缩成「能写这一条键」
默认假设 Runner 进程空间可被恶意任务读取环境:任何静态 AWS_ACCESS_KEY_ID 级别密钥最终都会进日志、crash dump 或供应链投毒脚本。最小权限的第一刀是按任务颁发写权限:要么控制面为单次上传mint 预签名 URL(HTTP PUT,Content-Type 固定,过期 5–15 分钟),要么下发STS 临时会话,内联策略只允许 s3:PutObject 到 arn:…: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 嵌入 tenant 与 job_id(注意长度与字符集限制)。配合账户侧 sts:ExternalId 防止混淆代理人问题;IAM 策略里用条件键限制 s3:prefix 与 aws:userid。日志侧至少打印:assumed_role_id、policy_version、federated_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 sub、runner_id、policy_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、对象存储与最小权限策略在同一台稳态机器上闭环。