Secrets Manager 概述:为什么我们需要它?

说实话,我刚开始做架构时,对密钥管理这件事很不上心。觉得「反正都是内部服务,把密码配在环境变量里就好」。直到有一次,一个同事不小心把测试环境的数据库密码打印到了日志里,然后日志被公开到了 GitHub……嗯,从那以后我就老实了。

这一章,我们聊聊 AWS Secrets Manager 到底能干什么,和它身边的“兄弟产品”有什么不同,以及在实际项目中我一般把它用在哪些地方。

Secrets Manager 的核心功能

说白了,Secrets Manager 就是一个帮你存敏感信息的保险柜。但它比普通保险柜聪明的地方,在于下面这几项:

  • 自动轮转 – 可以周期性地帮你换密码、换密钥,而且和 RDS、Redshift、DocumentDB 这些深度集成。
  • 细粒度权限 – 利用 IAM 策略和资源策略,精确控制谁可以读哪个密钥、谁可以更新哪个密钥。
  • 审计追踪 – 每次读取、更新、删除操作都会记录到 CloudTrail,谁什么时候碰了密钥,一查一个准。
  • 跨区域复制 – 你可以把密钥从一个区域同步到另一个区域,对多区域部署特别友好。
  • 密钥版本管理 – 每次轮转会产生一个新版本,应用程序可以指定用哪个版本,滚动升级不中断。
一个小习惯:我个人喜欢在密钥名里带上环境标签,比如 prod/app1/db-password、staging/app1/db-password,这样权限策略写起来也清晰。

和竞品/兄弟服务对比

很多同学会问:「AWS 已经有 SSM Parameter Store 了,为什么还要用 Secrets Manager?或者我直接用 HashiCorp Vault 不行吗?」

我入这行时也纠结过,后来踩了几个坑才搞明白。下面这张表格,是我自己总结的对比,希望能帮你少走弯路。

维度 AWS Secrets Manager SSM Parameter Store HashiCorp Vault AWS KMS
自动轮转 原生支持(RDS、Redshift 等) 需自建 Lambda 需写轮转脚本 不适用
最大密钥大小 65536 字节 4096 / 8192 字节(高级) 取决于后端存储 不适用
跨区域复制 内置复制功能 需手动或脚本 需配置故障转移集群 KMS 跨区域复制须每次算
访问审计 CloudTrail 详细记录 部分记录 审计日志功能丰富 CloudTrail 记录
费用 $0.40 / 密钥 / 月 + API 调用费 标准版免费;高级版 $0.05 / 参数 开源免费 / 企业版收费 $1.00 / 密钥 / 月 + 调用费
避坑提示:我曾经在项目中为了省钱全部用 Parameter Store,结果需要轮转数据库密码时写了 200 行 Lambda,还总出 bug。后来换成 Secrets Manager,开箱即用。所以如果你的场景需要高频轮转,别纠结那点费用,直接用 Secrets Manager。

常见使用场景

根据我这几年的经验,下面几个场景最适合用它:

  1. 数据库凭证 – RDS、Aurora、Redshift 的密码轮转,配合自动轮转简直省心。
  2. /第三方 – 比如调用 Stripe、Twilio 的密钥,集中存放并定期轮换。
  3. TLS 私有证书 – Secrets Manager 可以和 ACM Private CA 集成,签发并自动续期私有证书。
  4. SSH 密钥对 – 把服务器登录用的私钥存进去,然后利用 IAM 策略限制只有特定运维人员能读取。
  5. 微服务间的认证凭证 – 比如服务间要用 JWT 或共享密钥,通过 API 动态获取,避免写死在代码里。

你想想看,如果还在用配置文件存放这些敏感信息,每次轮转都得发版、重启服务,多痛苦。使用 Secrets Manager 后,你的应用只要在启动时或运行时调用一次 GetSecretValue 就行了。

我个人的最佳实践:在容器或 Lambda 里,我会把密钥缓存到内存中(比如 5 分钟有效期),而不是每次请求都去调 Secrets Manager,这样可以降低费用和延迟。

Secrets Manager 知识体系 AWS Secrets Manager 自动轮转 细粒度 IAM 权限 审计与 CloudTrail 跨区域复制 数据库密码轮转 / TLS 私有证书 微服务间凭证 vs SSM Parameter Store / HashiCorp Vault / KMS

简单总结一下:Secrets Manager 最核心的价值就是帮你自动、安全、可审计地管理密钥的生命周期。相比 Parameter Store,它贵一点但省心;相比 Vault,它和 AWS 服务集成度更高;相比 KMS,它侧重密钥本身的操作而非加密算法。

我在实际项目中选型时有个朴素的标准:如果这个密钥需要定期轮转,或者涉及多个区域,或者必须满足严格的审计要求,那我直接上 Secrets Manager。如果只是存一个非敏感的配置项,用 Parameter Store 免费版够用。