启用Aurora MySQL的general_log能否显示连接SSL加密状态?
Aurora MySQL连接SSL加密状态的判断与监控方案
一、general_log能否记录连接的SSL状态
Aurora MySQL的general_log是否会显示SSL连接状态,取决于具体版本:
- Aurora MySQL 3.x(基于MySQL 8.0):启用general_log后,连接日志条目会明确标注SSL状态,格式类似你期待的示例:
非SSL连接则会显示2024-08-07T08:15:00.000000Z 42 Connect user@hostname on database_name using SSL/TLSwithout SSL/TLS。 - Aurora MySQL 2.x(基于MySQL 5.7):默认general_log的连接条目不会直接显示SSL状态,但可以将参数
log_error_verbosity设为3,此时错误日志会记录SSL握手的详细信息,可从中判断连接是否加密。
二、自动判断每个连接SSL状态的方法
1. 利用Performance Schema查询实时连接状态
通过查询performance_schema.threads表,可获取当前所有连接的SSL相关信息:
SELECT thread_id, processlist_user, processlist_host, ssl_version, ssl_cipher, connection_type FROM performance_schema.threads WHERE processlist_id IS NOT NULL;
其中:
ssl_version和ssl_cipher不为空,表示该连接使用SSL加密connection_type字段会直接显示SSL/TLS或plaintext
你可以编写定时脚本执行该查询,一旦发现ssl_version为空的连接,即可标记为非加密连接。
2. 解析Audit Log(推荐)
启用Aurora MySQL的Audit Log(通过参数组设置server_audit_logging=ON),Audit Log会记录每个连接的完整生命周期信息,包括SSL状态。典型日志条目示例:
2024-08-07 08:15:00,serverhost,10.0.0.1,user,123,CONNECT,,,ssl_version=TLSv1.3,ssl_cipher=TLS_AES_256_GCM_SHA384
通过解析这类条目,可批量统计所有连接的SSL状态。
三、监控SSL连接状态的最佳实践
1. 强制所有连接使用SSL(最彻底的方案)
在Aurora参数组中设置require_secure_transport=ON,该参数会直接拒绝所有非SSL连接,从配置层面确保所有连接都是加密的,无需额外监控。
2. CloudWatch监控与告警
将Aurora的general_log、Audit Log或error_log导出到CloudWatch Logs,创建自定义指标:
- 统计非SSL连接的数量
- 当指标值大于0时触发告警,及时发现未加密的连接
3. 定时查询与告警脚本
编写Shell或Python脚本,定期查询information_schema.processlist统计非SSL连接:
SELECT COUNT(*) AS non_ssl_count FROM information_schema.processlist WHERE ssl_cipher IS NULL;
脚本可将结果同步到监控系统(如Prometheus),或直接触发邮件/短信告警。
4. 应用端强制SSL配置
在应用的数据库连接串中强制指定SSL参数,确保应用发起的连接都是加密的:
- JDBC连接串:
jdbc:mysql://aurora-endpoint:3306/dbname?useSSL=true&requireSSL=true - MySQL客户端命令:
mysql -h aurora-endpoint -u user -p --ssl-mode=REQUIRED
内容的提问来源于stack exchange,提问作者Alejandro Montesinos
相关产品推荐
相关产品推荐

