DifySandbox

はじめに

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

特徴

  • 多言語サポート: DifySandboxは、システムレベルのソリューションであるSeccomp(システムコールを制限するLinuxカーネルのセキュリティ機能)を基盤として構築されており、複数のプログラミング言語に対応しています。現在、PythonとNode.jsをサポートしています。

  • システムセキュリティ: 特定のシステムコールのみを許可するホワイトリスト方式を採用し、予期せぬセキュリティ侵害を防止します。

  • ファイルシステムの分離: ユーザーコードは、ユーザーごとに隔離されたファイルシステム環境で実行されます。

  • ネットワーク分離:

    • Docker Compose環境: 専用のSandboxネットワークとプロキシコンテナを活用してネットワークアクセスを制御し、内部システムのセキュリティを維持しつつ、柔軟なプロキシ設定オプションを提供します。

    • Kubernetes(K8s)環境: 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の開発に参加する方法については、貢献ガイドをご参照ください。

Last updated