API Key入站身份认证实践

更新时间:
复制 MD 格式

ALB扩展版支持API Key入站身份认证,在请求转发至后端大模型服务前验证凭证有效性,拒绝未授权访问,保护AI服务安全。

方案架构

扩展版ALB实例接收客户端请求,转发规则根据HTTP标头匹配请求。API Key认证组件通过服务扩展关联转发规则,在转发动作前执行:从HTTP请求头中提取API Key,与预配置的凭证进行比对,匹配成功时允许转发至后端AI服务;未匹配或请求未提供API Key时直接返回401响应,阻止请求继续转发。

  • 扩展版ALB实例:提供负载均衡和流量转发能力。

  • AI类型服务器组:对接后端大模型服务。

  • HTTPS监听:接收客户端请求。

  • 转发规则:根据HTTP标头条件匹配请求并转发。

  • 服务扩展:通过API Key认证组件实现入站身份认证和转发控制。

image

适用范围

  • 用户已获取ALB扩展版公测资格

  • 用户已在华北6(乌兰察布)地域创建一个专有网络VPC,分别在可用区A和可用区B创建一个交换机,且交换机已开通公网SNAT(用于AI服务器组调用公网大模型)。

  • 用户已开通阿里云百炼并获取了API Key,且已将该API Key添加为身份管理中的身份凭证。

  • 用户已注册自定义域名。本文计划将ALB实例部署于华北6(乌兰察布)地域,因此域名需要完成ICP备案

  • 用户已准备好与自定义域名匹配的服务器证书。非阿里云购买的证书需要上传到阿里云证书服务

操作步骤

1.创建扩展版ALB实例

  1. 登录ALB控制台,选择华北6(乌兰察布)地域单击创建应用型负载均衡

  2. 在购买页完成以下配置,单击立即购买

    • 地域:选择华北6(乌兰察布)

    • 实例网络类型:选择公网

    • VPC可用区:选择目标VPC,勾选乌兰察布 可用区A乌兰察布 可用区B后选择对应交换机,并自动分配公网IP

    • 协议版本:选择IPv4

    • 功能版本(实例费):选择扩展版

  3. 确认订单页面确认实例配置详情,单击立即开通

2.创建AI类型服务器组

创建AI类型服务器组,对接阿里云百炼。

  1. 服务器组控制台,单击创建服务器组服务器组类型选择AI服务,输入名称如sgp-ai-qwen,单击创建

  2. 服务器组创建成功对话框单击添加后端服务器

  3. 添加AI服务对话框完成以下配置,单击确定

    • 大模型供应商:选择阿里云百炼

    • 服务地址:选择大模型供应商后自动填充。

    • 身份凭证:选择为阿里云百炼API Key创建的身份凭证。

3.创建监听

  1. ALB控制台,单击目标实例ID进入实例详情页。在监听页签单击创建监听

  2. 配置监听步骤,选择监听协议HTTPS监听端口填写443,完成后单击下一步

  3. 配置SSL证书步骤,选择与自定义域名匹配的服务器证书,单击下一步

  4. 选择服务器组步骤,依次选择AI服务类型和服务器组sgp-ai-qwen,完成后单击下一步

    此处选择的服务器组将用于监听的默认规则,即在请求未命中其他转发规则时处理请求,用户可根据实际需求进行调整。
  5. 配置审核步骤,确认配置并单击提交

4.创建服务扩展

创建服务扩展并添加API Key认证组件,从HTTP标头提取API Key并应用入站身份认证。

  1. 服务扩展控制台,单击创建服务扩展。在服务扩展配置区域,输入服务扩展名称ext-apikey-auth

  2. 扩展类型默认选择插件组件名称下拉选择API Key认证。配置认证策略,完成后单击创建

    • 凭证来源:默认选择Authorization:Bearer<token>

      此处的<token>表示客户端请求时在Authorization: Bearer后填入API Key的位置,ALB会从此处提取并验证API Key。
    • 生成方式:默认选择系统生成

    • 超时时间(毫秒)处理策略:本文保持默认值1000终止,用户可按需调整。

    凭证来源支持多种方式:默认的Authorization:Bearer<token>自定义HTTP标头自定义查询字符串自定义Cookie参数。用户可根据实际需求选择。
    系统生成方式会自动生成API Key凭证,创建完成后可在服务扩展详情页查看和复制凭证。用户也可选择自定义方式,手动输入API Key。

5.配置转发规则

在监听上创建转发规则,添加HTTP标头条件并关联服务扩展。

  1. ALB控制台,单击目标实例ID进入实例详情页。切换到监听页签后,单击目标监听ID进入监听详情页,再切换到转发规则页签。

  2. 单击插入新规则,完成以下配置后单击确定

    • 转发条件:选择HTTP标头键是k值是v

      k: v仅作示例,用于生产时用户可按需配置HTTP标头键值对,或使用其他类型的转发条件。
    • 服务扩展(可选):默认使用已有服务扩展,下拉选择ext-apikey-auth

    • 转发动作:选择转发至AI服务服务器组sgp-ai-qwen

转发规则创建后,包含HTTP标头k: v的请求会命中该规则,服务扩展从HTTP请求头Authorization中提取<token>作为API Key凭证进行比对认证,认证通过后转发至服务器组sgp-ai-qwen

6.设置域名解析

将自有域名通过CNAME解析指向ALB实例的DNS名称,客户端通过自有域名访问ALB。

