亚马逊AWS官方博客
满足 PCI-DSS 合规要求的 Aurora 全球数据库密码自动轮转解决方案
![]() |
在需要遵守支付卡行业数据安全标准(PCI-DSS)的企业中,数据库凭证的定期轮转是满足合规要求的关键措施。PCI-DSS 8.2.4 要求至少每 90 天更改一次用户密码,这对于使用 Amazon Aurora 全球数据库的企业来说是一个挑战,因为 Aurora 全球数据库目前不支持与 AWS Secrets Manager 集成的原生密码自动轮转功能。本文将介绍一个基于 AWS CDK 的解决方案,通过自定义集成 AWS Secrets Manager 和 Lambda 函数,实现 Aurora 全球数据库主用户密码的自动轮转,从而满足 PCI-DSS 合规要求。
背景与挑战
PCI-DSS 合规要求
支付卡行业数据安全标准(PCI-DSS)是由主要信用卡公司建立的安全标准,旨在保护持卡人数据。其中,PCI-DSS 8.2.4 要求:
至少每 90 天更改一次用户密码/密码短语。
对于处理信用卡数据的企业,满足这一要求是获得 PCI-DSS 认证的必要条件。自动化密码轮转不仅可以满足合规要求,还能减少人为错误和安全风险。
Aurora 全球数据库的特殊性
Amazon Aurora 是一个兼容 MySQL 和 PostgreSQL 的关系型数据库,提供了高性能、高可用性和全球分布式部署能力。Aurora 全球数据库允许单个 Aurora 数据库跨多个 AWS 区域,提供低延迟的全球读取和灾难恢复能力。
在安全管理方面,Aurora 全球数据库目前不支持原生密码轮转,因此本方案就是对这一特性的补充。
解决方案架构
我们设计了一个基于 AWS CDK 的解决方案,通过 AWS Secrets Manager 和 Lambda 函数实现 Aurora 全球数据库主用户密码的自动轮转。该解决方案遵循 AWS 安全最佳实践,并考虑了 Aurora 全球数据库的特殊性,同时满足 PCI-DSS 合规要求。
![]() |
Aurora 全球数据库密码自动轮转架构图
架构组件
该解决方案包含以下核心组件:
- AWS Secrets Manager Secret:存储 Aurora 全球数据库的凭证,包括用户名、密码、主机名、端口和数据库名称。
- Lambda 轮转函数:执行密码轮转逻辑,包括创建新密码、更新数据库密码、测试新密码和完成轮转过程。
- Lambda 层:包含 PyMySQL 库,用于从 Lambda 函数连接到 Aurora 数据库。
- 轮转计划:按照 PCI-DSS 要求的周期(默认 90 天)自动触发密码轮转。
- VPC 配置:确保 Lambda 函数能够安全地访问 Aurora 数据库。
- IAM 角色和策略:提供必要的权限,遵循最小权限原则。
- CloudWatch 告警:监控密码轮转失败情况。
- SNS 通知:在密码轮转失败时发送邮件通知给管理员。
密码轮转流程
AWS Secrets Manager 的密码轮转遵循标准的四步流程,我们的解决方案针对 Aurora 全球数据库进行了优化:
![]() |
密码轮转四步流程
1. createSecret 阶段
在这个阶段,Lambda 函数执行以下操作:
- 获取当前密钥内容(AWSCURRENT 版本)
- 生成新的强密码,确保符合 PCI-DSS 密码复杂性要求
- 创建新版本的密钥(AWSPENDING 阶段)
2. setSecret 阶段
在这个阶段,Lambda 函数执行以下操作:
- 获取当前密钥(AWSCURRENT)和待设置的新密钥(AWSPENDING)
- 连接到 Aurora 主集群
- 执行 ALTER USER 命令更新数据库密码
– 等待 10 秒,允许密码更改复制到全球数据库的只读集群
3. testSecret 阶段
在这个阶段,Lambda 函数执行以下操作:
- 使用新密码测试连接到数据库
- 执行简单查询验证连接
4. finishSecret 阶段
在这个阶段,Lambda 函数执行以下操作:
- 再次测试新密码连接
- 完成轮转,标记新密钥为当前密钥(AWSCURRENT 阶段)
解决方案的关键特性
1. 错误处理和重试机制
为了提高轮转过程的可靠性,我们实现了全面的错误处理和重试机制:
2. 全球复制延迟处理
为了处理 Aurora 全球数据库的复制延迟,我们在更新密码后添加了等待时间:
这个等待时间可以根据实际环境中的复制延迟进行调整。
3. 安全性考虑
解决方案遵循 AWS 安全最佳实践和 PCI-DSS 要求:
- 使用强密码生成算法,确保密码复杂性符合 PCI-DSS 8.2.3 要求
- 遵循最小权限原则配置 IAM 角色
- 将 Lambda 函数部署在 VPC 中,增强网络安全性
- 使用 CloudWatch 监控和告警,及时发现问题
- 实现自动化轮转,满足 PCI-DSS 8.2.4 的 90 天密码更改要求
4. 可定制性
解决方案通过 CDK 参数提供高度可定制性:
- 密码轮转周期可配置(默认 90 天,符合 PCI-DSS 要求)
- VPC 和子网配置可自定义
- 通知邮箱可配置
- 密码复杂性和长度可调整
部署指南
1. 前提条件
- AWS 账户和适当的权限
- 已安装 AWS CLI 并配置凭证
- 已安装 js (≥ 14.x) 和 npm
- 已安装 Python (≥ 3.9)
- 已有 Aurora 全球数据库实例
- VPC 和子网配置,使 Lambda 函数能够访问数据库
2. 部署步骤
2.1 Git 克隆解决方案代码并安装依赖
可选:如果出现 pip install 失败,可先创建虚拟环境,然后再执行以上命令。
可选:如果出现 pip install
失败,可先创建虚拟环境,然后再执行以上命令。
2.2 修改 cdk.json
2.3 执行 CDK 部署命令
VpcId
: Lambda 函数将部署在此 VPC 中(必须能够访问 Aurora 数据库)SubnetIds
: Lambda 函数将部署在这些子网中(必须能够访问 Aurora 数据库)SecretName
: Aurora 全球数据库凭证的 Secret 名称RotationDays
: 密码轮转周期(天数),默认为 90 天NotificationEmail
: 密码轮转失败时的通知邮箱(可选)
等待部署完成后,进行下一步操作。完成状态可在 Cloudformation 中查看状态。
![]() |
3. 配置线上环境
3.1 获取 Aurora 全局写入器的地址
![]() |
3.2 更新 Secrets Manager 配置
在 Secrets Manager 中找到 aurora-global-db-credentials
,点击“检索密钥值”
![]() |
更新 host
的值为 Aurora 的全局写入器端点地址,复制 password
![]() |
3.3 修改 Aurora Global Database 主凭证
选中主集群,点“修改”
![]() |
在凭证管理中的主密码
和确认密码
中粘贴从 Secrets Manager 中获取的 password
,然后点继续
,修改集群
。
![]() |
![]() |
等待集群主凭证更新完成,用新密码测试数据库连接。
4. 测试方案
在 Secrets Manager 中点击立即轮转密钥
,然后在概览中检索密钥值
可获取新密码,然后用客户端测试用新密码登录到集群。
![]() |
另外,在 CloudWatch Logs 中,也可以查看到密钥更新的状态。
5. 应用获取 Secrets Manager 密钥方式参考
![]() |
6. 邮件通知配置
密码自动轮转失败,会通过 SNS 发送 email。如果要添加或修改 email 地址,可在 SNS 中创建
或编辑
订阅。
![]() |
最佳实践与注意事项
1. 复制延迟监控
在高负载情况下,Aurora 全球数据库的复制延迟可能会增加。建议监控复制延迟指标,并根据需要调整 Lambda 函数中的等待时间。
2. 复制密钥
![]() |
出于容灾的考虑,建议后期开启复制密钥,复制密钥到另一个 Region(推荐和 Aurora Global Database 的数据库辅助区域同一个 Region)。以确保极端情况下,数据库密码可以从另一个 Region 的 Secrets Manager中获得。
3. 应用程序集成
应用程序应从 Secrets Manager 获取数据库凭证,而不是硬编码:
4. 故障排除
如果密码轮转失败,可以通过以下步骤进行故障排除:
- 检查 Lambda 函数的 CloudWatch 日志
- 验证 VPC 和安全组配置
- 确认 Secret 中的数据库连接信息正确
- 检查数据库用户权限
5. PCI-DSS 合规审计
为了满足 PCI-DSS 审计要求,建议配置以下内容:
- 启用 CloudTrail 跟踪 Secrets Manager 和数据库相关操作
- 配置 CloudWatch 日志保留期限,确保符合 PCI-DSS 要求
- 定期审查轮转日志,确保密码轮转按计划执行
- 保留密码轮转记录,作为合规证明
结论
本文介绍的 Aurora 全球数据库密码自动轮转解决方案,通过 AWS CDK、Secrets Manager 和 Lambda 函数,实现了安全、可靠的密码轮转流程。该解决方案解决了 Aurora 全球数据库不支持原生密码轮转的挑战,同时考虑了全球复制延迟的问题,有效满足了 PCI-DSS 8.2.4 的密码定期轮转要求。
通过自动化密码轮转,企业可以增强数据库安全性,满足 PCI-DSS 合规要求,同时减少手动操作和人为错误。该解决方案可以根据企业需求进行定制,适用于各种规模的 Aurora 全球数据库部署。