1〜5分納品

OpenClaw 内蔵の Agent サンドボックス

$21.5 / 日〜 · 物理マシン専有
クラウド Mac を構成
ポリシー分離 操作監査 M4 · 38 TOPS

FIELD NOTE · AI Agent

OpenClaw サンドボックス実践:隔離 macOS 上で AI Agent タスクを実行

LangGraph や AutoGen、自社製 Agent をログインユーザーの shell 権限のまま動かすと、キーチェーン・SSH 秘密鍵・Mac 全体の読み書きが、予測不能なツール呼び出しチェーンに丸ごと渡る。本記事では JexMac 専有 Mac mini M4 ノード上で OpenClaw により Agent にポリシー境界を引き、最初の隔離タスクを投入し、監査ログを突き合わせる一連の流れ——コンソール開通から CLI 実行まで——を再現可能な手順として記録する。

素の Agent 実行とサンドボックス実行:権限面の差はどこにあるか

人間の開発者が SSH で Mac に入った場合、通常は ~/.ssh を誤削除したり Distribution 証明書をエクスポートしたりしない。AI Agent は挙動が異なる——shell・ファイル・ネットワークツールを呼び出すフレームワークは、デフォルトで現在の macOS ユーザーのフル権限を継承する。「リポジトリ内の TODO をスキャンして Markdown レポートを出力せよ」というタスクなら、理論上はプロジェクトディレクトリの読み取りと1つの出力ファイルだけで足りる。しかし実際には Keychain、ブラウザ Cookie、任意の外向き HTTP リクエストにも到達しうる。

コンテナ化はプロセスを隔離できるが、macOS 上では完全な Xcode ツールチェーンや Apple ネイティブフレームワークを犠牲にしがちだ。タスクごとに VM を再構築するのも、対話型 Agent ループには遅すぎる。OpenClaw は第三の道を取る:実 macOS 上で YAML ポリシーがシステムコール層で allow/deny を判定し、各判定を監査ストリームに書き込む。Agent は M4 の 38 TOPS Neural Engine でローカル推論を続けられる一方、ポリシー外の読み書きは即座にブロックされる。

本記事のデモタスクは意図的に絞っている:サンドボックス内で既存コードスナップショットに静的スキャン(rg で TODO/FIXME 検索)を実行し、ポリシーで拒否される git clone を1回試み、最後にレポートを /workspace に書き出す。成功基準は3つ——スクリプトが完走すること、監査ログに allow と deny の両方が現れること、各イベントから発火した YAML ルールを逆引きできること——である。

2.6s
デモスクリプト E2E(拒否 clone 含む)
< 80ms
ポリシーエンジン累積オーバーヘッド
3/3
CLI ヘルスチェック全コンポーネント正常
16 GB
M4 ユニファイドメモリ、推論とサンドボックス並行
実測環境の説明

ハードウェア:JexMac 日本(東京)ノード · Mac mini M4 · 10コア CPU · 16 GB ユニファイドメモリ · 256 GB NVMe · 1 Gbps 専有帯域。OS:macOS 15 Sequoia。OpenClaw CLI 0.9.x、ポリシー形式 v2。作業は SSH で完結、カーネル拡張承認ステップのみ VNC ログインを1回必要とした。

着手前:4つの前提条件を一括確認

ローカル PC は Windows / Linux / macOS いずれでもよい——SSH クライアントがあれば足りる。ただし以下4項目のいずれかが欠けると、途中で必ず止まる。

  • 納品済み JexMac インスタンス:コンソール「接続情報」に SSH アドレスとポートが表示されていること。5拠点——シンガポール、日本(東京)、韓国(ソウル)、中国香港、米国東部——は仕様・料金同一。Agent 実験は対象 API のレイテンシに合わせて近いリージョンを選ぶのが無難。
  • OpenClaw instance-token:コンソール「セキュリティとサンドボックス」で初回有効化時に生成。oct-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 形式。画面は1回限り表示のため、即座に 1Password / Bitwarden 等のシークレット管理ツールへ保存すること。
  • 作業ディレクトリ /workspace:ホスト側で事前作成。サンドボックスはこのパスを Agent の読み書き可能領域にマップする。秘密鍵や p12 をここに置かない。
  • ポリシー YAML を1つ以上:第5節に読み取り専用テンプレートを示す。原則は厳しめから始め、deny ログを見ながら段階的に権限を追加する。

コンソールで OpenClaw を有効化し instance-token を保管

OpenClaw はデフォルト OFF——各物理インスタンス独立制御で、監査が不要な用途に余計なオーバーヘッドを課さない。ブラウザ側は次の3ステップだけ、以降はすべて SSH で進める。

  1. 01
    インスタンス詳細 →「セキュリティとサンドボックス」

    JexMac コンソールにログインし、対象 Mac mini インスタンスを開いて OpenClaw スイッチ領域へ。納品直後(1〜5分以内)の場合、ステータスが「稼働中」になるまで待ってから操作する。

  2. 02
    有効化して token をコピー

    有効化をクリック、ダイアログに instance-token が表示される。シークレット管理ツールへの保存を確認したら「保存済み、続行」をクリック。token を Slack・チケット・Git コミットに貼らない。

  3. 03
    バッジが「有効」であることを確認

    30秒経っても「有効化中」のままならページをリロード。緑バッジが出ればブラウザを閉じ、以降 CLI で操作する。

