07 授权计费与安全
本地开发与服务器部署的授权差异
本地 Windows 工作站运行 RhinoCompute,通常使用本机已有 Rhino 授权,不额外产生核心小时费用。
在 Windows Server 或 Linux Server 上运行 RhinoCompute,则通常进入 Core-Hour Billing 模型。服务器启动 Rhino 时会使用 RHINO_TOKEN 指向对应的计费团队。
Core-Hour Billing 基本概念
核心小时计费按“服务器核心数 x Rhino 运行时间”计费,按分钟折算。官方计费说明中给出的价格是每 core-hour 0.10 美元。实际成本应以 McNeel 当前页面为准。
要点:
- 计费关注 Rhino 在服务器上运行的时间,不是每个请求的实际 CPU 使用率。
- 同一台机器上运行多个 Rhino 实例,计费通常仍按机器核心数和运行时间计算。
idlespan能让空闲子进程关闭,从而减少不必要的运行时间。RHINO_TOKEN能触发团队计费,必须像密码一样保护。
获取 RHINO_TOKEN
概念流程:
- 登录 Rhino Licenses Portal。
- 创建或选择用于 Compute 的团队。
- 启用 Core-Hour Billing。
- 获取 Auth Token。
- 在服务器设置机器级环境变量
RHINO_TOKEN。
Windows PowerShell 示例:
[System.Environment]::SetEnvironmentVariable('RHINO_TOKEN', 'your token here', 'Machine')
注意:不要把真实 token 放入 wiki、工单、日志、源码仓库或截图中。
API Key 与 RHINO_TOKEN 的区别
| 项目 | RHINO_TOKEN | RHINO_COMPUTE_KEY |
|---|---|---|
| 用途 | Rhino 授权和核心小时计费。 | 客户端调用 Compute 的认证密钥。 |
| 谁使用 | 服务端 Rhino/Compute 进程。 | 客户端请求 header 和服务端验证。 |
| 泄漏后果 | 他人可能消耗你的计费额度。 | 他人可调用你的 Compute 服务。 |
| 传输位置 | 环境变量,不应传给普通客户端。 | header 名称为 RhinoComputeKey。 |
两者都必须保密,但保护目的不同。
API Key 配置
服务端:
[System.Environment]::SetEnvironmentVariable('RHINO_COMPUTE_KEY', 'your-secret-api-key', 'Machine')
客户端 HTTP header:
RhinoComputeKey: your-secret-api-key
如果服务端没有配置 RHINO_COMPUTE_KEY,部分 POST 端点会处于未认证状态。生产环境不应这样部署。
密钥管理建议
- 使用随机生成的长字符串,不要使用项目名、公司名、简单日期。
- 不要把 API Key 暴露给浏览器前端。
- 外部用户访问应先到业务 API,由业务 API 持有 Compute key。
- 定期轮换 key,尤其是多人协作或供应商接入场景。
- 日志中不要打印完整 key 或 token。
- 对部署脚本、CI、远程桌面剪贴板和截图保持警惕。
网络安全边界
最小生产架构建议:
公网 | v HTTPS 网关 / 业务 API | v 内网 RhinoCompute
如果必须让 Compute 直接暴露到公网:
- 必须启用 API Key。
- 必须启用 HTTPS 或位于 HTTPS 反向代理之后。
- 对来源 IP、请求频率、请求体大小做限制。
- 对
/sdk、诊断端点等暴露面做评估。 - 建议启用
–block-private-urls或RHINO_COMPUTE_BLOCK_PRIVATE_URLS=true。
SSRF 风险
如果 Compute 或 Grasshopper 定义支持服务端读取 URL,攻击者可能试图让服务器访问:
- 云厂商元数据地址。
- 内网管理系统。
- 本机回环地址。
- 链路本地地址。
这类风险称为 SSRF。对公网部署,建议启用私有地址阻断,并在外层业务服务限制可读取的 URL 域名。
请求体大小与资源消耗
默认请求体上限常见为约 50 MB。提高限制前要考虑:
- 大请求会占用更多内存。
- 多个大请求并发可能拖垮子进程。
- Grasshopper DataTree 中大量几何对象会显著增加序列化成本。
- 更好的方式可能是上传文件到对象存储,再传引用。
超时与拒绝服务
长耗时 Grasshopper 定义可能需要提高超时,但超时越长,恶意或错误请求占用资源越久。
建议:
- 外层业务 API 设置任务队列和并发限制。
- 对不同用户、不同任务类型设置不同配额。
- 对失败频繁的定义建立熔断和告警。
- 把超时、请求体大小、子进程数量作为联动参数一起评估。
本章检查点
- 你是否能区分
RHINO_TOKEN和RHINO_COMPUTE_KEY? - 生产服务器是否配置了 API Key?
- 是否避免浏览器直接持有 API Key?
- 是否评估过 SSRF、请求体大小、并发、超时?