セキュリティとサンドボックス化
サンドボックス vs ツールポリシー vs 高度モード
OpenClawには、関連するが異なる3つの制御があります:
- サンドボックス (
agents.defaults.sandbox.*/agents.list[].sandbox.*) は、ツールがどこで実行されるか(Docker vs ホスト)を決定します。 - ツールポリシー (
tools.*,tools.sandbox.tools.*,agents.list[].tools.*) は、どのツールが利用可能/許可されるかを決定します。 - 高度モード (
tools.elevated.*,agents.list[].tools.elevated.*) は、サンドボックス化されているときにホスト上で実行するための exec専用のエスケープハッチ です。
クイックデバッグ
インスペクタを使用して、OpenClawが実際に何をしているかを確認します:
openclaw sandbox explain
openclaw sandbox explain --session agent:main:main
openclaw sandbox explain --agent work
openclaw sandbox explain --json
以下の内容を出力します:
- 有効なサンドボックスモード/スコープ/ワークスペースアクセス
- セッションが現在サンドボックス化されているかどうか(メイン vs 非メイン)
- 有効なサンドボックスのツール許可/拒否(およびそれがエージェント/グローバル/デフォルトから来たものかどうか)
- 高度モードのゲートと修正キーのパス
サンドボックス: ツールが実行される場所
サンドボックス化は agents.defaults.sandbox.mode によって制御されます:
"off": すべてがホスト上で実行されます。"non-main": 非メインセッションのみがサンドボックス化されます(グループ/チャネルでの一般的な「驚き」)。"all": すべてがサンドボックス化されます。
完全なマトリックス(スコープ、ワークスペースマウント、イメージ)については、サンドボックス化を参照してください。
バインドマウント(セキュリティクイックチェック)
docker.bindsはサンドボックスのファイルシステムを貫通します:マウントしたものは、設定したモード(:roまたは:rw)でコンテナ内から見えます。- モードを省略した場合のデフォルトは読み書き可能です。ソース/シークレットには
:roを推奨します。 scope: "shared"はエージェントごとのバインドを無視します(グローバルバインドのみが適用されます)。/var/run/docker.sockをバインドすると、事実上ホストの制御をサンドボックスに渡します。意図的にのみ行ってください。- ワークスペースアクセス (
workspaceAccess: "ro"/"rw") はバインドモードとは独立しています。
ツールポリシー: どのツールが存在するか/呼び出し可能か
2つのレイヤーが重要です:
- ツールプロファイル:
tools.profileとagents.list[].tools.profile(基本許可リスト) - プロバイダーツールプロファイル:
tools.byProvider[provider].profileとagents.list[].tools.byProvider[provider].profile - グローバル/エージェントごとのツールポリシー:
tools.allow/tools.denyとagents.list[].tools.allow/agents.list[].tools.deny - プロバイダーツールポリシー:
tools.byProvider[provider].allow/denyとagents.list[].tools.byProvider[provider].allow/deny - サンドボックスのツールポリシー(サンドボックス化されている場合のみ適用):
tools.sandbox.tools.allow/tools.sandbox.tools.denyとagents.list[].tools.sandbox.tools.*
経験則:
denyが常に優先されます。allowが空でない場合、他のすべてはブロックされたものとして扱われます。- ツールポリシーはハードストップです:拒否された
execツールを/execで上書きすることはできません。 /execは、許可された送信者に対するセッションのデフォルトを変更するだけで、ツールへのアクセスを付与しません。プロバイダーツールキーは、provider(例:google-antigravity)またはprovider/model(例:openai/gpt-5.2)のいずれかを受け入れます。
ツールグループ(短縮形)
ツールポリシー(グローバル、エージェント、サンドボックス)は、複数のツールに展開される group:* エントリをサポートします:
{
tools: {
sandbox: {
tools: {
allow: ["group:runtime", "group:fs", "group:sessions", "group:memory"],
},
},
},
}
利用可能なグループ:
group:runtime:exec,bash,processgroup:fs:read,write,edit,apply_patchgroup:sessions:sessions_list,sessions_history,sessions_send,sessions_spawn,session_statusgroup:memory:memory_search,memory_getgroup:ui:browser,canvasgroup:automation:cron,gatewaygroup:messaging:messagegroup:nodes:nodesgroup:openclaw: すべての組み込みOpenClawツール(プロバイダープラグインを除く)
高度モード: exec専用の「ホスト上で実行」
高度モードは追加のツールを付与しません。exec にのみ影響します。
- サンドボックス化されている場合、
/elevated on(またはelevated: trueを指定したexec)はホスト上で実行されます(承認がまだ適用される場合があります)。 - セッションのexec承認をスキップするには
/elevated fullを使用します。 - すでに直接実行している場合、高度モードは事実上何もしません(ゲートは適用されます)。
- 高度モードはスキルスコープではなく、ツールの許可/拒否を上書きしません。
/execは高度モードとは別です。許可された送信者に対して、セッションごとのexecデフォルトを調整するだけです。
ゲート:
- 有効化:
tools.elevated.enabled(およびオプションでagents.list[].tools.elevated.enabled) - 送信者許可リスト:
tools.elevated.allowFrom.<provider>(およびオプションでagents.list[].tools.elevated.allowFrom.<provider>)
高度モードを参照してください。
一般的な「サンドボックス監獄」の修正
「ツールXがサンドボックスのツールポリシーによってブロックされました」
修正キー(いずれか1つを選択):
- サンドボックスを無効化:
agents.defaults.sandbox.mode=off(またはエージェントごとにagents.list[].sandbox.mode=off) - サンドボックス内でツールを許可:
tools.sandbox.tools.deny(またはエージェントごとのagents.list[].tools.sandbox.tools.deny)から削除する- または
tools.sandbox.tools.allow(またはエージェントごとのallow)に追加する
「これはメインだと思っていましたが、なぜサンドボックス化されているのですか?」
"non-main" モードでは、グループ/チャネルキーはメインではありません。メインセッションキー(sandbox explain で表示)を使用するか、モードを "off" に切り替えてください。