如何为AWS RDS MySQL加密并配置SSL访问,在Python中通过证书连接?
AWS RDS MySQL 加密、SSL强制访问配置及Python连接步骤
一、关于RDS实例已加密的说明
你看到的实例“已加密”是静态加密,也就是数据存储在磁盘上时的加密,依赖AWS KMS密钥(默认是AWS管理的密钥,也可以用自定义KMS密钥)。这种加密是创建实例时指定的,一旦创建完成就无法再开启,所以你的实例已经具备了存储层的加密保护。
二、配置强制SSL证书访问
要让数据库强制所有连接都使用SSL,按以下步骤操作:
- 登录AWS RDS控制台,找到目标MySQL实例,点击「修改」按钮
- 在页面的「数据库选项」区域,找到「SSL连接」选项,选择「强制SSL连接」
- 滚动到页面底部,选择应用时间(如果业务允许,选「立即应用」;否则选「下次维护窗口」),然后确认修改
- 修改完成后,可以连接数据库执行SQL验证:
SHOW VARIABLES LIKE 'require_secure_transport';,返回值为ON即表示强制SSL已生效
三、获取RDS SSL根证书
通过SSL连接RDS MySQL需要使用AWS官方的根证书,你可以在AWS RDS相关文档中找到对应证书的下载入口,下载后保存到本地项目目录(常用的证书文件名为rds-ca-2019-root.pem)。
四、用PyMySQL通过SSL连接数据库
以下是完整的Python连接代码,替换成你的实际参数即可:
import pymysql # 替换为你的实际数据库信息 db_params = { "host": "你的RDS实例端点", "user": "数据库用户名", "password": "数据库密码", "database": "要连接的数据库名", "ssl": { "ca": "./rds-ca-2019-root.pem" # 这里填你的证书文件路径 } } try: # 建立SSL连接 conn = pymysql.connect(**db_params) print("SSL连接成功!") # 验证连接状态(可选) with conn.cursor() as cursor: cursor.execute("SHOW STATUS LIKE 'Ssl_cipher';") cipher = cursor.fetchone() print(f"当前SSL加密套件: {cipher[1]}") # 执行示例查询 cursor.execute("SELECT NOW();") print(f"当前数据库时间: {cursor.fetchone()[0]}") finally: # 关闭连接 if conn: conn.close()
注意事项
- 确保你的本地机器或EC2实例的安全组规则允许3306端口访问RDS实例
- 证书路径要准确,否则会出现连接失败的错误
- 如果连接时报SSL相关错误,检查证书是否正确、RDS实例的SSL强制配置是否生效
内容的提问来源于stack exchange,提问作者Animesh Singh
相关产品推荐
相关产品推荐

