この記事の要点
- 長寿命クラウド鍵は Runner に渡さない: アップロード許可はコントロールプレーンで発行し、Runner が触るのは単用途 URL か分数単位のロールセッションに限定する。
- プリサイン URL は爆半径削減に強い: バケット・プレフィックス・HTTP メソッド・チェックサム系ヘッダ・有効期限を縛り、ログにはクエリ文字列ではなく
grant_idを載せる。 - STS 型フローは会計と相性がよい: External ID 付き assume-role、
tenant_id/pipeline_idのセッションタグ、Runner リース寿命との強制同期。 - 整合性はマニフェストで語る: ダイジェスト、署名鍵 ID、Runner アテステーションをアーティファクト版ごとに一行の構造化行へまとめる。

1. 脅威モデル:攻撃者が本当に欲しいもの
侵害された Runner が REST を丁寧に叩くことは稀です。環境変数を吸い、CI シークレットを拾い、ログに転がったトークンを再生します。シェル権限があっても攻撃者が得られるのはせいぜい短い窓で所定プレフィックスへ書き込める権限であり、リース内から新しい許可をミントできない状態を目指します。つまりアップロード認可(コントロールプレーン)と転送の機構(Runner)を分離し、ゲストに恒久的 IAM ユーザーを置かないことです。
Apple プラットフォーム成果物では codesign や Notarization がすでに秘密境界を強制しますが、汎用バイナリにも同じ規律が効きます。Webhook から Runner までの入口側で列を揃える話は OpenClaw コールバックとクラウド Mac Runner の連携:低信頼の受信検証、実行分離、べき等リトライ——可観測性と監査フィールドの設計 とセットで読むと、入口ログと成果物ログを同じ語彙で結べます。
2. プリサイン URL と短命 STS セッション
プリサイン URLは認可判断をコントロールプレーン側へ閉じ込めます。Runner が受け取るのはポリシー(メソッド、オブジェクトキー、オプションで SSE-KMS、コンテンツ長上限)が焼き込まれた不透明な URL です。シークレットを環境に常駐させないぶん漏えい面は縮みますが、ワイルドカードキーや長すぎる TTL を許すと意味がありません。
STS 型フェデレーション(クラウドベンダの assume-role、CI IdP からの OIDC、独自ブローカー)はマルチパート転送や多数オブジェクト、動的キー命名が要るときに向きます。runner_lease_id にセッションを結び付け、想定ジョブ時間+わずかな余裕だけ寿命を与え、テナント単位のタグを付けて CloudTrail 系ログを検索可能に保ちます。環境間で同一 External ID を回し reuse しない——静かに爆半径が合体します。
| パターン | 向く場面 | 注意点 |
|---|---|---|
| プリサイン PUT/POST | オブジェクト少数・キー固定・Runner ロジック最小 | 時計ずれで期限切れ、URL 全文ログ、チェックサム未強制 |
| 短命ロール/セッション | マルチパート、動的マニフェスト、キャッシュ層が多い | 過剰な信頼ポリシー、リースより長生きセッション |
| ハイブリッド | 大物はマルチパート用ロール、メタデータは小さなプリサイン JSON | 両経路で監査フィールドが食い違う |
権限を漏らさずにログる
構造化ログには grant_id、バケット正規化プレフィックス、発行者プリンシパル、アップロード開始時点の残 TTL を載せ、プリサインのクエリ文字列は載せません。STS なら role_arn、セッション名、タグ集合。署名 CA のローテは公開スケジュールで管理し、「14:03 UTC にどの trust chain が生きていたか」をチケット発掘なしで答えられるようにします。
3. 「昇格」前の Runner 整合性
ビルド出力は、アップロード完了の前に集めたエビデンスで固定されるまで信頼しません。SHA-256 以上のダイジェスト、任意で Sigstore 型署名、Git のコミット SHA、ツールチェーン版、OpenClaw のジョブ/ワークフロー ID。クライアントはストアが検証できる Content-SHA256 等を送り、途中改ざんは静かな破損ではなくハード失敗にします。
GPU/RAM 逼迫でコンパイルが不安定になると、ネットワークを疑いがちですが実態はメモリ競合であるケースも多く、整合性チェック自体がノイズだらけになります。Runner のサイズ感とテレメトリを先に整えることで検証を信じられる状態に近づけます。観測と劣化の話は Apple Silicon クラウド Mac Runner のメモリスパイクと swap 運用:コンパイル・Docker・Xcode が同居するときの観測指標、劣化戦略、プランのメモリ境界 がそのまま補助線になります。
4. 取り込みパイプラインと監査チェーン
三つのレコードを同期させます。(1) 許可発行——誰がどのスコープでアップロードを承認したか。(2) Runner アテステーション——ダイジェストマニフェストとリースメタデータ。(3) ストレージ ACK——バケットのバージョン ID や ETag。artifact_id を OpenClaw イベント全体で運び、Webhook 消費者と SIEM が同じ語彙を共有します。
イミュータブルログがスクショに勝ちます。JSON を既存の保持階層へ流し、プリサインクエリはマスクし、署名素材はフィンガープリントだけを残します。「パイプライン途中でバイナリがすり替わり得たか?」への答えは、コントロールプレーン・Runner エージェント・オブジェクトストアのアクセスログに揃ったタイムスタンプで返せるべきです。
5. まとめ
成果物エグレスの最小権限は地味な配管——短い TTL、タイトなプレフィックス、マニフェスト——ですが、クラウド Mac Runner を持ち歩く管理者鍵だらけにしないための本体です。コントロールを OpenClaw のジョブテンプレートに早めに焼き込みましょう。インシデント後の deny-by-default ACL 追設より日初から閉じた方が速く静かです。
クラウド Mac なら、狭いエグレスと Apple Silicon の吞吐が噛み合う
ユニファイドメモリを十分に割り当てた Apple Silicon Runner は Xcode アーカイブを高速に回せます。macOS は OIDC やキーチェーンと馴染みがよく、アップロードと署名アイデンティティが同一リースに共存しやすい環境でもあります。専用のクラウド Mac mini層で並列度を安定させれば、プリサイン TTL や STS セッション長をタイトに決めてもジョブが頻繁にあふれません。
OpenClaw 駆動のビルドをロックダウンとメータリングがはっきりしたホストへ載せ替えたいなら、kvmboot のクラウド Mac mini M4 は現実的な第一歩です——プランと料金を確認することで、成果物ポリシーを実際に支配できるハードと揃えやすくなります。