通过公网连接RDS for PostgreSQL实例(Linux方式)
RDS for PostgreSQL实例购买完成后,可以先登录到Linux弹性云服务器,在ECS上安装PostgreSQL客户端,然后执行psql命令行通过PostgreSQL公网IP连接到实例。
通过PostgreSQL客户端连接实例的方式有SSL连接。SSL连接通过了加密功能,具有更高的安全性。
创建RDS for PostgreSQL实例时默认开启SSL,实例创建完成后,不支持关闭。
开启SSL连接数据库实例后,数据库的只读、读写性能是未开启SSL连接数据库实例的80%左右。
公网连接时支持弹性公网IP或NAT访问,当同时设置NAT和弹性公网IP时,会优先使用弹性公网IP访问。
步骤1:购买ECS
步骤2:测试连通性并安装PostgreSQL客户端
- 登录ECS实例,请参见《弹性云服务器用户指南》中“Linux弹性云服务器远程登录(VNC方式)”。
- 在RDS“实例管理”页面,单击实例名称进入“概览”页面。
- 选择“连接管理”,在“连接信息”模块获取实例的公网地址和数据库端口。
图4 连接信息
如果没有绑定公网地址,请参见绑定弹性公网IP。
- 在ECS上测试是否可以正常连接到RDS for PostgreSQL实例公网地址的端口。
- 如果可以通信,说明网络正常。
- 如果无法通信,请检查安全组规则。
- 查看ECS的安全组的出方向规则,如果目的地址不为“0.0.0.0/0”且协议端口不为“全部”,需要将RDS实例的公网IP地址和端口添加到出方向规则。
图5 ECS的安全组
- 查看RDS的安全组的入方向规则,如果源地址不为“0.0.0.0/0”且协议端口不为“全部”,需要将ECS实例的私有IP地址和端口添加到入方向规则,具体操作请参见设置安全组规则。
图6 RDS的安全组
- 查看ECS的安全组的出方向规则,如果目的地址不为“0.0.0.0/0”且协议端口不为“全部”,需要将RDS实例的公网IP地址和端口添加到出方向规则。
- 打开客户端安装页面。
PostgreSQL官网提供了针对不同操作系统的客户端安装方法。
下面将以CentOS下PostgreSQL 12版本为例,介绍安装PostgreSQL客户端。
- 选择数据库版本、操作系统、操作系统架构,在弹性云服务器上执行以下命令安装PostgreSQL客户端。
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
图7 安装客户端
- 数据库版本,选择与RDS for PostgreSQL数据库实例一致的版本。
- 操作系统,选择与弹性云服务器一致的操作系统。
- 操作系统架构,选择与弹性云服务器一致的操作系统架构。
图8 安装rpm包
图9 客户端安装完成
步骤3:使用命令行连接实例(SSL加密)
- 在RDS“实例管理”页面,单击实例名称进入“概览”页面。
- 选择“连接管理”。
- 在“连接信息”模块,单击“SSL”处的,下载“Certificate Download”压缩包,解压后获取根证书(ca.pem)和捆绑包(ca-bundle.pem)。
图10 下载证书
- 将根证书(ca.pem)上传到ECS。
- 推荐使用TLS v1.2及以上协议,低于该版本可能存在安全风险。
- 协议算法推荐使用EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EDH+aRSA+AESGCM:EDH+aDSS+AESGCM:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!SRP:!RC4,使用其他选项可能存在安全风险。
- 根证书捆绑包(ca-bundle.pem)包含2017年4月之后的新根证书和原有根证书。
- ca.pem和ca-bundle.pem都可以实现SSL连接,ca-bundle.pem文件包含ca.pem,使用ca.pem即可。
- 在ECS上执行以下命令连接RDS for PostgreSQL实例。
psql --no-readline -h <host> -p <port> "dbname=<database> user=<user> sslmode=verify-ca sslrootcert=<ca-file-directory>"
示例:
psql --no-readline -h 192.168.0.44 -p 5432 "dbname=postgres user=root sslmode=verify-ca sslrootcert=/root/ca.pem"
- 出现如下提示时,输入数据库账号对应的密码。
Password:
出现如下信息,表示连接成功。SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)