API密钥管理实战:防泄露、防滥用、防绕过
本内容发表于:2026-07-29 14:29:08
浏览量
1036

API密钥管理实战:防泄露、防滥用、防绕过

微信图片_2026-07-29_142816_112.png

去年一个客户找到我,一脸困惑:“我们的API密钥一直放在代码里,GitHub仓库是私有的,应该安全吧?”

我问他:“私有仓库就不会泄露吗?”

GitHub每年扫描到数百万泄露的密钥,其中相当一部分来自“私有”仓库——员工误操作将仓库公开、离职员工克隆代码、第三方服务集成泄露。把密钥硬编码在代码里,等于把钥匙贴在门上,门是锁了,但钥匙人人都看得见。

API密钥是应用程序访问外部服务的“身份证明”。一旦泄露,攻击者不需要破解任何东西,直接用有效凭证登录你的系统

01 密钥泄露的三条路径

硬编码在源代码里

开发人员为了方便,直接在代码中写入API密钥或云服务访问密钥。一旦代码提交到版本控制系统,密钥就进入了历史记录。GitHub的秘密扫描功能会检测到这些泄露并通知服务商,但在此之前,密钥可能已经被自动化工具扫描到。

配置文件暴露

密钥放在.env文件或配置文件中,随代码一起提交。2016年Uber数据泄露事件中,攻击者正是在GitHub上发现了嵌入的AWS密钥,导致5700万用户数据泄露

前端代码泄露

研究显示,在对1000万个网页的分析中,检测到1748个有效凭证泄露,84%出现在JavaScript资源中,其中62%来自打包后的文件,16%来自第三方引入。前端代码是明文的,密钥放在前端就等于公开。

02 密钥生命周期管理

生成:使用强随机数

密钥必须由密码学安全的随机数生成器生成。不要用“简单加密”或“自定义算法”生成密钥——那不是加密,是混淆,专业工具几秒就能破解。

存储:使用密钥管理服务

AWS Secrets Manager、阿里云KMS、腾讯云白盒密钥管理等服务专门用于存储和轮换密钥。Secrets Manager支持将密钥加密后存储,通过IAM策略控制访问,并与CloudTrail集成审计使用记录。Secrets Manager默认不将密钥写入持久化存储,进一步降低泄露风险

腾讯云白盒密钥管理服务可以将API Key加密后存储在业务服务器上,密钥不以明文形式出现在任何配置文件中

分发:通过安全通道交付

阿里云建议使用STS临时凭证代替长期有效的AccessKey。阿里云ECS实例可以通过实例角色获取临时凭证访问云资源,ACK容器集群支持RRSA功能实现Pod级别的IAM角色隔离。这些临时凭证到期后自动失效,无需定期轮换

03 权限最小化

API密钥的权限应遵循最小化原则。阿里云RAM API Key在创建时绑定单一云服务,仅可调用该云服务的API,即使RAM用户拥有多服务权限,API Key也只在指定服务范围内生效

实践建议

  • 按场景分:只读密钥、读写密钥、管理密钥

  • 按环境分:开发、测试、生产使用不同密钥

  • 限制IP白名单:只允许特定IP段调用

  • 按角色分:不同角色使用不同权限的密钥

04 轮换与审计

定期轮换:华为云建议定期轮换访问密钥以降低泄露风险。AWS Secrets Manager支持按计划自动轮换密钥,不影响应用程序

轮换策略:Azure AI服务建议使用双密钥轮换机制——两个密钥交替使用,一个在线上,一个作为备用,轮换时先切换备用密钥生效,再轮换旧密钥

审计追踪:阿里云提供AK审计功能,可查询密钥的基本信息、访问的云服务、调用IP和资源。如果识别到AK泄露,阿里云会对该AK进行限制性保护,在泄露期间访问高危API时会提示报错

腾讯云API密钥管理也支持查看密钥的最后访问时间,帮助识别闲置密钥。Zendesk等SaaS平台支持查看API密钥的审核日志,记录创建、取消激活、重新激活等操作

写在最后

API密钥管理不是“存起来就好”。泄露的根源往往是“存了不该存的地方”。正确的做法是:

  1. 绝对不在代码中硬编码任何密钥

  2. 使用专门的密钥管理服务存储和轮换

  3. 启用审计和监控,及时发现异常调用

  4. 按最小权限原则分配密钥权限

  5. 定期轮换密钥,使用双密钥机制保持业务连续性

那位客户后来移除了代码中的硬编码密钥,改用Secrets Manager统一管理。他说:“以前怕密钥泄露,现在终于不用失眠了。”

你的API密钥,还写在代码里吗?