セキュリティ
概要
Neotaskはセキュリティファーストのアーキテクチャで設計されています。GatewayはデフォルトでLocalhostにバインドされ、すべての機密データは保存時に暗号化され、エージェントの実行は分離されたコンテナでサンドボックス化できます。
ネットワークセキュリティ
デフォルトのループバック
バインディングモードを明示的に変更しない限り、Gatewayは127.0.0.1(localhost)のみでリッスンします。デフォルトでは外部ネットワークへの露出はありません。
認証
すべてのWebSocket接続には認証が必要です:
- トークン認証, ベアラートークン(UUIDまたはカスタム文字列)
- パスワード認証, Bcryptハッシュ化されたパスワード
- 信頼されたプロキシ, リバースプロキシからの事前認証ヘッダー
- ローカルトラスト, ループバック接続は暗黙的に信頼
リモートアクセスのセキュリティ
リモートアクセスには、推奨アプローチはTailscale VPNまたはSSHトンネリングです, , Gatewayをインターネットに直接公開しないでください。
デバイスペアリング
ペアリングの仕組み
Gatewayに接続するすべてのクライアントはペアリングが必要です:
- デバイスがIDを提示(フィンガープリント + 公開鍵)
- Gatewayがペアリングチャレンジ(ノンス)を発行
- デバイスが秘密鍵でノンスに署名
- UIを通じてデバイスを承認
- Gatewayが将来の接続のためのデバイストークンを発行
トラストモデル
- ローカルデバイス(ループバック)は利便性のために自動承認
- ローカル以外のデバイスは明示的な承認が必要
- デバイストークンはローカルに保存され、再接続時に再利用
- デバイスはいつでも取り消し可能
暗号化
保存時のデータ
- AES-256-GCM, すべてのトークン、シークレット、APIキーは保存時に暗号化
- マシン由来のキー, デバイスIDからscryptで派生した暗号化キー
- 平文保存なし, トークンは平文で保存されることはない
転送中のデータ
- TLS, API通信のためのHTTPS
- WSS, Gateway接続のためのWebSocket Secure(Tailscale Serveまたはリバースプロキシを使用する場合)
- HMAC署名, ノンスとタイムスタンプによるリクエストの整合性
サンドボックス化
Dockerベースの分離
エージェントコマンドの実行はDockerコンテナでサンドボックス化できます:
- エージェントごとのプロファイル, 各エージェントが独自のサンドボックス設定を持てる
- リソース制限, 設定可能なCPU、メモリ、タイムアウト制限
- ネットワーク分離, コンテナはネットワーク分離が可能
- ファイルシステム制限, エージェントはワークスペースのみアクセス可能
- カスタムイメージ, 特定のツールがインストールされた既製イメージを使用
サンドボックススコープ
| スコープ | 説明 |
|---|---|
| セッションごと | セッションごとに新しいコンテナ |
| エージェントごと | エージェントごとに永続コンテナ |
| 共有 | エージェント間で共有コンテナ |
ワークスペースアクセス
サンドボックス化されたエージェントはワークスペースディレクトリ(コンテナにマウントされる)にアクセスできますが、ワークスペースの外側のホストファイルシステムにはアクセスできません。
実行承認
ノードとGatewayホストでエージェントが実行できるコマンドを制御します:
モード
| モード | 説明 |
|---|---|
| 許可リスト | 事前承認されたコマンドのみ実行 |
| 質問 | 不明なコマンドはユーザー承認を求める |
| フル | 制限なし(慎重に使用) |
ノードごとの設定
各ノード(macOS、ヘッドレスホスト)はローカルに保存された独自の実行承認設定を持ちます。特定のバイナリ(例:/usr/bin/docker、/usr/local/bin/terraform)を許可しながら他のすべてをブロックすることができます。
エレベーテッドモード
一部の操作はGatewayホスト上で直接実行する必要があります(サンドボックス内ではなく)。エレベーテッドモードは:
- エージェント設定での明示的な権限によってゲーティング
- Gatewayホストのみで利用可能
- デフォルトでは無効
- ロギングによる監査が可能
セキュリティ監査
組み込みのセキュリティ監査が確認するもの:
- 設定ファイルの権限(600であるべき)
- セッションファイルの権限
- Node.jsのバージョン(セキュリティパッチ)
- 平文シークレットの検出
- プラグイン許可リストの検証
- オープンネットワークインターフェースの監査
- 認証設定の完全性
許可を与えると多くの問題を自動的に修正できます。
ベストプラクティス
- GatewayをLoopbackに保つ, リモートアクセスにはTailscaleまたはSSHを使用
- サンドボックス化を有効にする, エージェントコマンドをDockerコンテナで実行
- 実行許可リストを使用する, エージェントがノードで実行できるコマンドを制限
- 認証トークンを設定する, ループバックであっても常にトークン認証を設定
- エージェント権限を確認する, 可能な限り最小限のツールプロファイルを使用
- Neotaskを最新に保つ, アップデートにはセキュリティパッチが含まれる
- 定期的に監査する, セキュリティ監査を実行して設定ミスを発見
- プラグインの読み込みを制限する, 信頼できるプラグインのみインストール