SSH で CLI をインストールし3コンポーネントのヘルスチェック

SSH でインストール後、セットアップスクリプトは Apple Silicon アーキテクチャを自動判別し、M4 上では通常30秒以内で完了する。

curl -fsSL https://api.jexmac.com/openclaw/install.sh | bash
openclaw auth login --token <instance-token>
openclaw status

openclaw status で3項目すべて healthy であること:

コンポーネント 役割 期待状態
Policy Engine YAML を解析し、syscall 前に allow/deny を判定 healthy
Sandbox Runtime サンドボックスライフサイクル、プロセス分離、ディレクトリマップ healthy
Audit Bus 監査イベントを非同期書き込み、Agent メインパスをブロックしない healthy

いずれかが degraded または unavailable なら、まず openclaw doctor を実行。よくある原因は初回インストール後のシステム拡張未承認——ブラウザ VNC で接続し「システム設定 → プライバシーとセキュリティ」から許可、SSH に戻って CLI サービスを再起動する。Policy Engine が healthy でもYAML 構文が正しいとは限らない——ポリシー検証は次節で別途行う。

最小権限ポリシー:バージョン管理可能な YAML 1枚

ポリシーファイルは Agent が読めるパス、起動できるプロセス、外向き通信可否を決める。推奨ワークフロー:最初の YAML はタスクに必要な最小集合だけ開放 → タスク実行 → deny ログ確認 → 必要に応じ allow ルール追加。「全開放から事後的に締める」のではなく、deny ログ駆動で段階的に権限を広げる

以下を ~/policies/agent-readonly.yaml として保存:

apiVersion: openclaw.jexmac.com/v2
kind: SandboxPolicy
metadata:
  name: agent-readonly
spec:
  filesystem:
    allow:
      - path: /workspace
        access: [read, write]
    deny:
      - path: "**/Keychains/**"
      - path: "**/.ssh/**"
      - path: "**/Library/Cookies/**"
  process:
    allow: [git, rg, python3, zsh, bash]
  network:
    egress: deny-all

設計上の3点:deny は allow より優先——/workspace 全体が書き込み可でも deny リスト内パスはブロックされる。process.allow はプロセス名ホワイトリスト——Agent が node / npm を使うなら明示追加、さもなければ E_POLICY_DENY: process が返る。egress: deny-all は本デモで git clone を意図的に遮断し、監査ログに network deny イベントを残すため。

サンドボックス作成前に構文検証:

openclaw policy validate -f ~/policies/agent-readonly.yaml

期待出力 policy valid (0 warnings)。フィールド綴りミスや v1 旧形式は具体的な行番号付きでエラーになる。

サンドボックス作成、Agent タスク投入、結果確認

LangGraph 等のフレームワークに接続する前に、決定論的 shell スクリプトで閉ループを通すことを推奨——スクリプト挙動は予測可能で、エラー時に「ポリシー問題」と「Agent ロジック問題」を切り分けやすい。

ホスト側にエントリスクリプト /workspace/agent-entry.sh を作成:

#!/bin/zsh
set -euo pipefail
cd /workspace
git clone --depth 1 https://github.com/apple/swift-sample-code.git repo 2>/dev/null \
  || echo "clone blocked (expected)"
rg -rn "TODO|FIXME" . --glob '*.swift' > scan-report.txt 2>/dev/null || true
echo "Scan complete: $(wc -l < scan-report.txt | tr -d ' ') matches" > summary.txt
cat summary.txt

chmod +x /workspace/agent-entry.sh 後、順に実行:

  1. 01
    サンドボックス作成

    openclaw sandbox create --name agent-demo --policy ~/policies/agent-readonly.yaml

    ステータス ready で OK。同名サンドボックスの再 create は「既存」通知のみ、データは破壊されない。

  2. 02
    別 SSH セッションで監査をリアルタイム追跡

    openclaw audit tail --sandbox agent-demo --follow

    判定イベントは通常、操作後 50〜200 ms 以内にターミナルに現れる。

  3. 03
    サンドボックス内でスクリプト実行

    openclaw sandbox exec agent-demo -- /bin/zsh /workspace/agent-entry.sh

    期待出力に clone blocked (expected) を含み、summary.txt にスキャン行数が書き込まれる。

  4. 04
    サンドボックス停止

    openclaw sandbox stop agent-demo

    /workspace データはホストに残る。完全削除は --rm を付与。

外向き通信が deny のため git clone は成功しない——これは network deny を1件残すための意図的設計。rg ステップが正常完了すれば filesystem allow は正しい。東京ノードでの計測ではスクリプト全体約 2.6 秒、ポリシーオーバーヘッドは無視できるレベルだった。

