使用ALB扩展版实现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。

  • 用户已注册自定义域名。本文计划将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:填入从阿里云百炼平台获取的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

亚太

新加坡

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

欧洲与美洲

德国(法兰克福)

可用区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认证组件且已关联转发规则。