ObjectOS
參考

安全與合規

保護什麼、如何保護、誰負責 —— 供安全評審。

本頁面面向安全評審者、IT 管理員,以及需要回答"引入它安全嗎?"的任何人。

一句話威脅模型

ObjectOS 作為單個 Node.js 程序執行在的網路內,與的資料庫通訊,從不回傳。被攻破的爆炸半徑即其連線的資料庫上的資料 —— 僅此而已。

資料駐留

資料類別存放在是否離開你的網路?
業務記錄你的資料庫
使用者賬戶、會話、OAuth token你的資料庫
審計日誌你的資料庫
設定、API key你的資料庫 / 你的金鑰管理器
上傳檔案你的磁碟或 S3 相容儲存桶
遙測/使用資料不收集

ObjectOS 零外發呼叫,除非你顯式配置(OIDC discovery、郵件提供商、AI 提供商、webhook 目標、外部儲存)。它不回傳、不查 license server、不輪詢更新。

加密

機制責任方
傳輸中(瀏覽器 ↔ ObjectOS)TLS,在你的 edge / ingress 終結
傳輸中(ObjectOS ↔ 資料庫)驅動級 TLS(Postgres sslmode=require、MongoDB tls=true……)你 —— 設定連線字串
靜態(業務資料)資料庫原生(如 Postgres TDE、RDS encryption)
靜態(上傳檔案)儲存原生(S3 SSE、R2 預設、磁碟級 FDE)
DB 中金鑰(settings、OIDC client secret)由 settings 服務加密ObjectOS
會話 cookie / tokenOS_AUTH_SECRET 進行 HMAC 簽名ObjectOS
API key 值DB 中雜湊儲存 —— 洩露的 DB 行無法重建 keyObjectOS

認證

內建(通過 @objectstack/plugin-auth,基於 Better Auth):

  • 帶驗證 + 重置的郵箱/密碼
  • 帶撤銷的會話管理
  • Social OAuth(Google、GitHub、Microsoft、Apple……)
  • 企業 OIDC/SSO(Okta、Entra ID、Keycloak、Ping)
  • 雙因素(TOTP)
  • Passkey / WebAuthn
  • 魔法連結
  • 手機號 + 簡訊 OTP 登入與密碼重置(通過 auth.plugins.phoneNumber 顯式開啟;支援阿里雲 / Twilio 通道,自帶限流)
  • CLI/瀏覽器裝置流
  • API key(雜湊、可過期、可撤銷、繫結到使用者)
  • 面向 MCP 客戶端的自助 OAuth 2.1(授權碼 + PKCE、動態客戶端註冊、按 scope 推導許可權上限)
  • 管理員直接建立使用者與批次匯入(一次性密碼 + must_change_password 強制輪換)

認證

授權

分層強制(通過 @objectstack/plugin-security),遵循許可權模型 v2(ObjectStack 13,ADR-0090):

  1. 物件許可權 —— 每個許可權集對每個物件的 CRUD,直接分配給使用者或通過扁平的崗位分發
  2. 組織級預設值(OWD) —— 帶所有者的自定義物件預設 private 共享模型;匿名資料訪問預設拒絕
  3. 行級安全 —— 注入查詢的宣告式策略表示式;不可選
  4. 欄位級安全 —— 響應中剝離欄位 / 寫入時拒絕(鍵帶物件限定,由校驗規則強制)
  5. 組織作用域 —— 多租戶隔離;繞過需要顯式 viewAllRecords

系統上下文操作繞過檢查以便內部作業 / 遷移可執行 —— 這些路徑可審計。

配套機制:

  • 解釋引擎 —— explain(principal, object, operation) 按層報告判定結果並逐層歸因,與強制執行使用相同的求值器(構造上不漂移)。
  • 編寫期校驗 —— os compile 以安全態勢閘門構建(security-owd-unsetsecurity-anchor-high-privilegesecurity-fls-unqualified-key 等);可選提交 access-matrix.json 快照,任何能力漂移都會讓 CI 失敗,直到顯式重新批准。
  • 委託管理 —— 許可權集可攜帶 adminScope,子管理員只能在其業務單元子樹內、按白名單管理分配,且記錄 granted_by 審計。
  • MCP 許可權上限 —— 通過 OAuth 接入的 AI 代理在 effective_permission = scope_ceiling ∩ user_grants 下執行(data:read / data:write / actions:execute),失敗即關閉。

