本文介绍如何配置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组。
  • 登录的阿里云账号为主账号。

操作步骤

  1. ECS实例配置AD域控制器。
    1. 远程登录ECS的Windows Server 2016系统。
      说明 AD域控制器需要建立在Windows Server操作系统之上,建议使用Windows Server 2016及以上版本,本示例以Windows Server 2016为例,建立可供RDS使用的AD域控制器。
    2. 搜索服务器管理器并打开。
    3. 仪表盘中单击添加角色和功能
      添加角色和功能
    4. 添加角色和功能向导窗口中进行如下配置。
      向导页签设置说明
      开始之前保持默认配置。
      安装类型保持默认配置。
      服务器选择保持默认配置。
      服务器角色
      • 选中Active Directory 域服务,并在弹出的对话框中单击添加功能
      • 选中DNS 服务器,并在弹出的对话框中单击添加功能
        说明 如果提示您电脑不是固定IP,建议您修改电脑为固定IP,防止IP自动变更导致DNS服务器无法使用。
      功能保持默认配置。
      AD DS保持默认配置。
      DNS 服务器保持默认配置。
      确认单击安装按钮开始安装服务。
    5. 等待安装完成后,单击关闭按钮关闭配置向导。
    6. 服务器管理器页面左侧导航栏单击AD DS,然后在右上方单击更多
      AD DS更多
    7. 所有服务器 任务详细信息窗口中单击将此服务器提升为域控制器
      将此服务器提升为域控制器
    8. Active Directory 域服务配置向导窗口中进行如下配置。
      向导页签设置说明
      部署配置选择添加新林,设置根域名
      说明 本文示例的根域名pgsqldomain.net,其中pgsqldomain为域名前缀,net为域名后缀,均可以进行自定义,请注意在后文中进行同步修改。
      添加新林,设置域名
      域控制器选项设置目录服务还原模式(DSRM)密码设置还原密码
      服务器选择取消选中创建 DNS 委派创建 DNS 委派
      其他选项保持默认配置。
      路径保持默认配置。
      查看选项保持默认配置。
      先决条件检查单击安装按钮开始安装服务。
      说明 设置完成后需要重启ECS服务器,请等待重启完成后再进行后续步骤。
  2. AD域控制器中添加管理员用户。
    1. 远程登录ECS服务器,搜索服务器管理器并打开。
    2. 服务器管理器左侧导航栏单击AD DS,然后在右侧目标域控制器上单击右键,选择Active Directory 用户和计算机添加ad用户
    3. pgsqldomain.net > Users上单击右键,选择新建 > 用户添加用户
      说明 pgsqldomain.netActive Directory 域服务配置向导中设置的根域名,请根据实际情况选择。
    4. 设置登录的用户名称,单后单击下一步新建对象-用户
    5. 设置登录密码,勾选密码永不过期,最后单击下一步完成设置密码
    6. 双击新创建的用户,将用户加入Domain Admins管理员组中。加入管理员组
      添加后结果如下:添加管理员组结果
  3. AD域控制器中添加普通用户用于登录。
    说明 添加普通用户步骤与域控制器中添加管理员用户方法相同,普通登录用户不需要加入Domain Admins管理员组。

    本示例以ldapuser用户为例,作为AD域控制器中的普通用户,用于登录RDS PostgreSQL实例。

  4. 配置ECS实例安全组规则。
    1. 登录ECS管理控制台
    2. 在左侧导航栏,选择实例与镜像 > 实例
    3. 在顶部菜单栏左上角处,选择地域。
    4. 实例列表页面中,单击目标实例ID。
    5. 在左侧导航栏单击本实例安全组,然后在右侧单击配置规则
      说明 域控制器需要开放较多端口,因此不建议和其他ECS实例共享安全组,建议创建单独的安全组使用。
    6. 入方向页签内单击手动添加,允许如下端口访问ECS实例。
      协议类型端口范围说明
      TCP88Kerberos认证协议端口。
      TCP135远程过程调用协议(RPC)端口。
      TCP/UDP389轻型目录访问协议(LDAP)端口。
      TCP445通用互联网文档系统协议(CIFS)端口。
      TCP3268Global Catalog端口。
      TCP/UDP53DNS端口。
      TCP 49152~65535连接的默认动态端口范围。输入格式为:49152/65535。
  5. 配置RDS实例。
    1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
    2. 创建名为ldapuser的用户账号。具体操作请参见创建账号dbadminrds账号
      说明 RDS管理控制台创建的账号名需要与AD域中创建的普通账号名相同,密码可以不一样,当启用AD域控制用户访问时,校验AD域控制器中该账号对应的密码,当不启用AD域控制用户访问时,系统校验RDS管理控制台的账号管理中设置的用户密码。
    3. 单击左侧导航栏的账号管理,选择AD域服务信息页签。
      首次打开AD域服务信息页签,系统默认创建了以下两条记录:
      host    all            all    0.0.0.0/0    md5
      host    replication    all    0.0.0.0/0    md5

      该默认配置可以删除或修改。

    4. 单击第一条默认记录后的编辑,修改第一条默认记录,填写如下参数取值。
      说明 下表中仅简单介绍本示例使用的取值样例及含义,更多参数取值含义及配置方法请参见PostgreSQL官方文档
      参数取值示例说明
      优先级0表示该条记录的优先级,0优先级最高,系统自动生成。修改第一条默认记录,优先级为0,表示AD域服务的配置优先级最高。
      TYPEhost支持配置以下取值:
      • host:该条记录验证TCP/IP连接,包括SSL连接和非SSL连接。
      • hostssl:该条记录只验证通过SSL建立的TCP/IP连接。
        说明 要使用此参数,请打开SSL链路加密,具体请参见SSL链路加密
      • hostnossl:该条记录只验证通过非SSL建立的TCP/IP连接。
      DATABASEall允许用户访问的数据库,all表示允许用户访问所有数据库。如果配置多个,可通过逗号(,)分隔。
      USERldapuser允许哪些用户访问数据库,填写AD域中创建的用户名。如果配置多个,可通过逗号(,)分隔。
      说明 配置在AD域中创建的普通用户的用户名。
      ADDRESS0.0.0.0/0允许用户从哪个或哪些IP访问数据库,0.0.0.0/0表示允许用户从任意IP地址访问数据库。
      MASK掩码。如果ADDRESS为IP地址,可以通过此参数指定IP地址的掩码。
      METHODldap
      说明 LDAP(Lightweight Directory Access Protocol,轻量目录访问协议)是设计用来访问目录数据库的一个协议,本示例以LDAP为例。
      认证方法,支持:
      • trust
      • reject
      • scram-sha-256
      • md5
      • password
      • gss
      • sspi
      • ldap
      • radius
      • cert
      • pam
      说明 手动输入时请注意此处使用英文小写字母。
      OPTIONldapserver=<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
    5. 在上一步配置的AD域服务记录后单击添加,新增如下记录。
      host    all            all    0.0.0.0/0    md5
    6. 填写完成后单击确定,最后单击提交按钮
      说明 提交后系统状态将变为维护实例中,预计时长约1分钟,修改后的新配置仅对新连接生效,对于旧连接,需要您断开已有连接后重新连接才能生效。
  6. (可选)除手动添加AD域服务信息配置外,RDS PostgreSQL还支持通过导入方式批量设置AD域服务信息。导入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"
  7. 测试连接。
    使用PostgreSQL命令行终端连接RDS。
    说明 连接RDS PostgreSQL数据库可以通过多种方式,本示例以PostgreSQL命令行终端为例,连接前需要安装PostgreSQL客户端,具体方法及其他连接方式,请参见连接PostgreSQL实例

    使用如下命令连接RDS PostgreSQL数据库,使用在AD域控制器中普通用户的用户名及密码。

    psql -h <实例连接地址> -U <AD域中创建的普通用户的用户名> -p 5432 -d postgres

查看AD域修改记录

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
  2. 单击左侧导航栏的账号管理,选择AD域修改记录页签。
  3. 您可以在操作列查看变更详情,当修改失败时,状态为未生效,您可以单击变更日志,查看错误信息。查看AD域修改记录