本文介绍如何配置ECS实例的AD域控制器,以及如何将RDS PostgreSQL实例接入域。
背景信息
活动目录AD(Active Directory),是微软提供的目录服务。目录是一种分层结构,用于存储同一局域网络上对象的信息。在目录中可以收录公司的电脑账号、用户账号、组等以提供更好的安全性和更便捷的管理能力。
RDS PostgreSQL提供接入自建AD域功能,用于企业中心化管理,同时提升用户访问安全性,支持数据库级别和用户级别的黑白名单能力。
RDS PostgreSQL对AD域服务信息的修改是通过修改RDS PostgreSQL实例上pg_hba.conf文件实现的,修改或导入AD域服务信息的内容即修改实例的pg_hba.conf文件,所以RDS管理控制台除了可以配置AD域服务之外,还支持其他常用的pg_hba.conf文件配置,具体参考:PostgreSQL pg_hba.conf介绍。
前提条件
RDS PostgreSQL实例版本需要满足以下条件。
实例大版本:10或以上版本。
内核小版本:大于等于20210228,如需升级内核小版本,请参见升级内核小版本。
存储类型:云盘存储。
已创建ECS实例。RDS PostgreSQL接入自建域必须使用内网,ECS需要满足以下条件:
AD域控制器所在ECS与目标RDS PostgreSQL实例处于相同VPC。
ECS安全组放通RDS的内网IP。详情请参见添加安全组规则。
ECS实例系统防火墙默认关闭,如果您开启过,ECS实例系统防火墙需要放通RDS的内网IP。
系统镜像选择Windows Server 2016及以上版本。
域账号属于Domain Admins组。
登录的阿里云账号为主账号。
操作步骤
ECS实例配置AD域控制器。
远程登录ECS的Windows Server 2016系统。
说明AD域控制器需要建立在Windows Server操作系统之上,建议使用Windows Server 2016及以上版本,本示例以Windows Server 2016为例,建立可供RDS使用的AD域控制器。
搜索服务器管理器并打开。
在仪表盘中单击添加角色和功能。
在添加角色和功能向导窗口中进行如下配置。
向导页签
设置说明
开始之前
保持默认配置。
安装类型
保持默认配置。
服务器选择
保持默认配置。
服务器角色
选中Active Directory 域服务,并在弹出的对话框中单击添加功能。
选中DNS 服务器,并在弹出的对话框中单击添加功能。
说明如果提示您电脑不是固定IP,建议您修改电脑为固定IP,防止IP自动变更导致DNS服务器无法使用。
功能
保持默认配置。
AD DS
保持默认配置。
DNS 服务器
保持默认配置。
确认
单击安装按钮开始安装服务。
等待安装完成后,单击关闭按钮关闭配置向导。
在服务器管理器页面左侧导航栏单击AD DS,然后在右上方单击更多。
在所有服务器 任务详细信息窗口中单击将此服务器提升为域控制器。
在Active Directory 域服务配置向导窗口中进行如下配置。
向导页签
设置说明
部署配置
选择添加新林,设置根域名。
说明本文示例的根域名为
pgsqldomain.net
,其中pgsqldomain
为域名前缀,net
为域名后缀,均可以进行自定义,请注意在后文中进行同步修改。域控制器选项
设置目录服务还原模式(DSRM)密码。
服务器选择
取消选中创建 DNS 委派。
其他选项
保持默认配置。
路径
保持默认配置。
查看选项
保持默认配置。
先决条件检查
单击安装按钮开始安装服务。
说明设置完成后需要重启ECS服务器,请等待重启完成后再进行后续步骤。
AD域控制器中添加管理员用户。
远程登录ECS服务器,搜索服务器管理器并打开。
在服务器管理器左侧导航栏单击AD DS,然后在右侧目标域控制器上单击右键,选择Active Directory 用户和计算机。
在 上单击右键,选择 。
说明pgsqldomain.net为Active Directory 域服务配置向导中设置的根域名,请根据实际情况选择。
设置登录的用户名称,单后单击下一步。
设置登录密码,勾选密码永不过期,最后单击下一步及完成。
双击新创建的用户,将用户加入Domain Admins管理员组中。
添加后结果如下:
AD域控制器中添加普通用户用于登录。
说明添加普通用户步骤与域控制器中添加管理员用户方法相同,普通登录用户不需要加入Domain Admins管理员组。
本示例以
ldapuser
用户为例,作为AD域控制器中的普通用户,用于登录RDS PostgreSQL实例。配置ECS实例安全组规则。
登录ECS管理控制台。
在左侧导航栏,选择 。
在顶部菜单栏左上角处,选择地域。
在实例列表页面中,单击目标实例ID。
在上方导航栏单击安全组页签,然后在目标安全组右侧操作列单击配置规则。
说明域控制器需要开放较多端口,因此不建议和其他ECS实例共享安全组,建议创建单独的安全组使用。
在入方向页签内单击手动添加,允许如下端口访问ECS实例。
协议类型
端口范围
说明
TCP
88
Kerberos认证协议端口。
TCP
135
远程过程调用协议(RPC)端口。
TCP/UDP
389
轻型目录访问协议(LDAP)端口。
TCP
445
通用互联网文档系统协议(CIFS)端口。
TCP
3268
Global Catalog端口。
TCP/UDP
53
DNS端口。
TCP
49152~65535
连接的默认动态端口范围。输入格式为:49152/65535。
配置RDS实例。
- 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
创建名为
ldapuser
的用户账号。具体操作请参见创建账号。说明RDS管理控制台创建的账号名需要与AD域中创建的普通账号名相同,密码可以不一样,当启用AD域控制用户访问时,校验AD域控制器中该账号对应的密码,当不启用AD域控制用户访问时,系统校验RDS管理控制台的账号管理中设置的用户密码。
单击左侧导航栏的账号管理,选择AD域服务信息页签。
首次打开AD域服务信息页签,系统默认创建了以下两条记录:
host all all 0.0.0.0/0 md5 host replication all 0.0.0.0/0 md5
该默认配置可以删除或修改。
单击第一条默认记录后的编辑,修改第一条默认记录,填写如下参数取值。
说明下表中仅简单介绍本示例使用的取值样例及含义,更多参数取值含义及配置方法请参见PostgreSQL官方文档。
参数
取值示例
说明
优先级
0
表示该条记录的优先级,0优先级最高,系统自动生成。修改第一条默认记录,优先级为0,表示AD域服务的配置优先级最高。
TYPE
host
支持配置以下取值:
host:该条记录验证TCP/IP连接,包括SSL连接和非SSL连接。
hostssl:该条记录只验证通过SSL建立的TCP/IP连接。
说明要使用此参数,请打开SSL链路加密,具体请参见SSL链路加密。
hostnossl:该条记录只验证通过非SSL建立的TCP/IP连接。
DATABASE
all
允许用户访问的数据库,all表示允许用户访问所有数据库。如果配置多个,可通过逗号(,)分隔。
USER
ldapuser
允许哪些用户访问数据库,填写AD域中创建的用户名。如果配置多个,可通过逗号(,)分隔。
说明配置在AD域中创建的普通用户的用户名。
ADDRESS
0.0.0.0/0
允许用户从哪个或哪些IP访问数据库,0.0.0.0/0表示允许用户从任意IP地址访问数据库。
MASK
空
掩码。如果ADDRESS为IP地址,可以通过此参数指定IP地址的掩码。
METHOD
ldap
说明LDAP(Lightweight Directory Access Protocol,轻量目录访问协议)是设计用来访问目录数据库的一个协议,本示例以LDAP为例。
认证方法,支持:
trust
reject
scram-sha-256
md5
password
gss
sspi
ldap
radius
cert
pam
说明手动输入时请注意此处使用英文小写字母。
OPTION
ldapserver=<ECS服务器的私网IP> ldapbasedn="CN=Users,DC=<根域名前缀,例如本示例为pgsqldomain>,DC=<根域名后缀,例如本示例为net>" ldapbinddn="CN=<AD域中创建的管理员用户名>,CN=Users,DC=<根域名前缀,例如本示例为pgsqldomain>,DC=<根域名后缀,例如本示例为net>" ldapbindpasswd="<AD域中创建的管理员用户密码>" ldapsearchattribute="sAMAccountName"
认证方式对应的可选参数。本示例使用LDAP认证,需要配置。此参数的更多解释,请参见Authentication Methods。
在上一步配置的AD域服务记录后单击添加,新增如下记录。
host all all 0.0.0.0/0 md5
填写完成后单击确定,最后单击提交按钮。
说明提交后系统状态将变为维护实例中,预计时长约1分钟,修改后的新配置仅对新连接生效,对于旧连接,需要您断开已有连接后重新连接才能生效。
(可选)除手动添加AD域服务信息配置外,RDS PostgreSQL还支持通过导入方式批量设置AD域服务信息。
导入方式支持以下三总种模式
覆盖已有服务信息
追加服务信息(优先度最高):在已有服务信息前追加AD域记录,优先级高于已有服务信息。
追加服务信息(优先度最低):在已有服务信息最后追加AD域记录,优先级低于已有服务信息。
配置格式:
TYPE|DATABASE|USER1|ADDRESS|MASK|METHOD|OPTION
请在编辑AD域的编辑框中按顺序填写需要导入的服务信息。各参数取值请参见参数说明。
配置示例:
host|all|<AD域中创建的普通用户的用户名>|0.0.0.0/0||ldap|ldapserver=<ECS服务器的私网IP> ldapbasedn="CN=Users,DC=<根域名前缀,例如本示例为pgsqldomain>,DC=<根域名后缀,例如本示例为net>" ldapbinddn="CN=<AD域中创建的管理员用户名>,CN=Users,DC=<根域名前缀,例如本示例为pgsqldomain>,DC=<根域名后缀,例如本示例为net>" ldapbindpasswd="<AD域中创建的管理员用户密码>" ldapsearchattribute="sAMAccountName"
测试连接。
使用PostgreSQL命令行终端连接RDS。
说明连接RDS PostgreSQL数据库可以通过多种方式,本示例以PostgreSQL命令行终端为例,连接前需要安装PostgreSQL客户端,具体方法及其他连接方式,请参见连接PostgreSQL实例。
使用如下命令连接RDS PostgreSQL数据库,使用在AD域控制器中普通用户的用户名及密码。
psql -h <实例连接地址> -U <AD域中创建的普通用户的用户名> -p 5432 -d postgres
查看AD域修改记录
- 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
单击左侧导航栏的账号管理,选择AD域修改记录页签。
您可以在操作列查看变更详情,当修改失败时,状态为未生效,您可以单击变更日志,查看错误信息。