Amazon RDS 数据库密码管理
场景描述:
客户端连接数据库,如何安全存储数据库凭证,使之不易被明文获取,并定期轮换数据库密码,而不需要修改应用代码。
实现方案:
使用 Secrets Manager 直接保存凭证。此时连接数据库需拥有 Secrets Manager 密钥权限和 Secrets Manager 中加密使用的 KMS 密钥相关权限,客户端调用 Secrets Manager API 获得数据库凭证用户和密码。

如上图所示,可将数据库凭证填入并选择相应的数据库实例在 Secrets Manager 实现保存,加密密钥可选择 KMS 默认密钥或者客户托管密钥。Secrets Manager 支持自动轮换 RDS 密码,启用密钥轮换时可配置轮换计划和轮换函数,轮换函数可设为默认的 Lambda 函数或者配置为自定义的 Lambda 函数。详情可参考文档 。
密钥保存在 Secrets Manager 后,可在 Lambda 中使用 AWS Parameters and Secrets Lambda Extension 并调用相应 API ,便捷地从 AWS Secrets Manager 中检索密钥,从而使用获得的密钥连接相应的数据库,代码示例如下:
secrets_url = ('http://localhost:' + port +'/secretsmanager/get?secretId=' + creds_path)
headers = { "X-Aws-Parameters-Secrets-Token": os.environ.get('AWS_SESSION_TOKEN') }
secret_string = http.request("GET", secrets_url, headers=headers)
rds_host = secret_string['host']
rds_db_name = secret_string['dbname']
rds_username = secret_string['username']
rds_password = secret_string['password']
conn = pymysql.connect(host=rds_host, user=rds_username, passwd=rds_password, db=rds_db_name, connect_timeout=5)
最后更新于