許可權

審計與證據

當審計能力被載入時(@objectstack/plugin-audit):

  • 每個物件上的每次 CRUD 操作 → 審計行。
  • 欄位變更的前後值。
  • 認證、許可權授予、會話撤銷事件。
  • 審計行不可變:不能修改,只能歸檔。
  • 保留期在物件的 lifecycle 塊上宣告(sys_audit_log 出廠為熱存 90 天后歸檔),可通過 lifecycle.retention_overrides 按環境調整;與你的 DB 歸檔策略配合。

這是 SOC 2 CC6/CC7、ISO 27001 A.12.4、HIPAA §164.312(b) 和 GDPR Article 30 的證據基礎。

合規框架

ObjectOS 提供每個常見框架所要求的技術原語。認證是部署的屬性,而非軟體的屬性 —— 但控制項對映清晰:

框架ObjectOS 提供
SOC 2訪問控制(CC6)、變更管理(審計日誌)、加密(部署)、監控(可觀測性)、備份(operate/backup)
ISO 27001A.5 政策(RBAC)、A.8 資產管理(物件目錄)、A.9 訪問控制、A.12 運營、A.18 合規
HIPAA訪問控制(§164.312(a))、審計控制(§164.312(b))、完整性(不可變審計)、傳輸安全(TLS)
GDPRArticle 30 處理記錄(審計)、Article 32 處理安全、Article 17 刪除權(支援軟刪 + 硬刪)、資料駐留(你選擇區域)
CCPA / 中國 DSL / 俄羅斯 152-FZ在正確區域自託管即滿足駐留;訪問控制 + 審計覆蓋大部分報告義務

ObjectOS 本身未認證,因為認證針對執行中的部署,而非二進位制。你的部署可以被認證 —— 已有許多達成。

金鑰處理

金鑰放置位置
OS_AUTH_SECRET你的金鑰管理器(Vault、AWS Secrets Manager、k8s Secret);注入為環境變數
帶憑據的資料庫 URL
OIDC client secret
OAuth provider secret
API provider key(郵件、儲存、AI)
DB 中儲存的 settings由 settings 服務靜態加密

絕不要將金鑰烘焙到 artifact(objectstack.json)、Docker 映象、compose 檔案或 Git 中。Console 中的 settings UI 將 env 管理的值顯示為鎖定狀態,運維不會意外覆蓋。

網路模型

必需入站:

  • 從你的 ingress / 負載均衡器到 ObjectOS :3000(預設)的 HTTPS。

必需出站(僅當你配置這些功能時):

  • 你的資料庫(Postgres / Mongo / Turso / ……)。
  • S3 相容儲存(若啟用 storage 能力且使用 S3 介面卡)。
  • OIDC discovery URL(若啟用 SSO)。
  • 郵件提供商 API(Resend / Postmark)。
  • AI 提供商 API(OpenAI / Anthropic / Google / ……)。
  • Webhook 目標。

這就是全部出站表面。見氣隙瞭解切斷更多的部署。

AI:工具、審批、隔離

AI Builder 是你將暴露的最敏感安全表面,因此除上述一切之外還有自己的強制層。

AI 如何變更狀態

模型無法直接寫入你的資料庫。狀態變更的唯一方式是發出結構化的工具呼叫,由 AI 服務接收、校驗和入隊。鏈條:

user prompt
  → model emits tool call (e.g. add_field { object: 'ticket', name: 'severity', type: 'select' })
  → AI service validates payload against the tool's Zod schema
  → if the tool is "mutating": queue as pending action (no state change yet)
  → human reviewer approves → mutation applied → audit row written
  → if the tool is "read-only": run immediately, response returned to model

有 11 個第一方後設資料工具(見 Build → AI Builder)加每個已宣告 Action 對應的一個 action_<name> 工具。每個工具 —— 第一方或自定義 —— 都遵循相同的生命週期。

許可權鍵

