Pi エージェント サンドボックス チュートリアル: Docker、OpenShell、および Gondolin 権限の分離を選択する方法

Pi Agent Sandbox チュートリアル: Docker、OpenShell、および Gondolin 権限の分離から選択する方法。構成、検証、権限境界、フェイルバック、長期保守について説明します。

Pi Agent によるこのチュートリアルでは、タイトルの特定のタスクのみを扱います。 Pi は、デフォルトで起動ユーザーのファイル、プロセス、ネットワーク、および資格情報のアクセス許可を継承します。 Docker、Gondolin、OpenShell は異なる信頼境界に対応するため、インストールの難易度のみに基づいて選択することはできません。

以下のすべての操作は、最初に、ループバックアドレスのみでリッスンするテストリポジトリ、テスト アカウント、またはサービスに配置されます。コマンド内のドメイン名、ユーザー名、パス、およびキーはプレースホルダーであるため、実行前に置き換える必要があります。

まず、デフォルトで Pi がアクセスできる境界を描画します

このセクションでは、「Pi がデフォルトでアクセスできる境界を最初に描画する」という問題を解決します。まず現在の状態を記録し、次に最小限のアクションを実行し、最後に独立した証拠で結果を確認します。

Pi エージェントの場合、判断基準は次のとおりです。Pi は、デフォルトで起動ユーザーのファイル、プロセス、ネットワーク、および資格情報のアクセス許可を継承します。 Docker、Gondolin、OpenShell はさまざまな信頼境界を解決するため、インストールの難易度のみに基づいて選択することはできません。この段階で誤ってさらに許可を開かないでください。

1
2
3
whoami
Get-Location
Get-ChildItem Env: | Select-String -Pattern 'KEY|TOKEN'

実行後にコマンド出力とタイムスタンプを保持します。出力が現在のターミナルの一時変数に依存している場合は、新しいターミナルを開いて再度確認してください。

3 つの絶縁方式の違い表

次の順序で処理します。

  1. 実際のバージョンと現在の構成を読み取ります。
  2. このセクションに関連する設定を 1 つだけ変更します。
  3. 読み取り専用または取り消し可能なリクエストを実行します。
  4. ログ、終了コード、および最終ファイルを確認します。
  5. 失敗した場合は、以前の変更を元に戻します。
1
docker version

ここでの完了基準は、インターフェイスが表示されることではなく、「3 つの分離スキームの差異表」に再現可能な結果があることです。

Docker は 1 回限りの倉庫タスクに適しています

何を確認するか 許容可能なパフォーマンス 停止する必要がある信号
Docker は 1 回限りの倉庫タスクに適しています 入出力スコープをクリア 他のプロジェクトまたはアカウントに自動的に展開される
権限 タスクを完了するために必要な権限のみを取得します 管理者権限またはフルキーが必要
ログ 見つけられなかったため、感度が解除されました トークン、Cookie、またはプライベート テキストが表示される
ロールバック 以前の状態に戻すことができます 変更は元に戻すことができず、バックアップはありません。
1
docker run --rm -it -v ${PWD}:/workspace -w /workspace node:22 bash

表に停止信号が表示されたら、まずこのセクションの変更を元に戻し、後続の自動化を続行しないでください。

読み取り専用マウントと書き込み可能マウントを分離する方法

「読み取り専用マウントと書き込み可能マウントを分ける方法」を中心に成功サンプルと失敗サンプルを用意します。成功したサンプルでは通常のパスが検証され、失敗したサンプルでは制限が実際に有効かどうかが検証されます。

1
docker run --rm -it -v ${PWD}:/workspace:ro -w /workspace node:22 bash

以下の4項目を記録することをお勧めします。

  • 実行前バージョンまたは Git コミット。
  • 実際の入力。秘密の値は記録されません。
  • 観察可能な出力、ステータス コード、または差分。
  • 回復アクションと回復後の結果の確認。

失敗の原因がまだ不明な場合は、一度に 1 つの変数のみを変更してください。ポート、ランタイム、プロバイダー、およびプロキシを同時に変更しないでください。

プロバイダーキーをコンテナーに注入するリスク

このセクションでは、「プロバイダー キーをコンテナーに挿入するリスク」について説明します。まず現在の状態を記録し、次に最小限のアクションを実行し、最後に独立した証拠で結果を確認します。

Pi エージェントの場合、判断基準は次のとおりです。Pi は、デフォルトで起動ユーザーのファイル、プロセス、ネットワーク、および資格情報のアクセス許可を継承します。 Docker、Gondolin、OpenShell はさまざまな信頼境界を解決するため、インストールの難易度のみに基づいて選択することはできません。この段階で誤ってさらに許可を開かないでください。

1
docker run --rm -it --env-file .env.agent node:22 bash

実行後にコマンド出力とタイムスタンプを保持します。出力が現在のターミナルの一時変数に依存している場合は、新しいターミナルを開いて再度確認してください。

Gondolin がホスト認証を保持するのはなぜですか?

