メインコンテンツまでスキップ

ポリシー 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 リポジトリ" }
]
}'

リクエストボディ:

フィールド必須デフォルト説明
namestringはいポリシー名
descriptionstringいいえnull説明文
commandRulesCommandRule[]いいえデフォルト拒否リストコマンドの許可/拒否ルール
networkDefault"allow" | "deny"いいえ"deny"デフォルトのネットワーク動作
networkAllowlistNetworkRule[]いいえnpm/github/pypi許可する通信先
secretRulesSecretRule[]いいえ[]シークレットアクセスルール

デフォルトルール

commandRules を指定しない場合、以下の拒否ルールが自動適用されます:

パターン説明
rm -rf /ルート削除の防止
sudo *権限昇格の防止
mkfs *ファイルシステムフォーマットの防止
dd *生ディスク書き込みの防止
chmod 777 *オープンパーミッションの防止

ポリシー一覧

curl https://api.nanoterm.dev/api/policies \
-H 'Authorization: Bearer nt_xxx'

レスポンス: 200 OKPolicyInfo の配列

ポリシー更新

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 が返ります。

ルール評価の順序

  1. コマンドルールは順番に評価されます(最初にマッチしたルールが適用)
  2. どのルールにもマッチしない場合、コマンドは許可されます
  3. Glob パターンをサポート: * は任意の文字列、? は1文字にマッチ
注記

より具体的なルールを先に配置してください。例えば npm test だけを許可したい場合は、allow npm testdeny npm * より前に置きます。