セキュリティ設定
Orbiee のセキュリティは、多層防御の設計思想に基づいています。PostgreSQL RLS によるテナント分離、Clerk による認証、トークンの暗号化、監査ログによるトレーサビリティを組み合わせて、組織のデータを安全に保護します。
テナント分離(マルチテナンシー)
Section titled “テナント分離(マルチテナンシー)”PostgreSQL RLS(行レベルセキュリティ)
Section titled “PostgreSQL RLS(行レベルセキュリティ)”Orbiee では、すべての主要テーブルに tenant_id カラムを持たせ、PostgreSQL の RLS によりデータベースレベルでテナント分離を強制しています。
テナント分離は以下の 2 つのレイヤーで保証されます。
- PostgreSQL RLS: データベースレベルでの
tenant_idフィルタリング - アプリケーションレベルのフィルタ: すべての CRUD 関数で
tenant_idを必須パラメータとして要求
両方のレイヤーが同時に機能するため、一方に不具合があってもデータ漏洩を防止できます。
DB ロール設計
Section titled “DB ロール設計”| DB ロール | 権限 | 用途 |
|---|---|---|
| agent_read | 参照のみ(RLS で tenant_id 強制) | AI エージェントの読み取り |
| agent_rw_limited | drafts / proposals / tasks / agent_runs への書き込み | AI エージェントの書き込み |
| app_apply | 正テーブル(deals 等)への更新 | Proposal 承認後の Apply 処理 |
データ暗号化
Section titled “データ暗号化”OAuth トークンの暗号化
Section titled “OAuth トークンの暗号化”Google OAuth のアクセストークン・リフレッシュトークンは、Fernet 暗号化(AES-128-CBC ベース)で暗号化して保管されます。暗号化キー(TOKEN_ENCRYPTION_KEY)は環境変数で管理され、コードにハードコーディングされることはありません。
暗号化対象:
- Google OAuth アクセストークン
- Google OAuth リフレッシュトークン
- Slack 連携トークン
通信の暗号化
Section titled “通信の暗号化”すべての通信は TLS で暗号化されます。
Clerk による認証
Section titled “Clerk による認証”Orbiee は Clerk を使用して認証を管理しています。ユーザーは Google OAuth 2.0 でサインアップ・サインインします。
- パスワードの管理は Google に委託されるため、Orbiee 側でのパスワード漏洩リスクがありません
- 完全招待制のため、招待リンクがないとサインアップできません
JWT による API 認証
Section titled “JWT による API 認証”フロントエンドからバックエンドへの API リクエストには、Clerk が発行する JWT トークンが使用されます。バックエンドは JWT を検証し、ユーザー情報とテナント情報を取得します。
セッション管理
Section titled “セッション管理”セッション管理は Clerk に委託されています。
| 設定 | 値 |
|---|---|
| セッション有効期限 | 7 日間(10,080 分) |
| アイドルタイムアウト | 60 分 |
| 同時セッション | 複数デバイスからのログイン許可 |
| JWT 有効期限 | 5 分(自動更新) |
AI エージェントの安全性
Section titled “AI エージェントの安全性”書き込み制限
Section titled “書き込み制限”AI エージェント(Claude Code)が直接書き込み可能なテーブルは制限されています。
- 直接書き込み可能: drafts、proposals、tasks、agent_runs、customers、contacts
- 承認が必要: deals、activities(Proposal フロー経由)
プロンプトインジェクション対策
Section titled “プロンプトインジェクション対策”- メール本文は「命令」ではなく「データ」として扱われます
- AI エージェントの書き込み先が制限されているため、仮にインジェクションが成功しても被害が限定されます
ワークスペース隔離
Section titled “ワークスペース隔離”Heavy Worker(Claude Code)は専用のワークスペース内で実行され、ソースコード・環境変数・シークレットファイルへのアクセスが禁止されています。
ソフトデリート
Section titled “ソフトデリート”データの削除はソフトデリート(deleted_at タイムスタンプ)が基本です。ハードデリートは保持期間経過後にのみ実行されます。
入力バリデーション
Section titled “入力バリデーション”- バックエンドで Pydantic によるスキーマバリデーション
- SQLAlchemy ORM によるパラメータ化クエリ(SQL インジェクション防止)
CORS 設定
Section titled “CORS 設定”許可されたオリジンからのリクエストのみを受け付けます。
http://localhost:3000(開発環境)https://app.orbiee.jp(本番環境)
API ゲートウェイレベルでレート制限が実装されています(デフォルト: 100 リクエスト/分/ユーザー)。