次の順序で処理します。

  1. 実際のバージョンと現在の構成を読み取ります。
  2. このセクションに関連する設定を 1 つだけ変更します。
  3. 読み取り専用または取り消し可能なリクエストを実行します。
  4. ログ、終了コード、および最終ファイルを確認します。
  5. 失敗した場合は、以前の変更を元に戻します。
1
pi

ここでの完了基準は、インターフェイスが表示されることではなく、「ゴンドリンがホスト認証を保持する理由」に再現可能な結果が得られることです。

OpenShell はポリシー制御の実行に適しています

何を確認するか 許容可能なパフォーマンス 停止する必要がある信号
OpenShell はポリシーの制御された実行に適しています。入出力スコープをクリア 他のプロジェクトまたはアカウントに自動的に展開される
権限 タスクを完了するために必要な権限のみを取得します 管理者権限またはフルキーが必要
ログ 見つけられなかったため、感度が解除されました トークン、Cookie、またはプライベート テキストが表示される
ロールバック 以前の状態に戻すことができます 変更は元に戻すことができず、バックアップはありません。
1
pi

表に停止信号が表示されたら、まずこのセクションの変更を元に戻し、後続の自動化を続行しないでください。

不正アクセスが実際に拒否されていることを確認する

「不正な読み取りが本当に拒否されることを確認する」あたりの成功サンプルと失敗サンプルを用意します。成功したサンプルでは通常のパスが検証され、失敗したサンプルでは制限が実際に有効かどうかが検証されます。

1
docker run --rm -v ${PWD}:/workspace:ro node:22 sh -lc 'touch /workspace/should-fail'

以下の4項目を記録することをお勧めします。

  • 実行前バージョンまたは Git コミット。
  • 実際の入力。秘密の値は記録されません。
  • 観察可能な出力、ステータス コード、または差分。
  • 回復アクションと回復後の結果の確認。

失敗の原因がまだ不明な場合は、一度に 1 つの変数のみを変更してください。ポート、ランタイム、プロバイダー、およびプロキシを同時に変更しないでください。

ポートを閉じるだけでなく、送信ネットワークを制限する

このセクションでは、「単にポートを閉じるのではなく、送信ネットワークを制限する」ことについて説明します。まず現在の状態を記録し、次に最小限のアクションを実行し、最後に独立した証拠で結果を確認します。

Pi エージェントの場合、判断基準は次のとおりです。Pi は、デフォルトで起動ユーザーのファイル、プロセス、ネットワーク、および資格情報のアクセス許可を継承します。 Docker、Gondolin、OpenShell はさまざまな信頼境界を解決するため、インストールの難易度のみに基づいて選択することはできません。この段階で誤ってさらに許可を開かないでください。

1
docker network ls

実行後にコマンド出力とタイムスタンプを保持します。出力が現在のターミナルの一時変数に依存している場合は、新しいターミナルを開いて再度確認してください。

コンテナ内の Git ID と送信の所有権

次の順序で処理します。

  1. 実際のバージョンと現在の構成を読み取ります。
  2. このセクションに関連する設定を 1 つだけ変更します。
  3. 読み取り専用または取り消し可能なリクエストを実行します。
  4. ログ、終了コード、および最終ファイルを確認します。
  5. 失敗した場合は、以前の変更を元に戻します。
1
2
git config user.name
git config user.email

ここでの完成基準はインターフェースの見た目ではなく、「コンテナ内での Git ID とサブミッションの所有権」の再現可能な結果です。

タスク終了後に残っているプロセスとファイルを確認する

何を確認するか 許容可能なパフォーマンス 停止する必要がある信号
タスク後に残っているプロセスとファイルを確認する 入出力スコープをクリアする 他のプロジェクトまたはアカウントに自動的に展開
権限 タスクを完了するために必要な権限のみを取得します 管理者権限またはフルキーが必要
ログ 見つけられなかったため、感度が解除されました トークン、Cookie、またはプライベート テキストが表示される
ロールバック 以前の状態に戻すことができます 変更は元に戻すことができず、バックアップはありません。
1
2
docker ps -a
git status --short

表に停止信号が表示されたら、まずこのセクションの変更を元に戻し、後続の自動化を続行しないでください。

ミッションのリスクに基づいてサンドボックスを選択する

「ミッションリスクに応じたサンドボックスの選択」を中心に成功サンプルと失敗サンプルを用意。成功したサンプルでは通常のパスが検証され、失敗したサンプルでは制限が実際に有効かどうかが検証されます。

1
docker version

以下の4項目を記録することをお勧めします。

  • 実行前バージョンまたは Git コミット。
  • 実際の入力。秘密の値は記録されません。
  • 観察可能な出力、ステータス コード、または差分。
  • 回復アクションと回復後の結果の確認。

失敗の原因がまだ不明な場合は、一度に 1 つの変数のみを変更してください。ポート、ランタイム、プロバイダー、およびプロキシを同時に変更しないでください。

