安全
ZenStudio 是自托管的。我们安全模型的简短版本是:我们不在链路上。你的数据留在你的 Supabase 项目里,你的提示词用你提供的密钥直达你选定的模型提供商,任何东西都不存在厂商侧的副本。下面讲的是软件为你看不到的那些部分做了什么。
架构
你的数据在哪里,谁能访问到它。
默认自托管
容器由你运行,Supabase 项目归你所有。应用数据、向量嵌入、追踪和凭据都存在你的数据库里、你选定的区域内。不存在厂商侧副本,也没有任何回传。
你的模型密钥
模型调用从你的部署直达你所配置的提供商,使用你的密钥。提示词与补全内容不经我们代理。
数据驻留跟随你的基础设施
驻留地就是你的 Supabase 区域和你模型提供商的区域,不涉及任何其他方。
凭据的处理方式
你粘贴进来的密钥和令牌会经历什么。
静态加密,而且不只是在数据库层
数仓凭据、SaaS 令牌、提供商 API 密钥、MCP 令牌和集成密钥,在到达数据库之前就已在应用代码中用 AES-256-GCM 加密,密钥源自 PROVIDER_CREDS_SECRET。数据库里存的是密文和每条记录各自的 IV。
带认证的加密
GCM 是带认证的:被篡改的密文会解密失败,而不是返回被改动过的数据。每次加密都生成一个新的 96 位随机 IV,因此相同的密钥不会产生相同的密文。
绝不回传给浏览器
连接列表刻意完全不包含那个加密字段。密钥在服务端、在使用的那一刻解密,不会发送给任何客户端。
密钥引用
配置里可以放 {{secret:NAME}} 这样的指针,在读取时按用户解析,因此共享的配置从不内嵌密钥本身。
租户隔离
一个账号的数据是如何与另一个隔开的。
行级安全
租户数据按所属用户由 Postgres 行级安全策略限定范围,由数据库强制执行,而不是靠应用代码。
行级安全用不上的地方显式限定范围
后台任务——定时刷新、同步和集群运行——以 service-role 客户端执行,此时行级安全是关闭的。这些路径会显式传入所有者筛选条件,且它们可用的工具被限定在一份硬编码的允许清单内,清单里的工具都遵守该筛选。
共享数据在 SQL 里遮蔽,不在界面里遮蔽
数据集被共享时,行筛选和列遮蔽由一个 SECURITY DEFINER 数据库函数施加。被遮蔽的列在结果里根本不存在,而不是被界面隐藏——因此不存在任何会返回它们的视图。
从构造上就是只读的
针对已连接数据库的每一条查询路径都有守卫,拒绝除 SELECT / WITH / SHOW / DESCRIBE / EXPLAIN 之外的一切;文档也要求连接器使用只读凭据。在厂商支持的情况下,只读还会在服务端再声明一次。
治理与可审计性
事后你能证明什么。
可察觉篡改的审计痕迹
受治理的动作由数据库触发器写入一份哈希链式审计日志——每条记录的哈希覆盖前一条,因此被删除或被修改的条目会让链断掉。这条链可以脱离产生它的那个数据库独立校验。
保留与归档
审计事件有可配置的保留期,并支持 NDJSON 归档导出。执行追踪和集群运行有各自的保留设置,按有界批次清理。
IAM、用户组与模型规则
资源通过带行筛选与列遮蔽的用户组授权来共享。某个账号可以调用哪些模型,由允许清单规则决定。
预算与完整追踪
每次模型调用都会记录用户、模型、令牌数和成本。月度上限可按用户和按用户组设置。
SAML 单点登录
支持通过你的身份提供商实现企业单点登录。
我们不作的承诺
把缺口直说出来。一个夸大其词的安全页面比没有更糟——设这一节,是为了让你的审核方从我们这里了解到边界,而不是从一次意外中发现。
没有第三方认证
ZenStudio 没有 SOC 2、ISO 27001 或 HIPAA 认证。由于是你自托管,你架构中被认证的边界是你自己的基础设施和你的 Supabase 项目——该部署的合规姿态由你来声明,我们不代你主张。
没有渗透测试报告
没有可供分享的第三方渗透测试。源码可供你自行审查,对许多采购方而言,这比一封摘要信更有说服力。
密钥管理由你负责
PROVIDER_CREDS_SECRET 是一个由你设置的环境变量。没有托管 KMS 集成,轮换它也不会自动重新加密任何内容——请把轮换当作一次有计划的操作来安排。
报告漏洞
请通过非公开渠道报告疑似漏洞,不要直接开公开 issue。可使用仓库上 GitHub 的私密安全公告功能,或联系 SECURITY.md中的安全联系方式。请告诉我们你做了什么、预期是什么、实际发生了什么;有概念验证会更好。我们会确认收到、在调查期间持续告知进展,并在修复发布时致谢——除非你希望我们不这么做。
自托管意味着这里大多数控制项由你来运维,而不是由我们代你运行。部署指引(包括本页提到的环境变量)在 docs/DEPLOYMENT.md.