授予
ai:chat進行對話;消費模型;讓 Agent 呼叫只讀工具
ai:complete原始補全端點(無 Agent 迴圈)
ai:conversations列出/檢查/刪除對話(取決於 RBAC 作用域,自己或全部)
ai:agents管理 Agent 後設資料(與 ai:chat 一同用於呼叫)
ai:tools列出工具目錄
ai:execute通過 REST 直接呼叫工具(高階 —— 通常僅 ambient agent 需要)
ai:read讀取 pending-actions 佇列與模型列表
ai:approve批准/拒絕排隊中的變更
ai:admin完全的 AI 服務管理

關鍵拆分是 ai:chatai:approve。給大多數使用者 ai:chat 使助手可用;為應審查結構性變更的管理員 / 應用所有者保留 ai:approve。終端使用者因此可以安全地"vibe-build" —— 他們最壞只能將糟糕的變更入隊,需別人接受。

租戶隔離

  • Agent、對話、知識庫和 pending action 作用於一個環境(租戶)。租戶 A 不能看到租戶 B 的對話、AI 提議的工具或知識語料 —— 即使從同一 marketplace 包安裝的同一 Agent 定義也不行。
  • 後設資料工具(create_objectadd_field……)針對呼叫方租戶中的啟用包操作。它們無法觸及包外。
  • 工具輸入經 CEL 校驗,引擎拒絕對保留系統包(sys.*)或其他租戶物件名的引用。

審計事件

當審計能力被載入時:

  • ai.chat.message —— 每條使用者/助手訊息,帶模型 + token 計數
  • ai.tool.call —— 工具名、已校驗輸入、完整輸出(或錯誤)
  • ai.pending_action.queued —— 提議的變更,完整 diff
  • ai.pending_action.approved / .rejected —— 誰、何時、為何決定
  • ai.metadata.applied —— 對後設資料儲存的實際寫入,帶 diff

這些行不可變,可匯出用於安全審查或費用分攤。按(提供商、模型、使用者)的 token 計數供成本歸因。

提示注入態勢

間接提示注入(如 Agent 檢索的文件中含惡意內容)是真實風險;ObjectOS 通過構造減少爆炸半徑:

  • AI 無法繞過工具校驗 —— 即使被說服發出惡意載荷,Zod schema 也會在到達引擎前拒絕畸形輸入。
  • 變更性工具始終入隊。注入的提示無法靜默寫入資料庫。
  • 工具呼叫繼承終端使用者的許可權,而非模型的服務賬戶許可權。使用者永遠無法通過 AI 做他們自己在 Console 或 REST 中也做不到的事。
  • 載入到 Agent 中的 Skill 是版本化且顯式的 —— 見 Build → IDE SkillsBuild → AI Builder

外部 AI 提供商資料流

當你配置一個提供商(OpenAI、Anthropic……)時,僅以下內容離開你的網路:

  • 模型所需的對話歷史(受你的 AI 服務 redact 配置約束 —— 見 Configure → AI
  • 工具定義(名稱、JSON schema —— 無記錄資料)
  • 模型繼續所需的工具輸出(如使用者明確請求的查詢結果)

對氣隙部署,將 AI 服務指向本地 Ollama / vLLM / TGI 端點,同樣的流程仍在你的邊界內。

漏洞披露

請私下報告安全問題至 security@objectstack.ai。我們將在 1 個工作日內響應。請勿就安全問題提交公開 GitHub issue。

供應鏈

  • 預構建映象由 github.com/objectstack-ai/objectos 釋出,帶可復現構建溯源。
  • 所有 @objectstack/* 包在 GitHub 上有釋出原始碼 —— Apache-2.0,無混淆。
  • 生產中使用 SHA 釘死的映象 tag(sha-<short>)以避免漂移;見 Docker

推薦加固清單

  • 在 edge 用真實證書終結 TLS。
  • OS_AUTH_SECRET 為 32+ 位元組隨機,放在金鑰管理器。
  • 資料庫連線使用 TLS。
  • TLS 校驗後啟用 HSTS。
  • CORS origin 顯式(帶憑據時永不 *)。
  • auth 端點限速(推薦 10/min/IP)。
  • 審計保留期匹配策略。
  • 人類賬戶用 OIDC;機器賬戶用 API key。
  • 備份 + 恢復演練已執行並計時。
  • 反向測試:跨組織訪問被拒、欄位安全有效、過期會話被拒。
  • 映象固定到 sha-<short> 或語義版本 tag。
  • 每次釋出前在 CI 中 os doctor 乾淨。

完整上線清單見生產就緒

On this page