跳到内容
MagicFrog

管理控制台

管理计算机、enroll 登记、插件、run、表单与审计日志。

管理控制台是 MagicFrog 控制面的一块独立管理界面。它位于 console web 部署的 /admin 路径,与工作台不共享任何东西:它有自己独立的登录门、自己的会话存储、自己的准入检查。登录桌面或 web 工作台永远不会顺带获得管理控制台的访问权。


访问模型

准入依据账号的显式角色。账号带有一个 role 字段,取值为闭集:owner 或 member。只有 owner 账号可以使用管理控制台——产品内部不存在任何 grant、邀请或提权路径能把 member 变成 owner,部署上第一个注册的账号也不会隐式成为 owner。owner 账号由部署本身在首次启动时创建(参见自部署)。

强制在服务端执行。每个 /v1/admin/* 端点都会解析调用者身份,并在一个集中式守卫处要求 owner 角色;非 owner 请求一律返回 403,与 UI 发送了什么无关。console 自身的检查只是展示层。


登录门

/admin 入口呈现四种状态之一,均仅由 admin 会话推导:

状态 出现时机 你看到什么
login 没有 admin 会话 admin 登录表单
change-password 账号仍在使用部署时的初始密码 强制改密表单;改密成功前会话仅保存在内存中
forbidden 已登录,但角色不是 owner(或会话载荷格式非法) 明确的无权限页面——绝不静默降级
ready 以 owner 身份登录且没有待完成的改密 带六个资源面的 admin 壳

admin 会话存放在自己专属的浏览器存储键下,与工作台使用的账号会话相互独立。被篡改或过期的会话载荷会被丢弃并按已登出处理。

强制改密未完成期间,除登录与改密外的所有业务端点都会被服务端以 403 password_change_required 拒绝——这适用于处于该状态的任何账号,而不只是 owner。


托管的资源

admin 壳有六个面。/admin 重定向到第一个面。

面 展示内容 可执行操作
Computers 名称、类型、来源(provisioned / enrolled)、状态 代某账号创建一台托管创建(provisioned)的计算机(账号 ID、OS linux/windows、名称、CPU 核数、内存、可选镜像);启动与停止托管创建的计算机;销毁托管创建的计算机;吊销已登记机器
Enrollments 账号、设备、计算机、名称、状态、egress 授权 吊销一条 enroll 登记;授予或吊销 egress grant
Plugins 种类、状态、来源 安装(来源加种类 directory/url/registry)、启用、停用、更新、卸载
Runs 运行时 owner、位置、目标计算机、egress、终态 取消一个 run
Forms 会话、状态、创建时间 使一个表单过期
Audit log 操作者、动作、资源、时间、摘要 只读,cursor 分页(每页 50 条),可按资源类型过滤

enroll 登记上的 egress grant 是作为一个整体写入的:授予时必须同时给出协议(socks5 或 http)、本地端口与远端端口——不完整的 grant 会被服务端拒绝。吊销即收回该授权。


销毁与吊销是两种不同的操作

销毁一台计算机与吊销一台计算机是两个独立动作,各有各的确认,并且从不共用端点或文案:

  • 销毁(Destroy) 只适用于托管创建的计算机——由 provider 创建的机器。它销毁的是 provider 托管的机器。
  • 吊销(Revoke) 只适用于已登记机器——通过 CLI 登记的真实计算机。它收回登记与该机器的访问权;机器本身、其数据与运行状态都不受影响。吊销登记不会关机,也不会抹掉机器。

UI 把每个动作限定在它适用的行上,服务端也会独立拒绝错配:对已登记机器执行销毁,或对托管创建的计算机执行吊销,都会失败。


审计日志

每一处管理变更都会写入一条审计记录,包含操作者账号、目标资源与时间,并与变更本身在同一个事务里提交。不存在绕过审计链的管理动作。审计面通过 cursor 分页查询这些记录,并可按目标资源类型(computer、enrollment、plugin、run 或 form)过滤。


HTTP API

以下所有端点都要求已认证的 owner 会话;其他调用者一律 403。admin 面通过常规账号端点(POST /v1/account/login、POST /v1/account/change-password、POST /v1/account/logout)完成认证,然后调用 /v1/admin/* 面。

Method Path 用途
GET /v1/admin/audit-log 查询审计日志(cursor、limit、resourceType)
GET /v1/admin/computers 列出计算机
POST /v1/admin/computers 为账号创建一台托管创建的计算机
POST /v1/admin/computers/:computerId/start 启动一台托管创建的计算机
POST /v1/admin/computers/:computerId/stop 停止一台托管创建的计算机
POST /v1/admin/computers/:computerId/destroy 销毁一台托管创建的计算机
POST /v1/admin/computers/:computerId/revoke 吊销一台已登记机器
GET /v1/admin/enrollments 列出 enroll 登记
POST /v1/admin/enrollments/:enrollmentId/revoke 吊销一条 enroll 登记
PATCH /v1/admin/enrollments/:enrollmentId/egress-grant 授予或吊销 egress grant
POST /v1/admin/plugins 安装插件
GET /v1/admin/plugins 列出插件
POST /v1/admin/plugins/:pluginId/enable 启用插件
POST /v1/admin/plugins/:pluginId/disable 停用插件
POST /v1/admin/plugins/:pluginId/update 更新插件
POST /v1/admin/plugins/:pluginId/uninstall 卸载插件
GET /v1/admin/runs 列出 run
POST /v1/admin/runs/:runId/cancel 取消一个 run
GET /v1/admin/forms 列出表单
POST /v1/admin/forms/:formId/expire 使一个表单过期

部署

管理控制台是 console web 部署的一部分。它在 console 构建时通过 VITE_ADMIN_CONTROL_PLANE_URL 对控制面源进行认证;该变量未设置时,登录门会报告缺失配置,而不是去猜一个源。如果 console 与控制面不在同一个源上,需在服务端用 magicfrog serve --cors <origin> 放行 console 的源。控制面部署见自部署。