監査ログフィールド:allow から deny までの読み方

監査は事後 PDF ではなく、ポリシー判定と同期するイベントストリーム。典型的な allow 記録(エントリスクリプト読み取り):

ts=2026-07-28T09:03:12.481Z
sandbox=agent-demo
syscall=open
resource=filesystem
path=/workspace/agent-entry.sh
access=read
decision=allow
policy_rule=filesystem.allow[0]
latency_us=34

policy_rule は発火した YAML ルールのインデックス。latency_us は判定のマイクロ秒コスト。対応する network deny(遮断された clone):

ts=2026-07-28T09:03:12.512Z
sandbox=agent-demo
syscall=connect
resource=network
dst=140.82.113.4:443
decision=deny
policy_rule=network.egress.deny-all
latency_us=19

本番タスクで GitHub から pull が必要なら network.egressallow-list に変更し github.com:443 を追加。validate 後 openclaw sandbox update --name agent-demo --policy ~/policies/agent-readonly.yaml でサンドボックス再作成不要。

よく使うクエリ:

  • 直近1時間の deny:openclaw audit query --decision deny --since 1h
  • パスでフィルタ:openclaw audit query --resource filesystem --path "/workspace/**"
  • SIEM 向け JSON エクスポート:openclaw audit export --sandbox agent-demo --since 24h --format json > audit.json

6つの頻出エラーと最短修正パス

エラー現象 根本原因 対処方法
auth login token 無効 コピー時に空白混入、または token ローテーション済み コンソールから再コピー;macOS では pbpaste | xxd で先頭末尾文字を確認
statusunavailable システム拡張未承認 VNC → システム設定 → プライバシーとセキュリティ → OpenClaw を許可 → サービス再起動
policy validate unknown field YAML フィールド名誤りまたは v1 形式 apiVersion: openclaw.jexmac.com/v2 を確認
E_POLICY_DENY: filesystem allow リスト外パスへアクセス audit query --decision deny でパス確認、filesystem.allow に追加
E_POLICY_DENY: process ホワイトリスト外プロセス起動 resource=process の deny を確認、process.allow にプロセス名追加
git clone タイムアウト、deny ログなし DNS 遮断、connect 未到達 ネットワークポリシーを allow-list に変更、8.8.8.8:53 またはドメインルールも許可
認証情報と複数人協業

instance-token はインスタンス高権限クレデンシャルに相当し、.env や Git への書き込み禁止。本番ではメンバーごとにゼロトラストデバイス証明書とロール(viewer / operator / admin)を設定し、同一 token を共有しない。

PoC 通過後:Agent をどの Mac で長期稼働させるか

読み取り専用サンドボックスでの検証は起点に過ぎない。実運用では Agent が xcodebuild を呼び、npm/PyPI から pull し、CI 上で PR ごとにサンドボックスを作成・破棄する——拡張パスは常にdeny ログ駆動のポリシー反復であり、権限を推測で広げることではない。

計算性能面、Mac mini M4 · 16 GB では DerivedData を含むビルドサンドボックスを2つ並行、残り約 4 GB を OpenClaw 監査とシステムサービスに割り当て可能だった。さらに負荷が増す場合、JexMac の Thunderbolt 5 並列サービスで複数 Mac mini を 80 Gbps クラスタに構成でき、各インスタンスのポリシーと監査ログは独立保存される。

専用クラウド Mac がまだないチーム向けに、代替案それぞれの弱点を整理する。ローカル MacBook を 7×24 Agent ホストにすると日常開発と干渉し、常時高負荷で熱対策も厳しい。GitHub ホスト macOS Runner は共有プールで OpenClaw ネイティブ統合がなく、ピーク時キュー待ちは対話型 Agent に不向き。自社 Mac mini 調達は購入サイクル、データセンター托管、証明書ローテ時の現場メンテが必要になる。

JexMac は専有物理 Mac mini M4(10コア · 16 GB · 256 GB NVMe · 38 TOPS)を提供し、OpenClaw は標準インスタンスに内蔵。5拠点それぞれ独立 IPv4 と 1 Gbps 帯域、支払い後 1〜5 分納品、日額 $21.5 〜・月額 $107.3、契約縛りなし。Agent 実験期は日額、ポリシー安定後に月額へ切り替えればよい。

物理マシン専有 · 1〜5分納品

隔離 macOS で最初の Agent を動かす

記事内コマンドは JexMac Mac mini M4 物理ノードで検証済み。インスタンス開通 → OpenClaw 有効化 → 本記事のポリシーでタスク投入、1時間以内に初回監査記録を確認できる。日額レンタル、PoC 終了後いつでも解放可能。

標準構成
チップApple M4 · 38 TOPS
CPU10コア(4P + 6E)
メモリ16 GB ユニファイドメモリ
ネットワーク1 Gbps 専有帯域
SLA99.9% 可用性
納品1〜5分自動開通