メインコンテンツへスキップ

概要

Jinba Toolboxは、組織ベースの隔離を中心とした多層的なセキュリティモデルを実装しています。ToolSet、Tool、Version、Run、APIキー、Webhookなど、すべてのリソースは組織に属し、ロールベースアクセス制御(RBAC)、認証済みセッションまたはAPIキー、データベースレベルのテナント隔離によって保護されます。

認証

Jinba Toolboxは、それぞれ異なるアクセスパターン向けに設計された2つの認証方法をサポートしています:

セッションベース(Web)

管理Webコンソールで使用されます。セッションCookieを使用したBetter Authで動作します。
  • Cookieベースのセッション管理
  • ToolSetを管理する人間のユーザー向け
  • 組織リソースへの完全なCRUDアクセス

APIキー(プログラム)

SDK、AIエージェント、外部統合で使用されます。Bearerトークンとして渡します。
  • Authorization: Bearer jtb_xxxxxxxxxxxx
  • 自動化およびプログラムアクセス向け
  • 単一の組織にスコープ

APIキーの管理

APIキーは組織にスコープされ、発行者を追跡します:
Organization
└── API Keys
    ├── production   (issued by: alice)   Last used: 2 hours ago
    ├── development  (issued by: bob)     Last used: 30 days ago
    └── ci-cd        (issued by: alice)   Last used: never
主なプロパティ:
  • デフォルトでは有効期限なし — キーは手動で削除するまで有効です。
  • 最終使用日時が各キーに記録されます。
  • 発行者の追跡 — キーを作成したメンバーが記録されます。
  • 監査ログ — キーの作成・削除イベントがログに記録されます。
キーを発行したメンバーが組織を離れても、統合の中断を避けるためキーはアクティブなまま維持されます。管理コンソールには警告が表示され、OwnerまたはAdminがキーを引き継いだり再生成したりできます。

APIキーエンドポイント

メソッドエンドポイント説明
GET/v1/orgs/:orgId/api-keysAPIキー一覧の取得
POST/v1/orgs/:orgId/api-keysAPIキーの作成
DELETE/v1/orgs/:orgId/api-keys/:keyIdAPIキーの削除

ロールベースアクセス制御(RBAC)

ロール階層

Jinba Toolboxは2つのレベルでロールを定義しています:
Platform Level
└── super_admin          # サービス全体の管理

Organization Level
├── Owner                # 組織のオーナー(組織ごとに1名)
├── Admin                # 組織の管理者
└── Member               # 一般メンバー

組織ロール

ロール説明
Owner移転や削除を含む組織の完全な制御権を持つ。組織ごとに1名のOwner。
Adminメンバー、課金、すべての組織リソースを管理可能。組織の削除はできない。
MemberToolSetとToolの作成・管理が可能。他のメンバーや課金の管理はできない。

権限マトリックス

リソースOwnerAdminMember
組織設定CRUD読み取り / 更新読み取り
組織の削除不可不可
メンバー管理CRUDCRUD読み取り
メンバーの招待不可
ToolSet / ToolCRUDCRUDCRUD
APIキー(自分の)CRUDCRUDCRUD
APIキー(他者の)CRUDCRUD不可
クレジット購入不可
クレジット残高の確認読み取り
監査ログ読み取り読み取り不可

ロールのルール

  • 各組織には正確に1名のOwnerがいます。
  • オーナーシップは別のメンバーに移転できます(元のオーナーはAdminになります)。
  • OwnerとAdminのみが新しいメンバーを招待できます。
  • Memberは自分のAPIキーを管理できますが、他者が作成したキーを参照・削除することはできません。

組織ベースの隔離

Jinba Toolboxのすべてのリソースは組織にスコープされています。隔離は複数のレイヤーで強制されます:

アプリケーションレイヤー

APIサーバーは、リクエストを処理する前に、認証済みユーザーまたはAPIキーが対象の組織に属していることを検証します。これにより、データベースクエリに何らかの設定ミスがあったとしても、アプリケーションレイヤーが不正アクセスをブロックします。

データベースレイヤー(Row Level Security)

PostgreSQL Row Level Security(RLS)は、データベースレベルで追加のテナント隔離レイヤーを提供します:
ALTER TABLE tool_set ENABLE ROW LEVEL SECURITY;

CREATE POLICY tool_set_tenant_isolation ON tool_set
  USING (organization_id = current_setting('app.current_org_id'));
動作の仕組み:
1

リクエストが到着する

APIサーバーがリクエストを認証し、組織IDを判定します。
2

セッション変数を設定する

クエリを実行する前に、サーバーがPostgreSQLのセッション変数を設定します:
SET app.current_org_id = :orgId
3

RLSが行をフィルタリングする

PostgreSQLが自動的にすべてのクエリ結果をフィルタリングし、現在の組織に属する行のみを返します。
RLSで保護されるテーブル:
  • tool_set
  • tool
  • tool_set_version
  • run
  • apikey
  • webhook
  • audit_log
この多層的なアプローチ(アプリケーション + データベース)により多層防御を実現しています。アプリケーションチェックをバイパスするバグがあったとしても、データベース自体がクロステナントのデータアクセスを防止します。

監査ログ

組織内の重要なアクションは監査ログに記録されます:
カテゴリイベント
APIキー作成、削除
メンバー追加、削除、ロール変更
ToolSet公開、公開Versionの変更
設定組織設定の変更、Webhook設定の変更
Toolの実行は、完全な入出力ログとともに runs テーブルで別途追跡されます。

監査ログのデータモデル

interface AuditLog {
  id: string;
  orgId: string;
  userId: string;         // アクションを実行したユーザー
  action: string;         // 例: "member.added"
  targetType: string;     // 例: "member"
  targetId: string;       // 影響を受けたリソースのID
  details: object;        // 変更の詳細
  ipAddress: string;
  createdAt: Date;
}

監査ログの閲覧

監査ログは、Webコンソールの /org/:orgId/settings/audit-logOwnerおよびAdminロールが閲覧可能です。ログは無期限で保持されます。

Sandboxの隔離

Toolの実行は、隔離されたSandbox環境(E2BまたはDaytona)で行われます。各実行は新規または再開されたSandboxインスタンスで実行され、以下の特性を持ちます:
  • プロセスの隔離 — 各Sandboxは個別のコンテナまたはVMです。
  • ネットワークの隔離 — SandboxはAPIサーバーの内部ネットワークにアクセスできません。
  • 設定可能な環境変数 — シークレットはToolSetごとに注入され、ToolSet間で共有されません。
  • 自動クリーンアップ — 実行完了またはタイムアウト後にSandboxは終了されます。

ベストプラクティス

  • 環境ごとに異なるAPIキーを使用する(本番、ステージング、CI/CD) — キーが漏洩した場合の影響範囲を限定するためです。
  • APIキーの使用状況を監査する — 最終使用日時を定期的に確認し、不要になったキーは削除してください。
  • 最小権限のロールを割り当てる — Toolの作成・編集のみが必要な開発者にはMemberを使用してください。
  • 監査ログを定期的に確認する — 予期しないアクセスパターンを検出するためです。
  • 組織間でAPIキーを共有しない — 各キーは単一の組織にスコープされています。

関連ドキュメント