硬编码的 API Key 凌晨三点泄露了 - 多环境密钥管理的正确打开方式
先看三个失败现场
现场一:密钥直接写进代码。 独立开发者小A图省事,把 API Key 写死在代码里,随手推到了公开 GitHub 仓库。爬虫脚本每分钟扫描一次新提交,密钥泄露后几小时内被刷掉大量额度。这不是段子,而是每天都在发生的事故。
现场二:一个 Key 打天下。 小团队为了“省事”,开发环境、测试环境、生产环境共用同一个 API Key。结果本地调试的一段死循环代码,把生产环境的配额吃光了,线上服务直接报错。更麻烦的是:出问题后没法定位是谁用掉的,也没法只轮换某一个环境的密钥。
现场三:配置文件进了版本库。 有人知道不该硬编码,于是写了 config.py,把 Key 放进去——然后忘记加 .gitignore。整个团队的历史提交里都躺着这把钥匙,即使后来删除文件,Git 历史里依然能翻出来。
这三个反例的共同点是:把密钥当成了代码的一部分,而不是环境的一部分。
正确姿势:环境变量 + 按环境隔离
核心原则很简单:
- 密钥永远不出现在代码和版本库里;
- 不同环境使用不同的 Key,权限和配额独立;
- 泄露任何一个环境的 Key,损失都是可控、可快速止损的。
下面以 ThisToken.AI 为例,从注册到跑通第一段代码,完整走一遍。
第一步:注册并获取 API Key
打开 ThisToken.AI 的控制台,完成注册后,在「API Keys」页面创建密钥。建议按用途分开创建,例如:
dev-key:本地开发用prod-key:生产环境用
拿到 Key 后立刻做一件事:确认它只会出现在环境变量里。价格相关的问题(不同渠道、不同模型的计费),以官网价格页为准,不要依赖任何二手信息。
第二步:用环境变量注入
以 Python 为例,创建 .env 文件(务必加入 .gitignore):
# .env —— 这个文件永远不进 Git
THISTOKEN_API_KEY_DEV=sk-dev-xxxxxxxxxxxxxxxx
THISTOKEN_BASE_URL=https://api.thistoken.ai/v1然后提供一份 .env.example 进版本库,只写键名不写值,方便团队成员照着配置。
第三步:跑通第一段代码
# hello_thistoken.py
import os
from openai import OpenAI
def get_client():
api_key = os.environ.get("THISTOKEN_API_KEY_DEV")
if not api_key:
raise RuntimeError("缺少 THISTOKEN_API_KEY_DEV,请检查 .env 或环境变量")
return OpenAI(
api_key=api_key,
base_url="https://api.thistoken.ai/v1",
)
def main():
client = get_client()
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "用一句话解释什么是环境变量"}],
)
print(resp.choices[0].message.content)
if __name__ == "__main__":
main()运行:
python -m venv .venv && source .venv/bin/activate
pip install openai python-dotenv
# 加载 .env(仅本地开发需要,生产环境用系统环境变量)
export $(grep -v '^#' .env | xargs)
python hello_thistoken.py如果看到模型返回了一句话,恭喜,第一段代码跑通了。
多环境的进阶做法
当项目从“能跑”走向“要上线”,建议再做三件事:
1. 用前缀区分环境变量。 THISTOKEN_API_KEY_DEV / THISTOKEN_API_KEY_PROD,在部署平台上分别配置。代码通过 APP_ENV 决定读哪一个,杜绝本地 Key 打到生产、生产 Key 留在本地的情况。
2. 给每个 Key 设置用量上限。 ThisToken.AI 控制台支持为 Key 配置额度和用途标签。开发环境设一个低额度,就算泄露损失也有限;生产环境按实际业务量设置告警阈值。具体额度能力以官网说明为准。
3. CI/CD 里用 Secret 而不是 .env。 GitHub Actions、各类部署平台的 Secrets 功能会把密钥以加密形式注入运行时,日志里也会自动脱敏。CI 里唯一要做的是:确认 .env 在 .gitignore 里,仓库里只留 .env.example。
最后一条防线:轮换意识
密钥管理的最后一步不是“配好”,而是“换得动”。因为按环境隔离了 Key,所以轮换生产密钥时,开发流程完全不受影响;反之亦然。建议把“每 90 天轮换一次生产 Key”写进团队备忘——换了不心疼,才敢经常换。
写在最后
反例看多了你会发现,密钥泄露从来不是技术难题,而是习惯问题。花十分钟注册 ThisToken.AI、创建分环境的 Key、把上面那段代码跑通,你就已经超过了大多数“Key 写在代码里”的团队。
现在就去注册,创建你的第一把开发环境密钥:https://api.thistoken.ai/register
---
不想折腾多家供应商的接入差异?在 https://api.thistoken.ai/register 注册,用一个 base_url 调用所有模型。