本文以阿里云云解析DNS为例,对于非阿里云注册域名,需先将域名添加到云解析控制台

  1. ALB控制台,复制目标实例的DNS 名称

  2. 登录域名解析控制台,在目标域名的操作列单击解析设置。在解析设置页面单击添加记录

  3. 参考以下信息添加CNAME记录,完成后单击确定

    • 记录类型:选择CNAME

    • 主机记录:输入域名前缀如ai。假设用户自有根域名为example.com,则访问ALB的域名为ai.example.com

    • 解析请求来源TTL时间:保持默认。

    • 记录值:输入ALB实例的DNS名称。

  4. 在弹出的解析变更确认对话框确认解析信息,单击确定

7.验证测试

使用curl命令发送请求验证API Key认证功能,请求需满足以下条件:

  • 包含转发规则匹配标头k: v:用于匹配关联了服务扩展的转发规则。

  • 符合OpenAI兼容协议:请求路径为/v1/completions/v1/chat/completions/v1/embeddings且整体格式符合规范。

以下测试命令中的域名ai.example.com为示例域名,实际测试时请替换为步骤六中配置的真实域名,需确保域名解析已生效

请求携带正确凭证

即请求包含Authorization: Bearer <token>头字段,其中<token>为步骤四中系统生成的API Key凭证。

curl -v \
    -H "k: v" \
    -H "Authorization: Bearer <token>" \
    -H "Content-Type: application/json" \
    -d '{
        "model": "qwen-turbo",
        "messages": [
            {
                "role": "user", 
                "content": "你是谁"
            }
        ]
    }' \
    https://ai.example.com/v1/chat/completions

请求成功时,返回HTTP 200状态码和AI服务响应:

{
    "choices": [
        {
            "message": {
                "role": "assistant",
                "content": "你好!我是千问,是阿里巴巴集团旗下的通义实验室自主研发的超大规模语言模型..."
            },
            "finish_reason": "stop",
            "index": 0
        }
    ],
    "object": "chat.completion",
    "usage": {
        "prompt_tokens": 14,
        "completion_tokens": 53,
        "total_tokens": 67
    },
    "model": "qwen-turbo"
}

请求携带错误凭证或请求不携带凭证

请求携带错误凭证

即请求包含Authorization: Bearer <token>头字段,但其中<token>非正确凭证。

curl -v \
    -H "k: v" \
    -H "Authorization: Bearer wrong-api-key" \
    -H "Content-Type: application/json" \
    -d '{
        "model": "qwen-turbo",
        "messages": [
            {
                "role": "user", 
                "content": "你是谁"
            }
        ]
    }' \
    https://ai.example.com/v1/chat/completions

请求不携带凭证

即请求不包含Authorization: Bearer <token>头字段。

curl -v \
    -H "k: v" \
    -H "Content-Type: application/json" \
    -d '{
        "model": "qwen-turbo",
        "messages": [
            {
                "role": "user", 
                "content": "你是谁"
            }
        ]
    }' \
    https://ai.example.com/v1/chat/completions

请求失败时,返回HTTP 401状态码,响应体包含认证失败信息。

HTTP响应头:

HTTP/2 401 
content-length: 29
content-type: text/plain
date: Wed, 21 Jan 2026 05:58:31 GMT

HTTP响应体:

Client authentication failed

响应说明:

  • HTTP状态码401,表示请求因未通过身份认证被拒绝。

  • 响应体:纯文本格式的Client authentication failed提示信息,表明客户端身份认证失败。

更多信息

计费说明

  • ALB扩展版:目前处于公测阶段,用户可免费体验。

  • 公网访问费用:公网NAT网关收取实例费和容量单位CU。NAT网关和扩展版ALB实例绑定的EIP有独立的计费规则,费用由EIP收取。

  • 域名和DNS解析费用:除了需要支付域名供应商的域名费用外,在阿里云配置DNS解析需要支付公网权威解析费用

  • 证书费用:从阿里云购买证书或将证书上传至阿里云,需要支付服务器证书费用

  • 百炼模型费用:调用百炼大模型API需要支付费用。

ALB扩展版支持的地域

区域

地域

可用区

中国

华北6(乌兰察布)

可用区A、可用区B、可用区C

华东1(杭州)

可用区J、可用区K

华北2(北京)

可用区I、可用区K、可用区L

华东2(上海)

可用区B、可用区F

中国香港

可用区B、可用区C、可用区D

亚太

新加坡

可用区A、可用区B、可用区C

日本(东京)

可用区B、可用区C、可用区E

马来西亚(吉隆坡)

可用区A、可用区B、可用区C

欧洲与美洲

德国(法兰克福)

可用区A、可用区B

美国(硅谷)

可用区A、可用区B

中东

阿联酋(迪拜)

可用区A、可用区B

使用建议

  • API Key管理:定期轮换API Key,避免长期使用同一凭证。使用系统生成方式时,妥善保管生成的API Key,避免泄露。

  • 凭证来源选择:根据实际需求选择合适的凭证来源。默认的Authorization:Bearer<token>方式符合OpenAI兼容协议,适用于大多数场景。如需自定义,建议使用自定义HTTP标头自定义查询字符串方式,避免在URL中暴露API Key。

常见问题

报错upstream connect error or disconnect/reset before headers. reset reason: connection timeout

此报错通常为后端服务不可达,请确认ALB实例所在交换机已正确配置SNAT,从而确保ALB能将请求转发到公网的百炼大模型。

已配置API Key认证,请求不带凭证却可以成功

  • 确认转发条件与请求格式匹配且转发规则具备足够高的优先级,确保需要进行认证的请求能命中转发规则。

  • 确认服务扩展正确添加了API Key认证组件且已关联转发规则。