资源文件参考
开源 AISIX 网关可以从声明式 resources.yaml 文件加载服务提供方凭证、模型、调用方凭证和运行时策略。本参考涵 盖该文件的 YAML 规则、跨资源命名、环境变量插值和所有受支持的资源集合。
在启动配置中设置 resources_file 以选择该文件。如需创建并加载可用配置,请从开源 AISIX 网关快速入门开始。使用 CLI 参考校验变更,并通过配置状态检查已启用或被拒绝的配置。
文件格式
AISIX 从一个资源文件中只加载一个 YAML 文档。文件名并不固定:本文档约定使用 resources.yaml,但 resources_file 可以指向任意可读文件路径。
该设置只接受一个路径。AISIX 不会加载目录、解析 include 或 import 指令,也不会合并多个资源文件。如果你以多个源文件片段维护配置,请在校验和加载前将它们组装成一个 YAML 文档。
安全应用资源示例
AISIX 不会把资源文件与之前加载的配置合并。每次成功加载都会替换活动资源快照。新增或更改资源时,请从网关当前使用的完整文件开始;组装后的文件中省略的条目和集合将从活动配置中消失。
代码块标题用于区分完整文档与局部配置块:
- 标题为
resources.yaml的代码块是包含_format_version的自包含文档。请结合上下文判断它是新网关配置还是参考示例。 resources.yaml(OIDC 服务提供方)之类的标题表示不含_format_version的局部配置块。括号中的简短说明标识其内容;上下文会说明应添加、替换、更新还是仅检查该配置块。
应用局部配置块时,请从网关当前使用的完整文件开始。每个受影响的集合只更新或创建一次,保留无关条目和集合,不要重复创建已有的顶层集合键。
组装完所有局部配置块后,请验证完整文件,而不是单独验证局部配置块。
文档顶层是一个映射,其中必须包含 _format_version,并且最多包含十四个资源集合:
_format_version: "1"
provider_keys:
- display_name: openai-prod
provider: openai
api_key: ${OPENAI_API_KEY}
models:
- display_name: gpt-4o
provider: openai
model_name: gpt-4o-2024-11-20
provider_key: openai-prod
api_keys:
- display_name: ci-bot
key_env: CI_BOT_KEY
allowed_models: ["gpt-4o"]
rate_limit_policies:
- name: cap-gpt4o
scope: model
scope_ref: gpt-4o
window: minute
max_requests: 300
| 集合 | 用途 | 标识字段 |
|---|---|---|
provider_keys | 存储上游服务提供方凭证和连接设置。 | display_name |
models | 定义面向调用方的模型别名和分发行为。 | display_name |
api_keys | 对调用方进行身份认证,并控制其模型、MCP 工具和 A2A Agent 访问权限。 | display_name |
oidc_providers | 信任用于调用方身份认证的 JWT 签发者。 | name |
mcp_auth_settings | 配置 OAuth Discovery 以及 MCP 客户端可选的匿名访问。 | 单例;无标识字段 |
claim_mappings | 把验证通过的 JWT Claims 解析到调用方 API Key。 | name |
guardrails | 检查或转换请求和响应内容。 | name |
guardrail_attachments | 把安全护栏绑定到它要检查的流量。 | guardrail_id + scope_type + scope_id |
mcp_servers | 将 MCP 服务器或 OpenAPI 操作公开为工具。 | name 或 display_name |
a2a_agents | 为 A2A 调用方注册上游 Agent。 | name 或 display_name |
passthrough_routes | 将匹配的 HTTP 流量在网关审计和策略下中继到服务提供方端点。 | name 或 display_name |
cache_policies | 缓存匹配的非流式模型响应。 | name |
observability_exporters | 将请求遥测数据导出到外部系统。 | name |
rate_limit_policies | 应用条件式或单作用域的请求和 Token 限制。 | name |
YAML 结构
_format_version 必须是字符串 "1",需要加引号以确保 YAML 将其解析为字符串。缺少版本或版本无法识别会导致加载错误;未加引号的 1 会触发专用错误,提示你为它添加引号。
网关会应用以下 YAML 约束:
- 文件必须只包含一个 YAML 文档。使用
---分隔的多个文档会导致加载错误。 - 顶层映射和所有嵌套映射都必须使用字符串 Key。
- 每个存在的资源集合都必须是映射序列。不存在或值为
null的集合按空集合加载。 - 未知顶层集合和资源中的未知字段都会导致加载错误。
- YAML 锚点和别名可以复用值。合并 Key(
<<)不会展开,并会在 Schema 校验时被视为未知字段而失败。
标识与派生 ID
除 mcp_auth_settings 和 guardrail_attachments 外,每个条目的标识字段都必须是非空字符串,并且在集合中唯一;重复会导致加载错误,并指出两个冲突条目。对于 mcp_servers、a2a_agents 和 passthrough_routes,可以使用 name 或 display_name 作为标识;同时包含两种写法会导致加载错误,只能使用其中一种。mcp_auth_settings 采用固定的单例标识,因此文件在该集合中最多只能包含一个条目。guardrail_attachments 条目由 guardrail_id + scope_type + scope_id 三元组标识,因此把同一个安全护栏挂到同一个目标两次属于重复条目。
所有条目都不接受 id 字段。条目 ID 根据 <kind>/<identity>,在命名空间 63e50ab2-677a-54d3-8d1e-c0cb29ceae94 中以 UUIDv5 确定性派生,因此相同文件在重新加载和不同进程中始终生成相同 ID。例如,api_keys/anonymous-mcp 会派生出 d6869ae7-741a-598e-8213-16672e922546。由 ID 标识的引用和限流计数器因此可以跨 SIGHUP 重新加载保留。
名称引用
条目通常通过名称选择关联资源。加载器会按以下方式检查每种关系:
| 关系 | 使用的引用 | 校验行为 |
|---|---|---|
| 模型到服务提供方凭证 | 服务提供方密钥的显示名称(推荐),或其确定性 ID | provider_key 会解析显示名称;名称未知时,错误会列出可用密钥。provider_key_id 必须匹配同一文件中已定义服务提供方密钥的派生 ID。两字段互斥。 |
| 调用方或虚拟模型到目标模型 | 模型的显示名称 | 必须匹配文件中定义的模型。包含 * 的值是 Glob 模式,不检查是否精确匹配。 |
| 限流策略到其主体 | 模型或调用方 API Key 的显示名称 | 对于 model 和 api_key 作用域,名称会解析为目标;对于其它作用域,该值原样传递。 |
| 安全护栏绑定到安全护栏 | 安全护栏 name | 必须匹配已定义的安全护栏;未知名称会导致加载错误,并列出可用的安全护栏。 |
| 安全护栏绑定到作用目标 | 目标集合各自的标识——模型的 display_name,MCP 服务器或透传路由的 name,调用方 API Key 的 display_name | 必须匹配该集合中的条目。scope_type: team 原样保留,因为文件中没有团队集合可供校验。 |
| 调用方身份到 JWT 签发者 | OIDC 服务提供方名称 | 保留为名称,而不解析成派生 ID。 |
| 透传路由到注入凭证 | 经 provider_key 引用的服务提供方密钥显示名称 | 必须匹配已定义的服务提供方密钥;未知名称会导致加载错误,并列出可用的密钥。与 provider_key_id 互斥。 |
| 透传路由到匿名主体 | 经 anonymous_key 引用的调用方 Key 显示名称 | 必须匹配已定义的调用方 API Key。与 anonymous_key_id 互斥。 |
| 调用方 Key 到透传路由 | 经 allowed_routes 引用的路由名称 | 条目是单 * Glob;不含 * 的条目必须匹配文件中定义的路由。 |
环境变量插值
${VAR} 引用只会在字符串标量中根据网关进程环境解析。替换发生在已解析的 YAML 树中,因此环境变量值无法注入 YAML 结构,映射 Key 也不会被插值。
此插值用于用户自定义的进程变量。有关 AISIX 定义的启动和连接变量,请参见环境变量。
- 支持部分插值:
api_base: https://${UPSTREAM_HOST}/v1。 - 变量未设置或值为空都会导致加载错误;错误只指出变量名,绝不会包含变量值。
- 不支持
${VAR:-default}和${VAR:?message}等 Shell 风格的回退值和必填值表达式。 $$生成字面量$;没有大括号的$VAR原样保留;未闭合的${或空的${}会导致错误。- 整数、浮点数、布尔值和
null等非字符串标量不会被插值。
加载、错误与重新加载
启动、SIGHUP 重新加载和 aisix validate 使用相同的加载流程。网关会读取文件、解析 YAML、插值 ${VAR} 引用、转换各条目、解析名称引用、执行 Schema 校验并检查交叉引用。所有配置来源使用相同的 Schema 校验。
错误会在整个文件范围内聚合,并定位到问题条目和字段,例如 models[2] ("gpt-4o")。加载为全有或全无:任何错误都会拒绝整个文件。
启动时,被拒绝的文件会使网关立即停止。SIGHUP 重新加载时,网关会继续提供上一个有效快照,记录聚合报告,并通过 GET /status/config 暴露被拒绝的加载。网关不会监视文件变化,必须显式重新加载。
服务提供方密钥
服务提供方密钥保存上游凭证及该服务提供方使用的连接设置。模型通常通 过 display_name 选择服务提供方密钥;直接模型也可以按照直接模型所述改用该密钥的确定性 ID。每个嵌套层级都会拒绝未知字段。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
display_name | string | 是 | 条目标识,在 provider_keys 中唯一。这是推荐的模型引用;直接模型也可以改用该密钥的确定性 ID。 |
api_key | string | 视情况而定 | 上游服务提供方 API Key。请以 ${VAR} 形式提供。也可以使用 secret 作为替代写法;两者必须且只能提供一个。部分服务提供方的凭证包含多个字段。对于这些服务提供方,请通过一个环境变量提供 JSON 凭证文档。有关凭证格式,请参见 AWS Bedrock 和使用 Entra ID 的 Azure OpenAI。 |
provider | string | 否 | 上游服务提供方标识符,例如 openai 或 deepseek。这是用于服务提供方专用分发的开放字符串,默认为空。 |
adapter | enum | 否 | 没有适用的服务提供方专用分发时所用的上游协议族:openai、anthropic、bedrock、vertex 或 azure-openai。参见适配器协议族。 |
api_base | string | 否 | 覆盖上游服务提供方的基础 URL。私有 OpenAI 兼容端点实际上必须设置此字段。支持部分插值,例如 https://${UPSTREAM_HOST}/v1。 |
apis | object | 否 | 该端点原生提供哪 些 API 协议面、分别在哪个地址。写了 apis 但省略某个协议面,表示该协议面不是原生提供的,网关会改为转换成 chat completions。完全省略该块则从 provider 和 adapter 推导所有协议面,这是默认行为。bedrock、vertex 和 azure-openai 适配器不接受该字段。见声明 API 协议面。 |
apis.responses | object | 否 | 该端点原生提供 /v1/responses。apis 一旦存在,此项即为权威依据:不写它就是在声明该端点没有这个接口。 |
apis.messages | object | 否 | 该端点原生提供 /v1/messages 和 /v1/messages/count_tokens。此项是叠加的——adapter 为 anthropic 的密钥无论是否列出都提供这两个接口;列出它是为了给适配器是其他协议的密钥补上这两条路由。 |
apis.<surface>.base | string | 否 | 该协议面的基础 URL,用于端点把它放在与 api_base 不同的路径上的情况。形式要求与 api_base 相同。该协议面就在 api_base 上时省略此字段。 |
strip_headers | 字符串数组 | 否 | 使用此密钥的 inject 模式透传路由转发前删除的入站请求头。默认:authorization、cookie、set-cookie、x-api-key。条目会去除首尾空格、转成小写并去重。显式 [] 会禁用此列表,但 inject 模式恒剥离 authorization 和 x-api-key,确保调用方凭证绝不与注入凭证并排发送。这并不是绝对禁令:路由自己的 forward_client_headers 会覆盖它,对于既非凭证也非链路上下文的名称,x-* 这类通配符就足以把请求头放回传输上。 |
tls | object | 否 | HTTP 服务提供方分发使用的端点级 TLS 设置。Amazon Bedrock 和 Realtime 分发会忽略此配置块;请改用适用的部署级 upstream.tls 设置。 |
tls.ca_cert | string | 否 | 此 HTTP 端点额外信任为签发者的 PEM 编码 CA 证书。一个证书包可以包含多张证书。参见 TLS 和 mTLS。 |
tls.verify | boolean | 否 | 是否验证此 HTTP 端点的证书。默认:true。设为 false 会接受任意证书,仅用于测试环境。 |
resolve_addresses | array | 否 | 网关连接此密钥 api_base 主机时直接使用的 IP 地址,不再通过 DNS 解析该主机。每个条目都是 IPv4 或 IPv6 地址字面量,不带端口,也不带方括号;按列出的顺序依次尝试。Host、TLS 服务器名、证书校验、协议和端口仍然来自 api_base。Amazon Bedrock、/v1/realtime,以及网关通过正向代理访问上游时都不会生效。见固定端点地址。 |
telemetry_tags | object | 否 | 通过该 Key 路由请求时发出的归因标签。 |
telemetry_tags.kind | enum | 否 | 归因类别:catalog 或 byo。 |
telemetry_tags.featured | boolean | 否 | 是否突出显示该服务提供方密钥。默认:false |