在 Serverless 函数计算架构中,鉴权插件应在 API 网关控制台统一配置,将函数计算设置为后端服务,适用于 HTTP 请求入口管控场景,主要风险是插件配置错误会导致合法请求被拦截。
先说结论:API 网关负责前置鉴权,函数计算专注业务逻辑,两者解耦可降低维护成本。
- 适合:HTTP 触发器场景,需要统一身份验证的 API 服务
- 先准备:已创建的函数计算服务、API 网关实例及域名
- 验收:使用 curl 发送带鉴权头请求,确认返回 200 状态码
快速处理思路
配置过程主要在云厂商控制台完成,无需修改函数代码,核心动作是绑定插件与 API。
1. 登录 API 网关控制台,创建 API 分组。
2. 创建 API,后端服务类型选择“函数计算”。
3. 在插件管理页面创建鉴权插件(如 JWT 或 Key Auth)。
4. 将插件绑定到具体 API 或 API 分组。
为什么会这样
API 网关位于函数计算之前,是流量的第一入口,前置鉴权能提前拦截非法请求。
如果在函数代码内部实现鉴权,每次请求都会消耗函数计算资源和计费时长,且难以统一管理密钥。通过网关插件,非法请求在到达函数前就被拒绝,节省计算成本并简化函数逻辑。
分步处理
配置流程分为后端绑定、插件创建、插件绑定三个核心阶段,需按顺序执行。
步骤 1:配置后端服务
在 API 网关创建 API 时,后端服务类型选择“函数计算”,授权网关访问函数的权限,确保网关能调用函数。
步骤 2:创建鉴权插件
进入插件管理页面,选择“鉴权类”插件,配置密钥或公钥信息,注意保存生成的密钥用于客户端请求。
步骤 3:绑定插件
在 API 管理页面找到目标 API,选择“绑定插件”,勾选刚创建的鉴权插件,生效范围可选择整个分组或单个 API。
步骤 4:权限授权
检查 RAM 角色权限,确保 API 网关有权限 invoke 函数计算服务,避免鉴权通过后因权限不足调用失败。
怎么验证是否生效
验证核心是发送无鉴权请求应被拒绝,带鉴权请求应成功调用函数。
1. 无鉴权测试:使用 curl 发送不带 Header 的请求,预期返回 401 或 403 状态码。
2. 有鉴权测试:在 Header 中加入配置的鉴权字段(如 Authorization),预期返回 200 状态码及函数业务响应。
3. 日志检查:查看 API 网关访问日志,确认请求状态码和拦截原因。
常见坑
配置过程中容易忽略时钟同步和密钥轮换问题,导致鉴权间歇性失败。
1. 时钟偏差:JWT 插件对时间敏感,服务器与客户端时间偏差过大会导致验证失败。
2. 密钥泄露:硬编码在客户端的密钥容易泄露,建议配合 HTTPS 传输。
3. CORS 配置:鉴权失败可能触发浏览器 CORS 报错,需在网关配置跨域允许头。
常见问题
函数内部还需要做鉴权吗?
通常不需要,但高安全场景建议二次校验。
网关已拦截大部分非法请求,函数内可省略鉴权逻辑以节省资源,但若网关被绕过或内部服务间调用,函数内保留基础校验更安全。
鉴权插件会影响请求延迟吗?
会有轻微增加,通常在毫秒级。
网关需要在本地或远程验证密钥,会增加少量处理时间,公开资料中没有看到可靠的量化数据,但一般不影响业务感知。
如何更换鉴权密钥?
在插件管理页面编辑配置,新密钥生效后旧密钥立即失效。
建议采用双密钥过渡方案,先在函数或客户端兼容旧密钥,再在网关切换,避免业务中断。
参考来源
1. 阿里云帮助文档 - API 网关插件管理 - https://help.aliyun.com/product/43675.html
2. 阿里云帮助文档 - 函数计算后端配置 - https://help.aliyun.com/product/50980.html