ポリシー API
概要
ポリシーはワークスペース内でエージェントができることとできないことを定義します。3つの領域をカバーします:
- コマンドルール: 実行可能なコマンドの許可/拒否パターン
- ネットワークルール: 通信先の許可リスト
- シークレットルール: どのシークレットをどのワークスペースで利用可能にするか
ワークスペースにポリシーが紐付いている場合、すべての exec 呼び出しはコマンドルールに対して評価されます。拒否された場合は 403 レスポンスが返ります。
ポリシー作成
デフォルトの安全ルール付きで新しいポリシーを作成します。
curl -X POST https://api.nanoterm.dev/api/policies \
-H 'Authorization: Bearer nt_xxx' \
-H 'Content-Type: application/json' \
-d '{
"name": "coding-agent-policy",
"description": "コーディングエージェント用の標準ルール",
"commandRules": [
{ "action": "deny", "pattern": "rm -rf /", "description": "ルート削除を防止" },
{ "action": "deny", "pattern": "sudo *", "description": "権限昇格を禁止" },
{ "action": "allow", "pattern": "npm *", "description": "npm コマンドを許可" },
{ "action": "allow", "pattern": "git *", "description": "git コマンドを許可" }
],
"networkDefault": "deny",
"networkAllowlist": [
{ "host": "registry.npmjs.org", "description": "npm パッケージ" },
{ "host": "github.com", "description": "Git リポジトリ" }
]
}'
リクエストボディ:
| フィールド | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
name | string | はい | — | ポリシー名 |
description | string | いいえ | null | 説明文 |
commandRules | CommandRule[] | いいえ | デフォルト拒否リスト | コマンドの許可/拒否ルール |
networkDefault | "allow" | "deny" | いいえ | "deny" | デフォルトのネットワーク動作 |
networkAllowlist | NetworkRule[] | いいえ | npm/github/pypi | 許可する通信先 |
secretRules | SecretRule[] | いいえ | [] | シークレットアクセスルール |
デフォルトルール
commandRules を指定しない場合、以下の拒否ルールが自動適用されます:
| パターン | 説明 |
|---|---|
rm -rf / | ルート削除の防止 |
sudo * | 権限昇格の防止 |
mkfs * | ファイルシステムフォーマットの防止 |
dd * | 生ディスク書き込みの防止 |
chmod 777 * | オープンパーミッションの防止 |
ポリシー一覧
curl https://api.nanoterm.dev/api/policies \
-H 'Authorization: Bearer nt_xxx'
レスポンス: 200 OK — PolicyInfo の配列
ポリシー更新
curl -X PUT https://api.nanoterm.dev/api/policies/pol_a1b2c3d4 \
-H 'Authorization: Bearer nt_xxx' \
-H 'Content-Type: application/json' \
-d '{
"commandRules": [
{ "action": "deny", "pattern": "rm -rf *", "description": "再帰的削除を禁止" },
{ "action": "allow", "pattern": "pytest *", "description": "テストを許可" }
]
}'
ポリシー削除
curl -X DELETE https://api.nanoterm.dev/api/policies/pol_a1b2c3d4 \
-H 'Authorization: Bearer nt_xxx'
コマンド評価
コマンドが許可されるか拒否されるかを、実際に実行せずにテストします。
curl -X POST https://api.nanoterm.dev/api/policies/pol_a1b2c3d4/evaluate \
-H 'Authorization: Bearer nt_xxx' \
-H 'Content-Type: application/json' \
-d '{"command": ["rm", "-rf", "/"]}'
レスポンス(拒否):
{
"allowed": false,
"reason": "Blocked by policy \"coding-agent-policy\": ルート削除の防止",
"matchedRule": {
"action": "deny",
"pattern": "rm -rf /",
"description": "ルート削除の防止"
}
}
レスポンス(許可):
{
"allowed": true
}
ワークスペースへのポリシー適用
ワークスペース作成時に policyId を指定します:
curl -X POST https://api.nanoterm.dev/api/workspaces \
-H 'Authorization: Bearer nt_xxx' \
-H 'Content-Type: application/json' \
-d '{
"name": "coding-agent",
"image": "ubuntu:22.04",
"policyId": "pol_a1b2c3d4"
}'
ポリシーが紐付いた状態で exec を実行すると、拒否された場合は 403 が返ります。
ルール評価の順序
- コマンドルールは順番に評価されます(最初にマッチしたルールが適用)
- どのルールにもマッチしない場合、コマンドは許可されます
- Glob パターンをサポート:
*は任意の文字列、?は1文字にマッチ
注記
より具体的なルールを先に配置してください。例えば npm test だけを許可したい場合は、allow npm test を deny npm * より前に置きます。