跳到正文

访问密钥与密钥组字段

GateLLM 有两类「用户」,务必区分:

  • 控制台用户(ConsoleUser):登录控制台的管理账号,角色为 admin 或 monitor(normal_user 不是控制台登录角色)。UI 操作见 控制台用户管理
  • 访问密钥(AccessKey):调用方调用 API 时带的凭证(Bearer <key> 里的那个 key)。本章讲字段。

两者完全独立:控制台用户管的是「谁能进控制台」,访问密钥管的是「谁能调 API」。

访问密钥与密钥组(Access Keys)

入口:控制台 → 访问密钥。该页有三个页签:Access Keys密钥组访问规则(Header ACL,字段见 Header ACL 规则字段)。

关系

text
控制台用户 ──created_by──→ 访问密钥 ──group──→ 密钥组 ──┬→ models[]         (能调哪些模型)
                                                        ├→ load_balancers[] (能调哪些负载均衡器)
                                                        └→ mcp_tool_acl     (能调哪些 MCP 工具)
  • 访问密钥归属一个或多个密钥组groups 字段,表单里复选;多组时各维度取并集、费用配额取最宽,见「费用配额」)。
  • 密钥组的权限分三个互相独立的维度——模型、负载均衡器、MCP 工具——各有自己的「全部」开关,互不附带:
    • 模型列表 决定能访问哪些模型:空 = 无权访问任何模型;["*"] = 所有模型;具体模型名 = 只能访问列出的(精确匹配模型名,不是别名)。
    • 负载均衡器列表 决定能访问哪些负载均衡器:空 = 无权访问任何负载均衡器;["*"] = 所有负载均衡器;具体名称 = 只能访问列出的(精确匹配负载均衡器名,不是别名)。
    • 勾选「所有模型」附带负载均衡器权限,反之亦然——两个维度要分别勾选。
    • 负载均衡器是授权单元:放行一个负载均衡器后,网关不再用「模型列表」去逐个校验该负载均衡器内配置的成员(entry)——该组密钥可到达该负载均衡器的每一个成员,哪怕「模型列表」为空或不含这些模型。把敏感或昂贵的模型放进某负载均衡器的成员里,等于向所有持该负载均衡器权限的密钥开放;若要严格限制某密钥只能用某个模型,应把它配成普通模型并加入「模型列表」,而非放进一个已授权的负载均衡器。
  • 没有分组的密钥 = 无权访问任何模型与负载均衡器。

管理访问密钥

操作怎么做说明
新建「Access Keys」页 → 新建填名称、生成或手填 API 密钥、选分组、启用
查看完整密钥列表「复制」按钮/access-keys/{name}/api-key 取完整值(列表里只显示掩码)
轮换编辑 → API 密钥右侧「轮换」确认后换新值,旧值立即失效;新密钥仅在成功弹窗里显示一次,请立即复制(其他属性保持不变)
吊销编辑 → 取消「启用」标记为已吊销,不再生效,记录保留
删除列表 → 删除彻底移除(建议优先用「吊销」保留审计)

访问密钥字段

