Nucleus: セキュリティ強化された Nix ネイティブ コンテナ ランタイム

Nucleus は、Linux および NixOS 向けに特別に設計された、軽量でセキュリティが強化されたコンテナ ランタイムです。従来のコンテナ ランタイムとは異なり、Nucleus は、Nix がルート ファイルシステムを構築し、NixOS モジュールがサービスを宣言する、完全な宣言的モデルに焦点を当てており、その結果、再現可能で監査可能な実行環境を実現します。

高パフォーマンスな分離とベンチマーク

Nucleus は、従来のランタイムよりも大幅に高速な起動時間を実現し、ベアメタルに近いパフォーマンスを提供します。コールドスタートのベンチマークでは、Docker が約 500 ms であるのに対し、Nucleus は 12 ms の起動時間を達成しています。

定常状態のデータベースワークロードのパフォーマンスは、高い水準を維持しています。PostgreSQL 18 のベンチマーク (pgbench) では、Nucleus の分離はベアメタルと比較して顕著なパフォーマンス低下を示さず、一部の結果では、読み取り中心および読み取り/書き込み混合ワークロードの両方において、平均 TPS (Transactions Per Second) とレイテンシの数値がベアメタルに近い、あるいはわずかに上回る結果を示しています。

宣言的アーキテクチャと Nix 統合

Nucleus は、再現性と安定性のために Nix エコシステムを活用する、Nix ネイティブとして構築されています。

NixOS モジュール サポート

Nucleus は、コンテナを systemd サービスとして管理できる、ファーストクラスの NixOS モジュールを提供します。各コンテナは nucleus-<name>.service ユニットとして定義され、以下を含みます:

  • 自動再起動: on-failure および 5s のバックオフで設定されています。
  • Journald 統合: 標準出力と標準エラーは journald に直接キャプチャされます。
  • ワークロードのアイデンティティ: ランタイムはセットアップのために root として起動しますが、ワークロードを実行する前に、設定されたユーザー/グループに権限を降格します。
  • 強化 (Hardening): ProtectSystem=strictProtectHome=true といった systemd レベルの保護が含まれます。

再現可能なルート ファイルシステム

nucleus.lib.mkRootfs ヘルパーを使用すると、開発者は、必要なパッケージのみを含む、最小限で再現可能なルート ファイルシステムを構築できます。これにより、本番環境での可変なホストの bind mount の必要性がなくなり、ルートfs のアテステーション (起動時に .nucleus-rootfs-sha256 マニフェストを検証) を通じて、ランタイムの状態が安定し、監査可能になります。

セキュリティ モデルと強化 (Hardening)

Nucleus は、特に本番環境および厳格なエージェントモードにおいて、「フェイルクローズ (fail-closed)」のセキュリティ姿勢を採用しています。

カーネル レベルの分離プリミティブ

Nucleus は、分離のために Linux カーネルの包括的なプリミティブのスイートを活用しています:

  • Namespaces: PID, mount, network, UTS, IPC, user, cgroup, およびオプションの time 分離。
  • cgroups v2: CPU, memory, PIDs, および I/O に対する厳格なリソース制限。
  • pivot_root: ファイルシステム分離に使用されます。chroot は、基本的なエージェントモードでのみフォールバックとして利用可能です。
  • Landlock LSM: パスベースのファイルシステムアクセス制御 (Linux 5.13+)。
  • seccomp: トレースベースのプロファイル生成による Syscall ホワイトリスト フィルタリング。

gVisor 統合

セキュリティを強化するため、Nucleus は、ワークロードとホスト カーネルの間の境界をより強固にするために syscall をインターセプトするアプリケーション カーネルである gVisor (runsc) とのファーストクラスの統合を提供します。

送信 (Egress) ポリシーの強制

本番環境のブリッジモードでは、Nucleus はデフォルトで「すべて拒否 (deny-all)」の送信ポリシーを採用しています。アクセスは、CIDR または特定の DNS ドメインに対する明示的な許可リスト (allow-lists) を通じてのみ許可され、これらは起動時に解決され、コンテナのネットワーク名前空間内で iptables ルールを通じて強制されます。

サービス モード

Nucleus は、柔軟性とセキュリティのバランスをとるために、3 つの異なるモードで動作します:

特徴 Agent Mode Strict Agent Mode Production Mode
主な用途 一時的な AI エージェント ワークロード フェイルクローズな一時的ワークロード 長期稼働する NixOS サービス
セキュリティ姿勢 ベストエフォート セキュリティの低下は禁止 厳格な不変条件; フェイルクローズ
Rootfs ホストの bind mount ホストの bind mount / Rootfs 事前構築された Nix closure
ネットワーク オプションの host/bridge ネイティブ host は禁止 ネイティブ host は禁止
Cgroup 制限 オプション 必須 必須
PID 1 Init Direct exec Direct exec ゾンビプロセス回収のための Mini-init

Docker との比較

Nucleus は、Docker のドロップイン・リプレースメントではありません。それは、runcgVisor に近く、単一ホスト内でのオーケストレーション機能を持つ、強化されたサンドボックス ランタイムです。

  • イメージ なし: Nucleus は OCI イメージ、レイヤー、またはレジストリを使用しません。Nix closure を使用します。
  • デーモン なし: 直接 fork/exec を使用する単一バイナリです。切り離されたコンテナは systemd transient ユニットとして管理されます。
  • 主権的なセキュリティ: Docker がバンドルされたデフォルトを提供する場合、Nucleus は外部化された、SHA-256 で固定された seccomp, capability, および Landlock ポリシーを使用します。

マルチ コンテナ トポロジー

Nucleus には、nucleus compose コマンドが含まれており、TOML 設定を使用してマルチ コンテナ スタックを管理できます。これにより、ネットワーク、ボリューム、ボリューム、およびサービスを依存関係 DAG (Directed Acyclic Graph) で定義することができ、ヘルスチェックに基づいてサービスが正しい順序で起動および停止されることが確保されます。

形式的検証

信頼性を確保するため、Nucleus は仕様駆動開発を採用しています。状態マシンは TLA+Apalache モデルチェッカーを使用して形式的に検証されており、Rust でのモデルベーステストによって、TLA+ の仕様が実際の実装に対して検証されます。

Sources