エグゼキュータ
エグゼキュータ
Section titled “エグゼキュータ”コマンドエグゼキュータは制御された環境で外部プロセスを実行します。2つのエグゼキュータタイプが利用可能:ネイティブOSプロセスとDockerコンテナ。
エントリ種別
Section titled “エントリ種別”| 種別 | 説明 |
|---|---|
exec.native | ホストOS上で直接コマンドを実行 |
exec.docker | Dockerコンテナ内でコマンドを実行 |
ネイティブエグゼキュータ
Section titled “ネイティブエグゼキュータ”ホストオペレーティングシステム上で直接コマンドを実行します。
- name: shell kind: exec.native default_work_dir: /app default_env: PATH: /usr/local/bin:/usr/bin:/bin LANG: en_US.UTF-8 command_whitelist: - git status - git diff - npm run build| フィールド | 型 | デフォルト | 説明 |
|---|---|---|---|
default_work_dir | string | - | すべてのコマンドの作業ディレクトリ |
default_env | map | - | 環境変数(コマンドごとのenvとマージ) |
command_whitelist | string[] | - | 設定された場合、これらの正確なコマンドのみ許可 |
Dockerエグゼキュータ
Section titled “Dockerエグゼキュータ”分離されたDockerコンテナ内でコマンドを実行します。
- name: sandbox kind: exec.docker image: python:3.11-slim default_work_dir: /workspace network_mode: none memory_limit: 536870912 cpu_quota: 50000 auto_remove: true read_only_rootfs: true no_new_privileges: true cap_drop: - ALL tmpfs: /tmp: rw,noexec,nosuid,size=64m volumes: - /app/data:/workspace/data:ro| フィールド | 型 | デフォルト | 説明 |
|---|---|---|---|
image | string | 必須 | 使用するDockerイメージ |
host | string | unixソケット | DockerデーモンURL |
default_work_dir | string | - | コンテナ内の作業ディレクトリ |
default_env | map | - | 環境変数 |
command_whitelist | string[] | - | 許可されるコマンド(完全一致) |
network_mode | string | bridge | ネットワークモード:host、bridge、none |
volumes | string[] | - | ボリュームマウント:host:container[:ro] |
user | string | - | コンテナ内で実行するユーザー |
memory_limit | int | 0 | メモリ制限(バイト、0 = 無制限) |
cpu_quota | int | 0 | CPUクォータ(100000 = 1 CPU、0 = 無制限) |
auto_remove | bool | false | 終了後にコンテナを削除 |
read_only_rootfs | bool | false | ルートファイルシステムを読み取り専用に |
no_new_privileges | bool | false | 権限昇格を防止 |
cap_drop | string[] | - | 削除するLinuxケーパビリティ |
cap_add | string[] | - | 追加するLinuxケーパビリティ |
pids_limit | int | 0 | 最大プロセス数(0 = 無制限) |
tmpfs | map | - | 書き込み可能パス用のtmpfsマウント |
コマンドホワイトリスト
Section titled “コマンドホワイトリスト”両方のエグゼキュータタイプがコマンドホワイトリストをサポート。設定された場合、完全一致のコマンドのみ許可されます:
command_whitelist: - ls -la - cat /etc/passwdホワイトリストにないコマンドはエラーで拒否されます。
Lua API
Section titled “Lua API”Execモジュールがコマンド実行を提供します:
local exec = require("exec")
local executor, err = exec.get("app:shell")if err then return nil, err end
local proc = executor:exec("git status", { work_dir = "/app/repo"})
local stdout = proc:stdout_stream()proc:start()local output = stdout:read()proc:wait()
stdout:close()executor:release()