本文介绍如何配置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域修改记录页签。 
- 您可以在操作列查看变更详情,当修改失败时,状态为未生效,您可以单击变更日志,查看错误信息。 