Secrets 管理简介:三大主流工具的核心概念与审计日志
咱们这一章,聊聊 Secrets 管理。说白了,就是怎么安全地保管那些不能见光的“小秘密”——数据库密码、、证书私钥…… 你想想看,要是这些玩意儿被明文写在配置文件里,或者硬编码在代码中,那基本上等于把家门钥匙挂在门把手上了。
我在处理过的不少安全事故里,追根溯源,一半以上都是 Secrets 泄露导致的。所以,这个话题值得花点时间好好捋一捋。
为什么需要专门的 Secrets 管理工具?
有些人会觉得:“我加个密,存数据库里不行吗?” 嗯,理论上可以。但实际落地时你会遇到几个头疼的问题:
- 轮换问题:密码三个月一换,你改完代码还得重新部署?想想就头大。
- 审计缺失:谁在什么时间查了哪个 Secret?查不到。出了事没法回溯。
- 权限分散:开发能看生产库密码?运维能看支付密钥?权限边界模糊,这是大忌。
专业的 Secrets 管理工具,就是为了解决这些问题而生的。它提供了统一的存储、细粒度的访问控制、自动轮换以及完整的审计日志。我个人习惯,只要项目超过 5 个微服务,就必须上 Secrets 管理工具,别犹豫。
三大主流 Secrets 管理工具
目前业界的主流选择,基本就是这三家:HashiCorp Vault、AWS Secrets Manager、Azure Key Vault。它们各有所长,咱们一个个来看。
1. HashiCorp Vault
Vault 是开源界的“瑞士军刀”,功能最全面,灵活性也最高。它能管理静态 Secret(比如数据库密码),也能生成动态 Secret(比如临时数据库账号),甚至能加密数据、签发证书。
核心概念:
- :Vault 的访问凭证,你可以理解为临时令牌。拿到 ,才能在 Vault 里“开锁”。
- Policy:权限策略,用 HCL 语言编写,定义谁可以干什么。比如:“只允许读取 db/creds/readonly 这个路径。”
- Secrets Engine:秘密引擎,负责管理不同类型的 Secret。KV 引擎存静态文本,AWS 引擎动态生成云资源凭证。
- Audit Device:审计设备,所有对 Vault 的 API 请求都会被记录下来,输出到文件、syslog 或 Elasticsearch。
2. AWS Secrets Manager
如果你和团队深度绑定 AWS 生态,那 Secrets Manager 是最自然的选择。它是一个全托管的服务,开箱即用,几乎不需要运维。
核心概念:
- Secret:一个 Secret 就是一条记录,可以是键值对(比如用户名+密码),也可以是纯文本(比如 JSON 配置)。
- Rotation:自动轮换。Secrets Manager 可以直接和 RDS、Redshift 集成,定期更换数据库密码,全程无需人工介入。这一点,Vault 的 Enterprise 版才有。
- Permissions:基于 IAM 策略控制。谁可以读取、写入、轮换,都是在 IAM Policy 里定好的。
- CloudTrail:审计日志。Secrets Manager 的所有操作都会记录到 AWS CloudTrail 中,包括 GetSecretValue、RotateSecret、PutSecretValue 等。
3. Azure Key Vault
Azure Key Vault 是微软云上的 Secrets 管理服务。我个人感觉它在 Azure 生态里集成度很高,特别是和 Azure DevOps、Azure App Service 配合使用时,可以做到无感拉取密钥。
核心概念:
- Vault:一个逻辑容器,里面可以存放多个 Secret、密钥、证书。
- Secret:你可以存储任意字节大小的敏感数据,比如连接字符串、密码。
- Access Policy:访问策略。可以为每个用户或应用单独授权,支持读取、列出、设置、删除等操作。
- Diagnostic Logs:诊断日志。Key Vault 支持将审计日志输出到 Azure Monitor、Event Hub 或 Storage Account。日志内容包括所有对 Key Vault 的 REST API 调用。
审计日志:为什么是 ELK 的“黄金搭档”?
无论是 Vault 的 audit device、AWS 的 CloudTrail,还是 Azure 的 Diagnostic Logs,它们生成的审计日志都有一个共同特点:结构化、详细、高频。
这些日志里包含的信息,恰恰是安全运维最关注的:
| 审计字段 | Vault | AWS Secrets Manager | Azure Key Vault |
|---|---|---|---|
| 时间戳 | 请求到达时间(纳秒级) | 事件时间(毫秒级) | 事件时间(毫秒级) |
| 操作类型 | read, write, delete, list | GetSecretValue, RotateSecret | SecretGet, SecretSet, SecretDelete |
| 主体身份 | ID(哈希) | IAM User ARN / Role ARN | Object ID / Application ID |
| 来源 IP | 客户端 IP | 源 IP | 调用方 IP |
| 操作结果 | HTTP 状态码 | errorCode (有/无) | HTTP 状态码 + 响应消息 |
| Secret 标识 | 路径(如 secret/data/mydb) | Secret Name / ARN | Secret 名称 + 版本号 |
你可以看到,这些日志天生就是为分析而生的。但问题来了:它们分散在不同的地方。Vault 日志在服务器本地,AWS 日志在 CloudTrail S3 桶里,Azure 日志在 Event Hub 里。如果你手工去每个平台翻查,那效率太低了。
这就是我们要做的——用 ELK 把这三家的审计日志集中起来。Filebeat 去采集本地日志文件或云存储,Logstash 做解析和字段提取,Elasticsearch 做存储和检索,Kibana 做可视化展示。这样一来,所有 Secrets 的访问记录都在一个地方,想查什么,几秒钟就能出结果。
我举个例子。去年有个项目,客户要求满足 SOC 2 审计。审计员要提供过去 6 个月内,所有对生产环境 Secret 的访问记录。如果靠人工去 AWS 和 Vault 查,至少得干好几天。但我们用 ELK 已经提前采集好了,直接在 Kibana 里导出 CSV 就完了。审计员看了一眼,说“这个你们也做到了?那差不多了。” —— 这就是审计日志带来的底气。
这张图把三家的工具和它们的审计日志输出路径串了起来。你看,无论是本地文件、云存储,还是事件中心,最终都会通向同一个目标——ELK 管道。这也是我们后续章节要动手实现的核心。