说明:本文以阿里云 API 网关 + 百炼模型服务为底座,给出一种“调用主体 → 项目归属 → 授权模型 → 有效期 → 日志核对”的 API Key 管理实践。示例代码为演示性质,接入时请替换为你的阿里云 AccessKey、API 网关实例与百炼 AppId。
模型和项目配置完成后,业务应用还需要通过调用凭证发起请求。在团队使用场景中,创建凭证时需要同时考虑:它由谁使用、关联哪个项目、可以调用哪些模型、使用到什么时候,以及出现异常时如何定位记录。
区分两类凭证
在阿里云体系里,接入大模型通常会遇到两类凭证。
一类是百炼/灵积模型服务提供的凭证,例如 Authorization: Bearer ,用于平台侧访问模型服务;另一类是阿里云账号或 RAM 用户的 AccessKey,用于业务应用调用自建 API 网关或函数计算部署的代理接口。
配置客户端时,需要确认 API Key、接口地址和模型标识是否匹配。不能因为两者都叫 Key,就直接混用。
创建之前,明确调用主体和项目归属
在阿里云 RAM 中,调用主体可以是 RAM 用户或 RAM 角色。一个 AccessKey 通常绑定到一个主体,同一个主体在不同场景下也可以拥有多组密钥。
这意味着,同一个人负责多个应用时,可以按业务用途分别管理密钥。例如,将客服知识库与内部研发工具的调用分开,后续在 API 网关访问日志里更容易识别请求来源。
项目归属则可以通过资源组或标签实现。为密钥或资源打上 project=xxx 标签,后续在费用中心或日志服务里按标签筛选,就能按项目归集调用记录和成本。
Key 名称也应当便于识别。建议采用“项目用途+运行环境”的命名方式,例如 kb-search-test;名称用于管理识别,不应包含完整密钥或密码。
按实际需要选择授权模型
在阿里云 API 网关里,可以通过授权管理控制每个 App 能访问哪些 API。一个仅用于文本问答的应用,通常没有必要同时开通图片、音频和视频模型的接口权限。
模型已经在平台侧接入,并不代表每个调用方都应获得全部模型的使用权限。排查调用失败时,除了检查模型配置,也需要检查当前 RAM 用户或 API 网关 App 的授权范围。
下面给出一个用 RAM 策略限制百炼模型调用范围的示例:
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "bailian:ChatCompletion", "bailian:Embedding" ], "Resource": "*", "Condition": { "StringEquals": { "acs:ResourceTag/project": "customer-support" } } } ] }
启用状态和有效期需要分别检查
在阿里云控制台里,RAM 用户的 AccessKey 状态与是否过期是两个不同的检查项。如果启用了 AccessKey 轮转,旧 Key 可能在过期后仍然显示为“启用”但实际已失效。
建议为短期测试或阶段性任务设置明确的过期时间,任务结束后删除或禁用密钥;长期运行的业务则配置 AccessKey 轮转策略,避免到期影响服务。
import datetime from aliyunsdkcore.client import AcsClient from aliyunsdkslb.request.v20140515 import DescribeAccessLogsRequest # 示例:检查 RAM AccessKey 的最后使用时间与创建时间,判断是否需要轮转 client = AcsClient('<access-key-id>', '<access-secret>', 'cn-hangzhou') def check_key_age(creation_date: str, max_days: int = 90) -> bool: created = datetime.datetime.strptime(creation_date, '%Y-%m-%d') return (datetime.datetime.now() - created).days > max_days # 实际接入时请调用 RAM ListAccessKeys 接口获取创建时间 if check_key_age('2026-06-01', 90): print('AccessKey 已超过建议轮转周期,请创建新 Key 并下线旧 Key')
保存后,用一次小规模请求核对配置
创建密钥和授权策略后,先发起一次简单的测试调用,再通过阿里云 API 网关的访问日志或日志服务 SLS 核对请求来源、模型和状态。
检查重点包括:请求是否出现在预期密钥下,资源组/标签归属是否正确,实际调用的模型是否在授权范围内,以及客户端是否收到预期结果。
-- 示例:在 SLS 中按 API Key 名称统计请求状态分布 SELECT api_key_name, http_status, COUNT(*) AS cnt, AVG(response_time_ms) AS avg_ms FROM api_gateway_access_log WHERE __time__ > to_unixtime(now()) - 86400 GROUP BY api_key_name, http_status ORDER BY cnt DESC;
为后续费用查看和配额管理提供依据
前面建立的项目、主体和密钥关联,会在后续管理中发挥作用。阿里云费用中心支持按资源组/标签查看账单,因此 API Key 的标签配置会为按项目归集成本提供基础。
查看费用时,需要知道消耗来自哪个项目、哪个主体;配置额度时,需要明确限制的对象;排查异常时,需要能够找到相关请求。创建一组密钥,并不等于这些工作已经完成。