Secrets 管理概念与重要性
聊到零信任,Secrets 管理是个绕不开的话题。我见过太多项目因为 Secrets 泄露而翻车,甚至把整个公司的云账号送给黑客。说白了,Secrets 就是那些你不能让别人知道的数字钥匙——密码、、证书、令牌,丢一个就可能出事。
什么是 Secrets
先理清概念。Secrets 是用于身份认证或加密的敏感数据。在我经历过的几十个项目里,最常见的四类如下:
| 类型 | 用途 | 常见错误 | 敏感等级 |
|---|---|---|---|
| 密码 | 用户 / 数据库 / 系统登录 | 明文传输、弱口令复用 | 高 |
| 服务间调用鉴权 | 硬编码、上传至公共仓库 | 极高 | |
| 证书 | TLS/mTLS 通信加密 | 私钥泄露、过期未轮换 | 极高 |
| 令牌 | OAuth / JWT 临时授权 | 未设置有效期、泄露后无法撤销 | 高 ~ 极高 |
你可能会想:“不就一个密钥吗?藏好不就行了?” 嗯,但现实比你想象的复杂。我曾在一个金融客户的代码库里发现过 AWS Access Key 明文写在配置文件里,而那个仓库居然是公开的。还好发现得早,没造成损失。
Secrets 泄露的典型场景与后果
根据我的经验,泄露场景大多不是高深黑客,而是“低级失误”。
- 代码仓库泄露:最常见的坑。开发者把 .env 文件或 config 里的密钥 commit 到 GitHub/GitLab。
- 日志输出:调试时打印了完整请求体, 直接暴露在日志系统里。
- 环境变量泄漏:容器镜像构建时将 Secrets 打包进层,别人拉取镜像就能看到。
- 共享文档 / 聊天记录:把数据库密码贴到 Slack 或 Notion,离职员工依然能访问。
- 设备丢失或被盗:笔记本电脑上存了未加密的 PEM 文件。
我曾经帮一家创业公司做事后复盘。起因是实习生把线上数据库密码提交到了公共仓库,15 分钟后被爬虫扫到,数据库被勒索,所有表都被加密。最后花了 48 小时恢复,客户数据差点丢失。所以我现在看到谁在代码里写死密码,直接拉小黑屋。
后果有多严重?
- 数据泄露(用户隐私、财务记录)
- 权限被利用(攻击者用你的 调用云服务,产生巨额账单)
- 合规罚款(GDPR、PCI-DSS、等保)
- 品牌信誉崩塌
Secrets 管理生命周期
怎么管好?我建议把它当作一个“生命周期”来处理。每条 Secret 都要经历五个阶段。下面这张图能帮你形成整体认知:
下面我拆开每个阶段讲点实际经验。
1. 创建 / 生成
密码要有足够熵,要用密码学安全的随机生成器。我个人习惯用 openssl rand -hex 32 或专业密钥管理服务生成。不要自己拍脑袋写“MyKey123”。
2. 安全存储
存储是重中之重。我推荐:
- 使用云厂商的 Secrets Manager(AWS Secrets Manager、Azure Key Vault、GCP Secret Manager)
- 或自建 HashiCorp Vault
- 本地开发时优先用环境变量 + .gitignore 保护,但不要依赖它做生产方案
我曾见过有人把私钥放在共享 NAS 上,权限 777。不用多说了吧。
3. 运行时使用
应用启动时动态获取 Secrets,不要写在配置文件里。示例(Python):
import os
import boto3
# 从环境变量获取 Secret 名称
secret_name = os.environ['DB_SECRET_NAME']
region = os.environ['AWS_REGION']
# 通过 Secrets Manager 获取真正密码
client = boto3.client('secretsmanager', region_name=region)
response = client.get_secret_value(SecretId=secret_name)
secret = json.loads(response['SecretString'])
db_password = secret['password']
这样就算容器被dump,密码也不在镜像层里。
4. 定期轮换
轮换能降低泄露影响范围。我建议每 90 天轮换一次数据库密码,可以更短。自动化轮换很关键——手动搞=没人搞。
5. 安全销毁
当 Secret 不再使用时(比如服务下线、人员离职),必须彻底删除。注意:有些云服务删除后有软删除期,要确认真的删干净。我曾经遇到过删了旧的 IAM 用户但访问密钥还躺在 S3 备份里,导致三个月后还能被扫出来。销毁要覆盖所有副本。
好了,到这里你应该对 Secrets 是什么、怎么泄露、如何从生命周期角度管好它们有个清晰的认知。零信任的核心就是“不信任任何隐式的安全边界”,而 Secrets 就是那道最脆弱的边界。管好它,才能谈后面的身份集成。