ホスト Git リポジトリを読み取り専用でマウントします

このセクションでは、「ホスト Git リポジトリの読み取り専用マウント」について説明します。まず現在の状態を記録し、次に最小限のアクションを実行し、最後に独立した証拠で結果を確認します。

Pi エージェントの場合、判断基準は次のとおりです。Pi は、デフォルトで起動ユーザーのファイル、プロセス、ネットワーク、および資格情報のアクセス許可を継承します。 Docker、Gondolin、OpenShell はさまざまな信頼境界を解決するため、インストールの難易度のみに基づいて選択することはできません。この段階で誤ってさらに許可を開かないでください。

1
docker run --rm -v ${PWD}:/workspace:ro node:22 ls -la /workspace

実行後にコマンド出力とタイムスタンプを保持します。出力が現在のターミナルの一時変数に依存している場合は、新しいターミナルを開いて再度確認してください。

書き込み可能なタスクは独立したワークツリーを使用します

次の順序で処理します。

  1. 実際のバージョンと現在の構成を読み取ります。
  2. このセクションに関連する設定を 1 つだけ変更します。
  3. 読み取り専用または取り消し可能なリクエストを実行します。
  4. ログ、終了コード、および最終ファイルを確認します。
  5. 失敗した場合は、以前の変更を元に戻します。
1
git worktree add ..\pi-task -b agent/pi-task

ここでの完了基準はインターフェイスの外観ではなく、再現可能な結果を伴う「独立したワークツリーを使用した書き込み可能なタスク」です。

切断されたコンテナがパブリック ネットワークにアクセスできないことを確認する

何を確認するか 許容可能なパフォーマンス 停止する必要がある信号
切断されたコンテナがパブリック ネットワークにアクセスできないことを確認します。入力範囲と出力範囲が明確です 他のプロジェクトまたはアカウントに自動的に展開
権限 タスクを完了するために必要な権限のみを取得します 管理者権限またはフルキーが必要
ログ 見つけられなかったため、感度が解除されました トークン、Cookie、またはプライベート テキストが表示される
ロールバック 以前の状態に戻すことができます 変更は元に戻すことができず、バックアップはありません。
1
docker run --rm --network none node:22 node -e "fetch('https://example.com').catch(e=>console.log(e.code))"

表に停止信号が表示されたら、まずこのセクションの変更を元に戻し、後続の自動化を続行しないでください。

サンドボックスを破棄した後にホストの残留物を確認する

「サンドボックス破壊後のホスト残存確認」を中心に成功サンプルと失敗サンプルを用意します。成功したサンプルでは通常のパスが検証され、失敗したサンプルでは制限が実際に有効かどうかが検証されます。

1
2
docker ps -a
git status --short

以下の4項目を記録することをお勧めします。

  • 実行前バージョンまたは Git コミット。
  • 実際の入力。秘密の値は記録されません。
  • 観察可能な出力、ステータス コード、または差分。
  • 回復アクションと回復後の結果の確認。

失敗の原因がまだ不明な場合は、一度に 1 つの変数のみを変更してください。ポート、ランタイム、プロバイダー、およびプロキシを同時に変更しないでください。

Pi エージェントに関するよくある質問

テスト環境をスキップして、公式プロジェクトで Pi Agent を直接使用することはできますか?

お勧めしません。まず、少なくとも 1 つの最小限の成功リクエスト、1 つの意図的な失敗、および 1 つの回復訓練を完了します。

Pi Agent コマンドは実行できますが、結果が正しくありません。最初にどこを確認すればよいですか?

まず入力範囲、実際の有効構成、および上流の応答を確認し、次にモデルの概要を確認します。プロセスが正常であっても、ビジネス結果が正しいとは限りません。

Pi Agent のキーまたはトークンが Git に入るのを防ぐにはどうすればよいですか?

システム環境変数、シークレット管理、またはプロジェクト外部の構成ファイルを使用し、コミットする前に差分を検索します。侵害が発見された後は、キーをローテーションする必要があります。

Pi Agent をアップグレードするときに見逃しがちなことは何ですか?

最も見逃しやすいのは、構成形式、デフォルトのリスニング アドレス、アクセス許可の範囲、キャッシュの互換性です。アップグレードする前に、バージョンと検証サンプルを保存してください。

Pi エージェントの受け入れに関する問題

完了すると、次の質問に答えられるようになります。

  • 正確にどのバージョンを使用していますか?
  • どのディレクトリ、ポート、アカウント、外部サービスにアクセスできますか?
  • 成功結果を元のデータまたは Git diff に戻すにはどうすればよいですか?
  • アップストリームに障害が発生した場合、エラーが報告されるか、再試行されるか、または切り替えられますか?
  • キーがログまたは履歴に表示される可能性はありますか?
  • 10分以内に修正前の状態に戻すにはどうすればよいですか?

これらのいずれかに回答できない場合、Pi Agent はまだトライアル状態にあるため、権限を拡張したり、運用自動化を利用したりすべきではありません。