本文介绍如何配置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、11、12、13或14。
    • 内核小版本:大于等于20210228,如需升级内核小版本,请参见升级内核小版本
    • 存储类型:云盘存储。
    • 实例不是新通用型规格。
      说明 新通用型规格,提供更好的弹性能力以及更高的实例性能,提升了实例的创建、变配速度。但当前适配尚不完善,暂不支持接入自建AD域功能。新通用型规格的更多信息,请参见RDS PostgreSQL主实例(新通用型)
  • 创建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为例。添加新林,设置域名
      域控制器选项 设置目录服务还原模式(DSRM)密码设置还原密码
      服务器选择 取消选中创建 DNS 委派创建 DNS 委派
      其他选项 保持默认配置。
      路径 保持默认配置。
      查看选项 保持默认配置。
      先决条件检查 单击安装按钮开始安装服务。
      说明 设置完成后需要重启ECS服务器,请等待重启完成后再进行后续步骤。
  2. AD域控制器中添加管理员用户。
    1. 远程登录ECS服务器,搜索服务器管理器并打开。
    2. 服务器管理器左侧导航栏单击AD DS,然后在右侧目标域控制器上单击右键,选择Active Directory 用户和计算机添加ad用户
    3. pgsqldomain.net > Users上单击右键,选择新建 > 用户添加用户
    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实例。
      协议类型 端口范围 说明
      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。
  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域服务的配置优先级最高。
      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
    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 ldapuser -p 5432 -d postgres

查看AD域修改记录

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