跳到主要内容

调用方 API Key

本指南将介绍如何创建调用方 API Key,并允许它使用一个或多个模型别名。

调用方 API Key 用于在代理 API 上认证应用。它们与管理请求使用的 Admin Key 相互独立。应用会向 AISIX 发送明文调用方 API Key,而 AISIX 只在 API Key 资源中保存 SHA-256 哈希。

准备工作

请先准备以下内容:

  • 一个 Admin 和代理监听器都可用的自托管网关。
  • 网关 config.yaml 中的 Admin Key。
  • 调用方应被允许使用的模型别名。如果还没有创建,请先配置服务提供方凭证模型别名

创建调用方 API Key

选择应用要发送给 AISIX 的明文密钥。在创建 Admin 资源前,先计算它的哈希:

export AISIX_ADMIN_KEY="admin-local-only-change-me"
export AISIX_API_KEY="sk-app-caller"

AISIX_API_KEY_HASH=$(printf '%s' "${AISIX_API_KEY}" | shasum -a 256 | awk '{print $1}')

使用该哈希以及此调用方 API Key 可使用的模型别名创建 API Key 资源:

curl -sS -X POST "http://127.0.0.1:3001/admin/v1/apikeys" \
-H "Authorization: Bearer ${AISIX_ADMIN_KEY}" \
-H "Content-Type: application/json" \
-d '{
"key_hash": "'"${AISIX_API_KEY_HASH}"'",
"allowed_models": ["gpt-4o-prod"]
}'

你应该会看到类似下面的响应:

{
"id": "f1ad9f8a-75d0-46ae-9d8d-0cfe8d1d8387",
"value": {
"key_hash": "43d758e3b4aa2aacdb4b49c09c26435fb5083148fda6cfc9c5e38078915c6bdb",
"allowed_models": [
"gpt-4o-prod"
]
},
"revision": 1
}

如果后续需要更新、轮换或删除该调用方 API Key,请复制高亮的 id

请在应用中配置明文密钥。保存的 key_hash 不是可用的调用方凭证。

控制模型访问

模型允许列表是调用方 API Key 的授权边界。请选择与该 API Key 用法匹配的最小范围。

访问模式allowed_models适用场景
指定别名["gpt-4o-prod", "chat-prod"]大多数应用只应调用已批准的模型别名。
所有可见模型["*"]可信内部 API Key 需要较宽的模型访问权限。
不授予模型访问[]需要先创建 API Key,后续再授予模型访问权限。

模型列表端点也使用同一个允许列表。它会返回调用方 API Key 可访问的单目标和集成模型。多目标别名在被允许时可以调用,但不会包含在模型列表中。

验证访问

向允许访问的模型别名发送请求。调用方使用的是明文密钥,而不是哈希:

curl -sS -X POST "http://127.0.0.1:3000/v1/chat/completions" \
-H "Authorization: Bearer ${AISIX_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o-prod",
"messages": [
{"role": "user", "content": "Hello from AISIX."}
]
}'

成功的请求会到达上游模型,并返回 Chat Completions 响应。如果代理返回 401403,请检查应用是否使用了明文密钥,以及请求的模型别名是否被允许。

轮换调用方 API Key

当已有调用方 API Key 需要新的明文值时,可以执行密钥轮换。

API_KEY_ID 设置为创建响应中高亮的 id,然后轮换 API Key 资源:

export API_KEY_ID="f1ad9f8a-75d0-46ae-9d8d-0cfe8d1d8387"

curl -sS -X POST "http://127.0.0.1:3001/admin/v1/apikeys/${API_KEY_ID}/rotate" \
-H "Authorization: Bearer ${AISIX_ADMIN_KEY}"

你应该会看到类似下面的响应:

{
"entry": {
"id": "f1ad9f8a-75d0-46ae-9d8d-0cfe8d1d8387",
"value": {
"key_hash": "4c79f2cc907407e8218346d28c64eb4e8ed4db2a50ea74e75f3a8f5c4f4d0f20",
"allowed_models": [
"gpt-4o-prod"
]
},
"revision": 2
},
"plaintext": "sk-***"
}

轮换响应是 AISIX 唯一一次返回高亮明文密钥的时机。请安全保存它,并更新应用以使用新值。后续读取只会返回哈希。

下一步

你已经配置了调用方如何认证以及它可以使用哪些模型别名。当一个模型别名需要从多个上游目标中选择时,请继续阅读路由与故障转移

如果要添加面向调用方的限制或共享策略控制,请参见限流预算