AWS Secrets Manager
安全存储和自动轮换数据库凭证、API 密钥等机密信息的托管服务
概述
AWS Secrets Manager 是一项安全存储、检索和自动轮换机密信息(数据库凭证、API 密钥、OAuth 令牌等)的托管服务。消除在应用程序代码或配置文件中硬编码凭证的需要,通过 API 在运行时安全检索。支持 RDS、Redshift、DocumentDB 的自动凭证轮换,无需应用程序停机即可定期更新密码。
机密存储与版本管理
Secrets Manager 将机密信息加密存储,使用 KMS 客户管理密钥或 AWS 管理密钥进行加密。每个机密支持版本管理,轮换时新版本标记为 AWSCURRENT,旧版本标记为 AWSPREVIOUS。这确保轮换期间新旧凭证都有效,避免应用程序中断。机密值支持字符串和二进制格式,最大 64KB。标签和描述帮助组织和搜索机密。资源策略控制跨账户访问,允许其他账户的角色检索特定机密。与 CloudFormation 集成可在堆栈创建时自动生成随机密码并存储为机密。
自动轮换与 Lambda 集成
自动轮换是 Secrets Manager 的核心功能。对于 RDS(MySQL、PostgreSQL、Oracle、SQL Server)、Redshift 和 DocumentDB,提供预构建的轮换 Lambda 函数,配置后按计划(如每 30 天)自动更新数据库密码。轮换过程:创建新密码→在数据库中更新→验证新密码可用→将新版本标记为当前版本。对于自定义机密(第三方 API 密钥等),可编写自定义轮换 Lambda 函数实现任意轮换逻辑。多用户轮换策略使用两个数据库用户交替轮换,确保轮换期间始终有一个有效凭证。轮换失败时自动回滚,CloudWatch 告警通知运维团队。
应用程序集成与成本优化
应用程序通过 AWS SDK 的 GetSecretValue API 检索机密。推荐使用缓存库(Python、Java、.NET 等语言提供)在本地缓存机密值,减少 API 调用次数和延迟。缓存 TTL 默认 1 小时,轮换后缓存自动失效。Lambda 环境中,在初始化阶段(handler 外部)检索机密并缓存,避免每次调用都访问 Secrets Manager。ECS 和 EKS 通过原生集成将机密注入为环境变量或挂载为文件。成本方面,每个机密每月 0.40 美元加上每 10,000 次 API 调用 0.05 美元。成本优化策略包括:合并相关凭证到单个机密(JSON 格式存储多个键值对)、使用缓存减少 API 调用、对不需要轮换的静态配置考虑使用免费的 SSM Parameter Store SecureString。