Azure OpenAI Proxy API 密钥与安全管理最佳实践:Token 注入、环境变量配置完整清单
【免费下载链接】azure-openai-proxyA proxy for Azure OpenAI API that can convert an OpenAI request into an Azure OpenAI request.项目地址: https://gitcode.com/gh_mirrors/azur/azure-openai-proxy
本文为新手完整讲解azure-openai-proxy(Azure OpenAI Proxy)的 API 密钥管理与安全最佳实践:从 6 个环境变量的配置清单、Token 注入的两种机制,到生产环境安全自查清单,一篇讲透,帮你安全地用好这个 OpenAI 请求转 Azure 请求的代理工具。
30 秒了解:azure-openai-proxy 是什么?
azure-openai-proxy 是一个用 Go 语言编写的 API 代理,能把标准的 OpenAI 请求(/v1/chat/completions、/v1/completions、/v1/embeddings)转换成 Azure OpenAI 请求,让各类开源 ChatGPT 项目直接把 Azure 当作后端使用。
它由AZURE_OPENAI_PROXY_MODE环境变量控制两种运行模式(路由逻辑见main.go):
- azure(默认,反向代理):充当 OpenAI API 网关,客户端按 OpenAI 格式请求代理,代理负责转发到 Azure
- openai(正向代理):请求直接发往 OpenAI 官方接口,代理只做透传,适合解决部分地区无法直连 OpenAI 的问题
两种模式默认都监听0.0.0.0:8080。
Azure OpenAI Proxy 环境变量配置完整清单
| 环境变量 | 作用 | 默认值 | 是否必填 |
|---|---|---|---|
AZURE_OPENAI_PROXY_ADDRESS | 服务监听地址 | 0.0.0.0:8080 | 否 |
AZURE_OPENAI_PROXY_MODE | 代理模式:azure或openai | azure | 否 |
AZURE_OPENAI_ENDPOINT | Azure 资源地址,形如https://{custom}.openai.azure.com | 无 | ✅ 是(azure 模式) |
AZURE_OPENAI_APIVERSION | Azure API 版本 | 2023-03-15-preview | 否 |
AZURE_OPENAI_MODEL_MAPPER | 模型名 → 部署名的映射,逗号分隔,如gpt-3.5-turbo=gpt-35-turbo | 内置两条常见映射 | 否 |
AZURE_OPENAI_TOKEN | 固定 Azure API 密钥,设置后忽略客户端请求头中的密钥 | 空 | 否 |
💡 这些变量都在启动时一次性读取:监听地址与代理模式在
main.go的init()中加载,Endpoint、API 版本、模型映射与 Token 则在pkg/azure/proxy.go中加载,修改后需重启进程生效。
Token 注入的两种机制 🔑
理解密钥是如何进入最终请求的,是做好安全管理的前提。
机制一:请求头 Bearer 携带密钥
客户端像调用 OpenAI 一样,在请求头里带上Authorization: Bearer <你的Azure密钥>。代理从该头中提取密钥,替换为 Azure 要求的api-key头,并删除原始Authorization头(改写逻辑见pkg/azure/proxy.go)。
这种方式下密钥由每个客户端各自保管,适合本地开发和调试。
机制二:AZURE_OPENAI_TOKEN 环境变量统一托管
只要设置了AZURE_OPENAI_TOKEN,代理会直接忽略客户端传来的Authorization,统一使用环境变量中的密钥发起请求。
好处很直接:
- 密钥只存在代理服务器一处,无需分发给任何客户端
- 客户端可随意更换占位值,轮换密钥时只改一处配置
API 密钥安全管理的 6 条最佳实践 🛡️
1. 密钥绝不写进代码仓库
任何 API 密钥都不应硬编码在源码或提交到版本库中。本项目的设计就是围绕环境变量展开的——请始终用进程环境注入密钥。
2. 生产环境优先用 AZURE_OPENAI_TOKEN 统一注入
团队共享的代理服务,建议一律采用环境变量注入密钥,减少密钥副本数量。但要注意:能访问到代理的人就等同于持有了密钥,所以必须配合网络隔离(见第 3 条),不要裸奔在公网。
3. 给 0.0.0.0:8080 加上网关与 HTTPS
服务默认监听所有网卡,且项目未内置 TLS 支持(Dockerfile中仅EXPOSE 8080)。正式使用前建议:
- 在代理前架设 Nginx 等反向代理,终结 HTTPS 并做访问控制
- 防火墙只放行内网或指定来源到 8080 端口
- 正向代理模式下,将
HTTPS_PROXY指向你的 HTTPS 网关,而非 HTTP 地址
4. 留意启动日志会打印 Endpoint
服务启动时会把 Azure Endpoint、API 版本、模型映射等配置写入日志(pkg/azure/proxy.go中可见相关输出)。Token 本身不会被打印,但请求日志包含完整转发 URL。请妥善管理日志权限,避免配置信息随日志扩散。
5. Docker 部署时通过 --env 或密钥管理方案注入
docker run -d -p 8080:8080 --name azure-openai-proxy \ --env AZURE_OPENAI_ENDPOINT=https://{your-resource}.openai.azure.com \ --env AZURE_OPENAI_TOKEN={your-azure-api-key} \ ishadows/azure-openai-proxy:latest生产环境建议把密钥放入 CI/CD 的 Secrets 或容器平台的密钥管理功能中,而不是明文写进 compose 文件或脚本。
6. 正向代理模式(oai 模式)下密钥仍由客户端保管
当AZURE_OPENAI_PROXY_MODE=openai时,代理只做透传(逻辑见pkg/openai/proxy.go),不需要任何 Azure 环境变量,密钥始终留在客户端。这种方式代理侧零密钥、天然更安全,但客户端依旧要避免把密钥写死在代码里。
不同场景的配置速查表
| 场景 | 推荐做法 |
|---|---|
| 本地开发 / 调试 | 请求头 Bearer 传密钥,不设置AZURE_OPENAI_TOKEN |
| 团队内部服务 | AZURE_OPENAI_TOKEN环境变量注入 + 限制 8080 端口来源 |
| 对外提供访问 | Nginx 终结 HTTPS + Token 环境变量注入 + 网关层鉴权 |
| 解决 OpenAI 直连受限 | 设为openai模式,无需任何 Azure 配置 |
配置问题自查清单 ✅
- 返回 401 或密钥无效:确认
AZURE_OPENAI_ENDPOINT是完整 URL,且用的是 Azure 的 api-key 而非 OpenAI 密钥 - 模型找不到 / 部署名报错:检查
AZURE_OPENAI_MODEL_MAPPER是否配置了模型名=部署名的映射 - 改配置不生效:环境变量只在启动时读取,改完记得重启
- 想换监听地址:用
AZURE_OPENAI_PROXY_ADDRESS指定,例如127.0.0.1:8080 - 本地源码构建:clone 仓库后执行
go build即可,依赖版本见go.mod
git clone https://gitcode.com/gh_mirrors/azur/azure-openai-proxy掌握这套「环境变量清单 + Token 双机制 + 网络隔离」的组合拳,你就能让 azure-openai-proxy 在享受便捷的同时,把 API 密钥的安全风险降到最低。
【免费下载链接】azure-openai-proxyA proxy for Azure OpenAI API that can convert an OpenAI request into an Azure OpenAI request.项目地址: https://gitcode.com/gh_mirrors/azur/azure-openai-proxy
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考