Agent と人間ユーザーの権限要件は根本的に異なる
人間に SSH ログイン権限を付与すれば、必要なリソースは本人が把握している;AI Agent に同等の権限を与えると、状況はまったく異なる。
Agent フレームワーク(LangGraph、AutoGen、Cursor Background Agent など)はツール呼び出し実行時、デフォルトで現在の OS ユーザーの全権限を継承する。
「リポジトリ内の TODO コメントをすべて探し Markdown 表に整理せよ」と指示された Agent は、タスク完了に必要なのは読み取り /workspace と1つの出力ファイルを書くだけで済むはずが、
実際には同時にアクセスできる ~/Library/Keychains、SSH 秘密鍵ディレクトリの読み取り、curl による外部へのデータ送信など。
Agent が意図的に行うわけではないが、フレームワーク内蔵のワイルドカード shell ツールや外部プラグインがこの種の呼び出しを引き起こす可能性がある——しかもその際、必ずしも画面の前にいるとは限らない。
Apple M4 のアーキテクチャは、この問題を軽視するより重視する理由がある。M4 の 38 TOPS ニューラルエンジンでローカルモデル推論コストが急降下し、 Mac 上での AI Agent 実行頻度は 1 年前の 10 倍——対応するリスクウィンドウも同比例に拡大。 OpenClaw の設計思想:Agent に Docker 分離は不要(完全な Xcode ツールチェーンを失う)、 タスクごとに VM を再構築も不要(コストが高すぎる)。実 macOS 上でポリシーエンジンがシステムコール層で権限超過リクエストをインターセプト。 ポリシーファイルは普通の YAML で、Git でコードと一緒にバージョン管理。
ハードウェア:Mac mini M4 · 10 コア CPU · 16 GB 統合メモリ · 256 GB NVMe SSD · 1 Gbps 専有帯域(VPSRox シンガポールノード)。
システム:macOS 15 Sequoia。OpenClaw CLI 0.9.x、ポリシー形式 v2。
デモタスク:サンドボックス内で公開 GitHub リポジトリをクローン → rg で TODO コメントをスキャン → Markdown レポート出力。/workspace のみ読み書き、アウトバウンドネットワーク権限なし。
全工程 SSH で完了、VNC 不要。
開始前:4 つの必須前提条件
ローカルシステムへの要件はない——Windows、Linux、macOS ノート PC なら SSH クライアントがあれば十分。 ただし以下 4 項目は開始前にすべて準備済みである必要があり、そうでなければ途中で止まる。
M4 インスタンス
認証情報とポート
instance-token
(第4節にテンプレートあり)
M4 インスタンス:まだ開通していない?注文ページでノードとレンタル期間を選択、支払い後 1–5 分でインスタンス準備完了、 SSH 認証情報はコンソール「接続情報」欄に自動表示。5 ノード(シンガポール、日本東京、韓国ソウル、中国香港、米国東部) ハードウェア仕様と価格は同一。ターゲットネットワークの遅延に応じて最寄りを選択することを推奨。
instance-token:コンソール「セキュリティとサンドボックス」ページで OpenClaw を初めて有効化した際に生成され、ページには 1 回だけ表示。 すぐにチームのシークレット管理ツール(1Password、Bitwarden 等)に保存。ページを離れると元の token は再取得不可、 同じページでローテーションをトリガーするのみ(旧 token は即座に無効化)。
コンソールで OpenClaw を有効化
OpenClaw はデフォルトでは有効化されない——各インスタンスで個別に制御し、監査が不要なシーンで追加オーバーヘッドを避ける。 コンソール操作は短い。次のステップに進む前に画面上で「有効化済み」状態を確認することが目的。
-
01
インスタンス詳細ページへ
VPSRox コンソールにログインし、対象インスタンス名をクリックして詳細ページへ。 「セキュリティとサンドボックス」タブで OpenClaw スイッチ領域を見つける。
-
02
instance-token を有効化して保存
有効化スイッチをクリックすると、
instance-token(形式oct-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)がポップアップ表示。 ポップアップを閉じる前に token をシークレットストアにコピーし、保存確認後「保存済み、続行」をクリック。 -
03
ステータスが「有効」であることを確認
ポップアップを閉じると、ページの OpenClaw 領域に緑色の「有効化済み」バッジが表示される。 30 秒後も「有効化中」の場合はページを更新して再確認。 ブラウザで行う必要がある唯一の操作。
CLI インストールと 3 項目のヘルスチェック
SSH でインスタンスにログイン後、1 行コマンドで OpenClaw CLI をインストール。インストールスクリプトは macOS バージョンと CPU アーキテクチャを自動検出し、 M4 上では通常 30 秒以内に完了。
curl -fsSL https://api.vpsrox.com/openclaw/install.sh | bash
openclaw auth login --token <instance-token>
openclaw status
openclaw status は 3 コンポーネントの状態を返す。続行するにはすべて healthy である必要がある:
| コンポーネント | 役割 | 期待状態 |
|---|---|---|
| Policy Engine | YAML ポリシーを解析し、システムコール前に判断 | healthy |
| Sandbox Runtime | サンドボックスのライフサイクル、プロセス分離、ファイルマッピングを管理 | healthy |
| Audit Bus | すべての判断イベントを非同期で永続ログに書き込み、メインパスをブロックしない | healthy |
3 項目すべて緑は必要条件であり十分条件ではない——Policy Engine healthy はエンジンプロセス正常のみを意味し、
YAML 構文が正しいとは限らない。ポリシー検証は次のステップで個別に完了。
いずれかが degraded または unavailable の場合、
まず openclaw doctor で自己診断レポートを確認。一般的な原因はカーネル拡張のユーザー承認待ち——
インスタンスで「システム設定 → プライバシーとセキュリティ」を開いて承認(SSH では完了不可、VNC で短時間ログインが必要)。
最小権限 YAML:ポリシーフィールド逐行解説
ポリシーファイルは Agent がサンドボックス内で何ができて何ができないかを決定。原則は厳格から開始:
最初の YAML はタスクに必要な最小パス集合のみ開放し、監査ログの deny レコードを観察してから、
実際の必要に応じて段階的に緩和。緩いポリシーから始めて事後に厳格化しない。
以下は「公開リポジトリをクローン → 静的スキャン → レポート出力」シナリオ向けの読み取り専用テンプレート。
~/policies/quickstart-readonly.yaml に保存。
apiVersion: openclaw.vpsrox.com/v2
kind: SandboxPolicy
metadata:
name: quickstart-readonly
spec:
filesystem:
allow:
- path: /workspace
access: [read, write] # Agent writes scan report here
deny:
- path: "**/Keychains/**" # block signing certificates
- path: "**/.ssh/**" # block private keys
- path: "**/Library/Cookies/**" # block browser session data
process:
allow: [git, rg, python3, zsh, bash]
network:
egress: deny-all # no outbound in quickstart mode
いくつかの設計判断を説明。filesystem.deny は allow より優先:/workspace ディレクトリ全体に読み書き権限を開放しても、
deny リスト内のパスは依然ブロック——順序はこの優先度に影響しない。エンジンは deny を先にチェックしてから allow。
process.allow はプロセス名ホワイトリスト:リスト内の実行ファイルのみ起動可能。
Agent のツールチェーンに node や npm がある場合は同期追加が必要。そうでなければ E_POLICY_DENY: process エラー。
network.egress: deny-all は DNS クエリもブロック。初回デモでは意図的で、
監査ログに deny レコードを表示し、ポリシーエンジンが実際に動作していることを確認するため。
YAML 作成後に検証を実行し、サンドボックス作成前に構文エラーを発見:
openclaw policy validate -f ~/policies/quickstart-readonly.yaml
期待出力:policy valid (0 warnings)。パス競合やフィールド名のスペルミスがある場合、validate が具体的な行番号を表示。
初めての Agent タスクを送信:サンドボックス作成と実行
LangGraph や自社フレームワークに本格接続する前に、決定論的な shell スクリプトで完全な閉ループを実行することを推奨。 スクリプトの挙動が予測可能なので、「ポリシー判断」と「Agent ロジック」を明確に分離でき、 エラー時にポリシー修正か Agent コード修正かを判断できる。
-
01
サンドボックスを作成
openclaw sandbox create --name quickstart --policy ~/policies/quickstart-readonly.yaml
成功時はサンドボックス ID と状態readyを返す。サンドボックス作成は冪等——同名の再実行は既存を通知しエラーにならない。 -
02
別ターミナルを開き、監査ログのリアルタイム追跡を開始
openclaw audit tail --sandbox quickstart --follow
このウィンドウは閉じない——Agent 実行と監査レコードを同時に観察する必要がある。 各判断イベントは Agent 操作後通常 50–200 ms 以内に表示される。 -
03
最初のターミナルで Agent エントリースクリプトを実行
まず下記のサンプルスクリプトを
/workspace/agent-entry.shに配置(ホスト上で作成、サンドボックスに自動マッピング)、 その後サンドボックス内で実行:
openclaw sandbox exec quickstart -- /bin/zsh /workspace/agent-entry.sh -
04
タスク終了後にサンドボックスを停止
openclaw sandbox stop quickstart
停止後もワークスペースデータはホストの/workspaceに保持され、次回sandbox create時に自動マウント。 完全にクリーンアップする場合は--rmパラメータを追加。
#!/bin/zsh
set -euo pipefail
cd /workspace
# Attempt network — will be denied by policy (intentional demo)
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
network.egress: deny-all のため git clone はネットワークポリシーでブロックされ、スクリプト出力は "clone blocked (expected)"——
これは期待結果。decision: deny の network イベントを監査ログに生成し、
次節でログ構造を確認するため。スクリプトが rg ステップに到達できれば /workspace のファイルシステム権限設定は正しい。
M4 シンガポールノードでの実測では完全スクリプト(ブロックされた clone 含む)実行時間約 2.3 秒、
ポリシーエンジン判断の累計オーバーヘッド 80 ms 以下。
監査ログの読み方:各行の意味
監査ログは OpenClaw と他のサンドボックス方案の核心的な差異。事後レポートではなく、 ポリシー判断と同期して生成されるリアルタイムイベントストリームで、タスク実行中に閲覧も事後エクスポートも可能。 各レコードには固定フィールドセットがあり、フィールドの意味を理解して初めてログから問題を発見できる。
典型的な allow レコード(ファイル読み取り)の形式は次のとおり:
ts=2026-07-24T08:03:12.481Z
sandbox=quickstart
pid=8231
syscall=open
resource=filesystem
path=/workspace/agent-entry.sh
access=read
decision=allow
policy_rule=filesystem.allow[0]
latency_us=34
latency_us はポリシーエンジンが判断に要したマイクロ秒数;policy_rule は判断をトリガーした具体的な YAML ルールインデックスを指し、
どの allow または deny ルールが有効かを素早く特定できる。
deny レコード(ネットワーク遮断)の形式は次のとおり:
ts=2026-07-24T08:03:12.512Z
sandbox=quickstart
pid=8233
syscall=connect
resource=network
dst=140.82.113.4:443
decision=deny
policy_rule=network.egress.deny-all
latency_us=19
このレコードは Agent スクリプト内でブロックされた git clone に対応。
dst=140.82.113.4:443 は GitHub の IP。これに基づきポリシーに精密ホワイトリストを追加:
network.egress を allow-list に変更し github.com:443 を追加、
再 validate 後サンドボックスでポリシーを再構築(openclaw sandbox update --name quickstart --policy ...)、
サンドボックスの破棄・再作成は不要。
よく使うログクエリコマンド:
直近 1 時間のすべての deny レコードを表示:openclaw audit query --decision deny --since 1h。
パスでフィルタ:openclaw audit query --resource filesystem --path "/workspace/**"。
JSON エクスポート(SIEM や自動化スクリプト向け):openclaw audit export --sandbox quickstart --since 24h --format json > audit.json。
6 種類のよくあるエラーと切り分けの考え方
初めて使う人のほとんどが、以下の少なくとも 1 つに遭遇する。この表は実際の発生頻度順で、 各エラーに根本原因と最短修正手順を示す。全文書を読む必要はない。
| エラー現象 | 根本原因 | 最短修正 |
|---|---|---|
auth login で token 無効と表示 |
コピー時の前後空白、または token が既にローテーション済み | コンソール「セキュリティとサンドボックス」ページで再コピー;pbpaste でクリップボードに余分な文字がないか確認 |
openclaw status の項目が unavailable と表示 |
カーネル拡張のユーザー承認待ち(初回インストール時) | VNC でインスタンスにログイン → システム設定 → プライバシーとセキュリティ → OpenClaw システム拡張を承認 → CLI サービスを再起動 |
policy validate で unknown field エラー |
YAML フィールド名のスペルミス、または v1 形式の旧フィールド名を使用 | apiVersion が openclaw.vpsrox.com/v2 か確認;本文第 5 節のテンプレートを参照 |
E_POLICY_DENY: filesystem |
Agent が YAML allow リスト外のパスにアクセス | openclaw audit query --decision deny --since 1h で対象パスを特定し、必要に応じて filesystem.allow に追加 |
E_POLICY_DENY: process |
Agent が process.allow ホワイトリスト外の実行ファイルを呼び出し |
監査ログで resource=process の deny レコードを確認し、該当プロセス名をホワイトリストに追加 |
サンドボックス内の git clone がタイムアウトするが deny ログなし |
DNS 解決がブロックされたが、connect 前に deny されずタイムアウト |
--verbose で git 出力を確認;YAML ネットワーク許可リストに 8.8.8.8:53 を追加するか、ドメインホワイトリストモードを使用 |
instance-token はインスタンスの高権限認証情報に相当。コードコメント、.env ファイル、Git コミットに書き込まないこと。
本番環境で複数メンバーが接続する場合、同じ instance-token を共有するのではなく、コンソールで各メンバーに独立したゼロトラストデバイス証明書と最小権限ロール(viewer / operator / admin)を設定することを推奨。
クイック試験から安定 Agent ワークフローへ
5 分で読み取り専用サンドボックスを通すのは環境検証の出発点。本番シナリオははるかに複雑:
Agent が xcodebuild を呼ぶ(より多くのプロセスと一時ディレクトリの開放が必要)、npm や PyPI にアクセス(きめ細かなアウトバウンドネットワークホワイトリストが必要)、
CI パイプラインで各 pull request ごとにサンドボックスを自動作成・破棄(REST API または GitHub Actions 連携が必要)。
これらのシナリオに共通する拡張パス:緩いポリシーから推測するのではなく、監査ログの deny レコードでポリシー反復を駆動する。
算力について:Mac mini M4 · 16 GB 統合メモリ 1 台の実測データでは、DerivedData キャッシュ付き xcodebuild サンドボックス 2 つを安定並行実行でき、
約 4 GB を OpenClaw 監査プロセスとシステムサービス用に残せる。Agent ワークロードがさらに増加する場合、
VPSRox の Thunderbolt 5 並列サービスで複数 Mac mini を 80 Gbps 高速クラスターに構成可能。
ポリシーファイルは各インスタンスで独立管理、OpenClaw の監査ログもインスタンスごとに分離保存。
まだ専用クラウド Mac がないチーム向けに、一般的な代替方案にはいくつか明確な限界がある。 ローカル開発マシンで 7×24 バックグラウンド Agent を実行すると日常開発に干渉し、持続高負荷では冷却問題が特に顕著; パブリッククラウド macOS VM(GitHub Actions のホスト型 macOS Runner 等)は共有リソースプール、OpenClaw ネイティブ連携なし、 ピーク時のキュー待ちが対話型 Agent ワークフローに大きな影響;自社購入 Mac mini をオフィスに置く場合はハードウェア減価、 保守人件と固定グローバル IP 設定コストを負担。
VPSRox は専有物理 Mac mini M4(10 コア CPU · 16 GB 統合メモリ · 256 GB NVMe · 38 TOPS ニューラルエンジン)を提供。 OpenClaw は標準インスタンスに内蔵、追加設定不要。5 ノード(シンガポール、日本東京、韓国ソウル、中国香港、米国東部) 各々独立グローバル IPv4 と 1 Gbps 専有帯域、支払い後 1–5 分で開通、日単位 $21.8 からレンタル。 Agent 実験段階は日単位で開通、安定後は月額 $109.1 で長期利用、契約縛りなし、いつでもレンタル期間を調整可能。
AI Agent に OpenClaw 内蔵の専用クラウド Mac を
VPSRox Mac mini M4 専有ノード、OpenClaw はインスタンスに内蔵:ポリシーエンジン + サンドボックスランタイム + 監査バス、 すぐに使え、自行デプロイ不要。16 GB 統合メモリと 38 TOPS ニューラルエンジンで Agent 推論と macOS ツールチェーンを並行実行、 全世界 5 ノード独立 IPv4、日単位レンタル、契約縛りなし。