はじめに

DifySandbox(ディファイサンドボックス)は、PythonやNode.jsなど複数のプログラミング言語に対応した、軽量・高速・安全なコード実行環境です。Dify Workflowの様々な要素(コードノード、テンプレート変換ノード、LLMノードのJinja2構文、ツールノードのコードインタプリターなど)の基盤となる実行環境として機能します。DifySandboxは、ユーザーが提供したコードを実行しつつ、システム全体のセキュリティを確保します。

特徴

  • 複数言語対応:DifySandboxはSeccompというシステムレベルのソリューションをベースに構築され、複数のプログラミング言語をサポートしています。現在はPythonとNode.jsに対応しています。
  • システムセキュリティ:予期せぬセキュリティ侵害を防ぐため、特定のシステムコールのみを許可する許可リストポリシーを採用しています。
  • ファイルシステムの隔離:ユーザーのコードは独立した隔離されたファイルシステム環境で実行されます。
  • ネットワーク隔離
    • DockerCompose環境:専用のSandboxネットワークとプロキシコンテナを使用してネットワークアクセスを提供します。これにより、内部ネットワークのセキュリティを保ちつつ、柔軟なプロキシ設定が可能になります。
    • Kubernetes環境:Egressポリシーを用いて直接ネットワーク隔離戦略を設定できます。

インストール依存関係

DifySandboxプロジェクトをインストールおよび展開する前に、以下の依存関係要件を満たしていることを確認してください:

  1. システム依存関係

Linuxディストリビューションに応じて、以下のコマンドを実行して必要なシステムコンポーネントをインストールします:

  • Ubuntu/Debian
sudo apt-get update
sudo apt-get install pkg-config gcc libseccomp-dev git wget
  • CentOS
sudo yum install pkgconfig gcc libseccomp-devel git wget
  1. Go言語環境

Go開発環境をインストールします(Go 1.20.6以上を推奨):

# Go 1.20.6をインストール
sudo apt-get install -y golang-1.20.6

インストールを確認します:

go version  # インストールされたGoバージョンを表示
  1. Python環境設定

サンドボックス環境の準備

Python 3.10以上を推奨します。

事前インストール済み依存関係管理

DifySandboxには以下のPython依存関係があらかじめ設定されています:

  • http - 基本的なネットワークライブラリ
  • jinja2 - LLMプロンプト処理用のテンプレートエンジン
  • requests - HTTPクライアントライブラリ

カスタム依存関係の追加

追加のPython依存関係が必要な場合は、以下の手順に従ってください:

  1. プロジェクトのルートディレクトリにあるdependencies/python-requirements.txtファイルを見つけます。
  2. 必要なパッケージ名とバージョンをファイルに追加します。権限変更が必要な場合は、FAQを参照してください。
  3. DifySandboxを再構築します。

新しい依存関係を追加すると、追加の権限要件が発生する可能性があります。セキュリティへの影響を慎重に評価してください。潜在的なセキュリティリスクを完全に制御できない場合は、権限設定を変更しないことをお勧めします。

貢献

DifySandboxの開発に参加する方法については、貢献ガイドをご参照ください。