跳到正文

安全 ​

Zenavo 持有你自有服务器的凭据,所以安全是它设计中的首要考虑。

你的服务器 ​

  • 对于正常运行的服务器,Zenavo 不保存任何 SSH 密钥、密码或集群凭据。你输入的 SSH 凭据由初始化任务使用,初始化成功后立即清除,失败时加密保留一天以便重试,之后清除;不会向 authorized_keys 添加任何内容。
  • 初始化之后,服务器上的 Zenavo agent 通过 HTTPS 主动向外连接控制面。服务器不需要为 Zenavo 开放任何端口,Zenavo 只保存 agent 令牌的哈希值。
  • Agent 的 Kubernetes 权限只覆盖项目命名空间,这些命名空间强制执行 Pod 安全标准的 baseline 级别:不允许特权容器、主机网络或主机目录。这由准入策略强制执行,agent 无法修改它(防火墙与安全)。
  • 主机密钥在第一次连接时被固定;服务器的主机密钥变化后,初始化会拒绝运行。
  • 每台服务器只能从 Zenavo 的镜像存储拉取自己团队的镜像:它会获得一个有效期五分钟、仅限团队仓库的令牌,并且镜像仓库对所有人都是只读的。镜像按服务存储,所以删除项目会删除它的镜像。

构建 ​

Git 构建在专用的构建机上运行,构建机没有云身份、没有公网地址,也没有通往控制面或其他客户的路由。构建步骤无法访问云元数据服务或私有网络。BuildKit 以非 root 方式运行,只接受 Zenavo 的客户端证书。仓库地址仅限公网地址上的 https:// 和 SSH,不跟随重定向。

你的数据 ​

  • 变量和其他机密静态加密存储。变量值在日志中被遮盖,并对观察者隐藏。
  • 控制面数据库只接受加密且经过证书验证的连接。
  • GitHub 访问使用短期有效的安装令牌,范围仅限你选择的仓库。

你的账号 ​

  • 密码以哈希形式保存;会话有效期 12 小时,可以在 账号设置 中退出。
  • 会话 Cookie 设置了 HttpOnly、Secure 并且仅限当前主机(__Host-),每次修改都要求同源请求并带有 Zenavo 的请求头。
  • 基于身份验证器应用的两步验证,以及一次性恢复码。密钥用主密钥加密;恢复码以哈希形式保存。验证码只能使用一次,输错的验证码按账号限流。
  • 通行密钥(WebAuthn),可以单独使用,也可以和应用一起使用。只保存公钥;挑战只能使用一次、有效期很短,并绑定到会话或进行中的登录;签名计数器倒退的通行密钥会被拒绝并记入审计日志。
  • 新注册的密码账号需要先验证邮箱,才能添加服务器、部署或邀请别人。修改邮箱或密码、删除账号时,需要输入当前密码。
  • 只追加的审计日志记录登录、凭据、服务器、部署和团队变更,不记录机密或变量值。数据库拒绝修改或删除其中的记录。
  • 数据库视图通过 Kubernetes exec API 访问数据库,从不开放数据库端口,凭据始终留在容器中。成员只能读取(只读 SQL 事务、允许列表中的 Redis 读取命令、MongoDB 查询);修改需要团队管理员,影响整个服务器的 Redis 命令和 MongoDB 中的服务端 JavaScript 始终会被拒绝。请求有时间和大小限制,并会被审计,但不记录其中的 SQL、键、值或文档。

报告漏洞 ​

发邮件到 info@zenavo.app。请在公开之前给我们修复问题的机会。

与 Zeabur 无关联。