数据库传输安全

本章涵盖与数据库服务器的网络通信相关的问题。这包括 IP 地址绑定以及使用 TLS 加密网络流量。

数据库服务器 IP 地址绑定

为了隔离服务与数据库之间的敏感数据库通信,我们强烈建议将数据库服务器配置为仅允许通过隔离的管理网络进行通信。这是通过限制数据库服务器绑定网络套接字以进行传入客户端连接的接口或 IP 地址来实现的。

限制 MySQL 的绑定地址

my.cnf

[mysqld]
...
bind-address <ip address or hostname of management network interface>

限制 PostgreSQL 的监听地址

postgresql.conf

listen_addresses = <ip address or hostname of management network interface>

数据库传输

除了将数据库通信限制到管理网络之外,我们还强烈建议云管理员配置其数据库后端以需要 TLS。使用 TLS 进行数据库客户端连接可以保护通信免受篡改和窃听。如下一节所述,使用 TLS 还提供了通过 X.509 证书(通常称为 PKI)进行数据库用户身份验证的框架。以下是如何为两种流行的数据库后端 MySQL 和 PostgreSQL 配置 TLS 的指导。

注意

在安装证书和密钥文件时,请确保文件权限受到限制,例如 chmod 0600,并且所有权受到限制为数据库守护程序用户,以防止数据库服务器上的其他进程和用户进行未经授权的访问。

MySQL SSL 配置

应将以下行添加到系统范围内的 MySQL 配置文件中

my.cnf

[[mysqld]]
...
ssl-ca = /path/to/ssl/cacert.pem
ssl-cert = /path/to/ssl/server-cert.pem
ssl-key = /path/to/ssl/server-key.pem

可选地,如果您希望限制用于加密连接的 SSL 密码套件集合。有关密码套件列表和指定密码字符串的语法,请参阅 ciphers

ssl-cipher = 'cipher:list'

PostgreSQL SSL 配置

应将以下行添加到系统范围内的 PostgreSQL 配置文件 postgresql.conf 中。

ssl = true

可选地,如果您希望限制用于加密连接的 SSL 密码套件集合。有关密码套件列表和指定密码字符串的语法,请参阅 ciphers

ssl-ciphers = 'cipher:list'

服务器证书、密钥和证书颁发机构 (CA) 文件应放置在 $PGDATA 目录中的以下文件中

  • $PGDATA/server.crt - 服务器证书

  • $PGDATA/server.key - 与 server.crt 对应的私钥

  • $PGDATA/root.crt - 受信任的证书颁发机构

  • $PGDATA/root.crl - 证书吊销列表