字段说明默认值
名称密钥标识,用于管理与审计;编辑时只读(必需)
API 密钥客户端实际带的凭证;列表显示掩码(前后 4 位,如 sk-a***xxxx点「生成」自动产生
分组所属密钥组(复选,可属多个组;多组时模型/LB/MCP 权限取并集),决定模型/MCP 权限无分组(= 无权访问任何模型)
标签(tags)自由格式的组织标签,可多个;用于控制台筛选与搜索(搜索框也匹配标签),纯标注不影响权限。可从历史标签直接选,也可输入新建
匿名勾选后该密钥作匿名兜底(见下文),API 密钥字段置空false
启用关闭即吊销true
创建者哪个控制台用户建的当前登录的控制台用户
acl_default_actionallow / deny,无规则命中时的 per-key 回退动作未设(回退到组、再到全局 Allow)
模型映射(model_mappings)该密钥专属的 from → to 重写规则,可带 when 请求头条件分流;优先级高于所属密钥组的规则。映射目标须过出口闸(按真实种类查对应清单:普通模型查 models、负载均衡查 load_balancers),源名须在对应清单里(入口闸对真实名按种类查、对虚构名并集回退)。详见 配置身份作用域模型映射空(不映射)
月度配额(monthly_quota)该 key 每月(UTC 自然月)费用上限(USD 金额)。留空 = 继承下级;填值必须 > 0。详见下文「费用配额」空(继承下级)
日度配额(daily_quota)该 key 每日(UTC 自然日)费用上限(USD 金额)。同月度配额语义,与月度独立判定空(继承下级)

访问密钥在控制台里由 admin 查看与管理(normal_user 不登录控制台,只持有/使用 API key)。控制台用户被删除后,其建的密钥 created_by 置空,变成遗留密钥(仅 admin 可见)。

管理密钥组

操作怎么做说明
新建「密钥组」页 → 新建填名称、选模型、选负载均衡器、配 MCP 工具 ACL
编辑列表 → 编辑四个子页签:模型 / 负载均衡器 / MCP / 模型映射
删除列表 → 删除若有密钥引用该组需先改密钥的分组

密钥组字段

字段说明默认值
名称分组标识(必需)
模型可访问的模型列表;按上游分组展示,「All Models」= * 全选。与负载均衡器维度互不影响空(无权限)
负载均衡器可访问的负载均衡器列表;「All Load Balancers」= * 全选。「All Models」不含负载均衡器,需在此单独勾选空(无权限)
MCPallowed_tools / denied_tools / allowed_tags,控制可调用的 MCP 工具(详见 MCP 配置
acl_default_actionallow / deny,无规则命中时的 per-group 回退动作未设(回退到全局 Allow)
模型映射(model_mappings)该密钥组共享的 from → to 重写规则(可带 when 请求头条件),作用于组内所有密钥;优先级低于密钥自身规则、高于透传。映射目标须过出口闸(按真实种类查对应清单),源名须在对应清单里(入口闸对真实名按种类查、对虚构名并集回退)。详见 配置身份作用域模型映射空(不映射)
月度配额(monthly_quota)组内每个 key 继承的月度(UTC 自然月)费用上限(USD 金额)。非共享总账——是组内每个 key 各自一个上限。留空 = 该组不参与折叠(不视为无穷大);填值必须 > 0空(不参与折叠)
日度配额(daily_quota)组内每个 key 继承的日度(UTC 自然日)费用上限。同月度配额语义,与月度独立判定空(不参与折叠)

匿名访问密钥

设一个访问密钥的「匿名」= true(全局只能有一个):

  • 客户端请求不带 Authorization / x-api-key / x-goog-api-key 任何头时,匹配这个匿名密钥。
  • 匿名密钥仍需配分组才能获得模型访问权,否则只是「能进门但什么都调不了」。
  • 带了无效密钥的请求也会落到匿名分支(等同没带密钥)。

费用配额

费用配额(cost quota)限制每个访问密钥的货币消费。配额统一按 USD 计价执法——系统级单一汇率源 FxCache/fx-rates API 暴露,三级回退:运维 config 覆盖 > Frankfurter ECB 在线 > 静态兜底表)把各币种花费折算成 USD 后累加。配置入口有三层,均在控制台 访问密钥 页与 计费 → 配额 页签:

  • per-key:在 access key 表单的「费用配额」区填月度 / 日度上限。
  • per-group:在密钥组表单填——语义是「组内每个 key 继承的上限」,不是组内共享一个总账
  • 全局默认计费 → 配额 页签编辑 monthly_limit / daily_limit,对未设自身限额的 key 生效。

三层优先级

每个周期独立解析有效限额:

per-key || max(已设限成员组的限额,未设限的组不参与) || 全局默认
  • 月度与日度是两个独立周期,各自取值、各自判定,任一触顶即拒绝该 key 的后续请求(429)。
  • 组限语义 = 组内每个 key 继承的 per-key 上限(非共享总账)。一个 key 属于多个组、且多组都设了限时取最宽(max)——例:team-a=$100、team-b=$500,key 属两组 → 有效 $500。
  • 未设限的成员组不参与折叠(不视为无穷大)——否则一个设了限的 key 只要再进一个没设限的组就立刻无限了。
  • 成员组全未设限 → 回落全局默认;全局也没设 → 该周期不限。
  • 三层都没设 → 完全不限。

取值与周期边界

  • 取值:留空 / null = 继承下级(key→组→全局),不是该窗口无限;填值必须 > 0(0 与负数在写侧拒绝,前端同步校验)。想表达"某窗口无限"需在比它高的层级设限、本层留空——或接受"三层都无法表达单窗口无限而其他窗口有限"的取舍。
  • 周期边界:UTC 自然月(每月 1 日 00:00 UTC 重置)与 UTC 自然日(每日 00:00 UTC 重置)。与统计/账单口径一致。
  • 限额维度是 USD 金额record_costpricing.currencyFxCache 折成 USD 微单位累加 inflight;refresh_oncecost_breakdown(分币种)各乘汇率求和。前端账单页的 ≈USD 与配额执法共用同一后端汇率源。Excel 导出仍按币种分列(不跨币种求和,不变)。

429 与软限

  • 任一周期触顶返回 429,错误类型 quota_exceeded,报文指明是月度还是日度窗口、限额与已用、重置时间。
  • 仅日度窗口Retry-After 头(≤86400s);月度可达约 31 天,对客户端无意义且可能误处理,报文已含重置时间,不发该头。
  • 软限:用量 = TTL 缓存的 DB 周期总花费(USD,refresh_oncecost_breakdown 分币种各乘汇率求和)+ 进程内在途累计(USD,record_cost 同步折算),约每 30s(日度)/ 5min(月度)刷新;接受分钟级超发窗口。多实例(PG 模式)下 DB 快照共享、在途各实例本地,跨实例同样轻微超发,均在软限语义内接受。ECB 日频汇率,同一币种模型整天按当天汇率折算;缺汇率时 fail-safe 少计(跳过该请求累加,不误拒)。

注意事项

  • 匿名 key:匿名流量在统计里本就合并为单一 "anonymous" 桶,全部匿名流量共享同一份限额(全局默认对匿名生效)。
  • 改 key 名:用量按 name 聚合,改 key 名后旧用量与新名无法关联(与现存统计语义一致)。
  • count_tokens 豁免:不计费、不进配额判定。
  • 模型试调(tryme):不进准入检查缝,消耗记入 SystemDiagnostics 假桶,永不计入任何真实 key 的配额。
  • 未计价模型(无 pricing):cost 0,不耗配额(与账单口径一致)。

与负载均衡器的关系

负载均衡器是密钥组里独立于模型的授权维度:密钥组的 load_balancers 列表需包含该负载均衡器的名称(或 "*"),密钥才能通过 LB 调用。models 维度只管普通模型,「所有模型」不会附带放行负载均衡器:

json
{
  "name": "full-access",
  "models": ["*"],
  "load_balancers": ["gpt-4o-ha"]
}

控制台 → 访问密钥 → 密钥组 → 编辑 → 「负载均衡器」子页签勾选对应 LB。详见 负载均衡字段

常见问题

Q:客户端报 403 model_access_denied,但密钥是对的? 密钥所在的密钥组「模型」列表没包含要调的模型。到「密钥组」把该模型加进去,或改成 *。调负载均衡器报 403 同理——负载均衡器是独立维度,检查组里的「负载均衡器」列表(「All Models」不会附带放行负载均衡器)。

Q:怎么让某个密钥只能调某几个模型? 新建一个密钥组,模型列表只填那几个,把密钥的分组指向它。

Q:访问密钥列表里只看到 sk-a***xxxx,怎么拿完整值? 点该行「复制」按钮,会调接口取完整密钥并复制到剪贴板。匿名密钥不支持取完整值。

Q:谁能在控制台查看/管理访问密钥? 控制台里访问密钥由 admin 查看与管理。normal_user 不登录控制台——它只持有/使用 API key(调 API 时带的凭证)。

Q:想开放免登录访问给内部服务? 配一个匿名访问密钥(anonymous=true),并给它配一个权限受限的密钥组。注意:匿名意味着任何能连到网关的人都能用,仅适用于受信内网。

Q:访问密钥的 acl_default_action 和密钥组的 acl_default_action 怎么用? Header ACL 规则全不命中时的回退动作。详见 Header ACL 规则字段

下一步Header ACL 规则字段 看 Header ACL 规则的完整字段表;配置 Header ACL 访问规则 看操作步骤与常见用法示例;上游与模型字段 看模型配置;负载均衡字段 看 LB 与密钥组的关系;配置身份作用域模型映射 看按 key / group 重写模型名的操作步骤与运维契约。