バックエンド
DifySandbox
はじめに
DifySandbox(ディファイサンドボックス)
は、PythonやNode.jsなど複数のプログラミング言語に対応した、軽量・高速・安全なコード実行環境です。Dify Workflowの様々な要素(コードノード、テンプレート変換ノード、LLMノードのJinja2構文、ツールノードのコードインタプリターなど)の基盤となる実行環境として機能します。DifySandboxは、ユーザーが提供したコードを実行しつつ、システム全体のセキュリティを確保します。
特徴
- 複数言語対応:DifySandboxはSeccompというシステムレベルのソリューションをベースに構築され、複数のプログラミング言語をサポートしています。現在はPythonとNode.jsに対応しています。
- システムセキュリティ:予期せぬセキュリティ侵害を防ぐため、特定のシステムコールのみを許可する許可リストポリシーを採用しています。
- ファイルシステムの隔離:ユーザーのコードは独立した隔離されたファイルシステム環境で実行されます。
- ネットワーク隔離:
- DockerCompose環境:専用のSandboxネットワークとプロキシコンテナを使用してネットワークアクセスを提供します。これにより、内部ネットワークのセキュリティを保ちつつ、柔軟なプロキシ設定が可能になります。
- Kubernetes環境:Egressポリシーを用いて直接ネットワーク隔離戦略を設定できます。
インストール依存関係
DifySandboxプロジェクトをインストールおよび展開する前に、以下の依存関係要件を満たしていることを確認してください:
- システム依存関係
Linuxディストリビューションに応じて、以下のコマンドを実行して必要なシステムコンポーネントをインストールします:
- Ubuntu/Debian
- CentOS
- Go言語環境
Go開発環境をインストールします(Go 1.20.6以上を推奨):
インストールを確認します:
- Python環境設定
サンドボックス環境の準備
Python 3.10以上を推奨します。
事前インストール済み依存関係管理
DifySandboxには以下のPython依存関係があらかじめ設定されています:
http
- 基本的なネットワークライブラリjinja2
- LLMプロンプト処理用のテンプレートエンジンrequests
- HTTPクライアントライブラリ
カスタム依存関係の追加
追加のPython依存関係が必要な場合は、以下の手順に従ってください:
- プロジェクトのルートディレクトリにある
dependencies/python-requirements.txt
ファイルを見つけます。 - 必要なパッケージ名とバージョンをファイルに追加します。権限変更が必要な場合は、FAQを参照してください。
- DifySandboxを再構築します。
新しい依存関係を追加すると、追加の権限要件が発生する可能性があります。セキュリティへの影響を慎重に評価してください。潜在的なセキュリティリスクを完全に制御できない場合は、権限設定を変更しないことをお勧めします。
貢献
DifySandbox
の開発に参加する方法については、貢献ガイドをご参照ください。