本文介绍了在ECS实例如何配置AD域控制器,并且介绍了如何通过基于Kerberos认证将PolarDB MySQL版集群接入AD域。
背景介绍
活动目录AD(Active Directory)是微软提供的目录服务。目录是一种分层结构,用于存储同一局域网络上对象的信息。在目录中可以收录公司的电脑账号、用户账号、组等以提供更好的安全性和更便捷的管理能力。
PolarDB MySQL版提供接入AD域功能,通过配置AD域服务信息,可以关联Active Directory以启用Kerberos身份验证。
版本要求
PolarDB MySQL版集群版本需要满足以下条件:
-
数据库引擎版本:8.0.1。
-
内核小版本:大于等于8.0.1.1.44.2,如不满足,则需升级内核小版本。
-
产品版本:企业版。
-
系列:集群版。
注意事项
该功能当前处于灰度发布中,您可以点击此处申请试用。
前提条件
如果您已经有AD域和访问PolarDB MySQL版 Client端的环境,无需创建ECS实例,直接使用配置AD域服务信息。
操作步骤
步骤一:ECS实例配置AD域控制器(可选)
-
远程登录ECS的Windows Server 2022系统。
说明AD域控制器需要建立在Windows Server操作系统之上,建议使用Windows Server 2016及以上版本,本示例以Windows Server 2022为例。
-
搜索Server Manager并打开。
-
单击Add roles and features详细参数进行如下设置。
页面名称
设置说明
Installation Type
保持默认设置。
Server Selection
保持默认设置。
Server Roles
-
选中Active Directory Domain Services,并在弹出的对话框中单击Add Features。
-
选中DNS Server,并在弹出的对话框中单击Add Features。如果提示您电脑不是固定IP,建议您修改电脑为固定IP,防止IP自动变更导致DNS服务器无法使用。

Features
保持默认设置。
AD DS
保持默认设置。
DNS Server
保持默认设置。
Confirmation
单击Install进行安装。
-
-
等待安装完成后,单击Close关闭页面。
-
在左侧导航栏单击AD DS,然后在右上方单击More。

-
单击Promote this server to a domain...,详细参数进行如下设置。

页面名称
设置说明
Deployment Configuration
选择Add a new forest,设置域名。

Domain Controller Options
设置恢复模式密码。

DNS Options
取消选中Create DNS delegation选项。

Additional Options
保持默认设置。
Paths
保持默认设置。
Review Options
保持默认设置。
Prerequisites Check
单击Install进行安装。
说明安装完成后系统会重启。
-
等待系统重启,再次搜索Server Manager并打开。
-
在左侧导航栏单击AD DS,然后在右侧目标域控服务器上单击鼠标右键,选择Active Directory Users and Computers,进入AD用户管理模块。

-
在testdomain.net > Users上单击鼠标右键,选择New > User。

-
设置登录的用户,然后单击Next。

-
设置登录密码,并设置密码永不过期,然后单击Next > Finish完成创建。

-
双击新创建的用户,在
Account options里,选定支持Kerberos AES加密方式。
-
按照上面创建User的方式,再创建一个User对应为polardbm。这里创建的两个User,polardbmtestuser用户用于Client访问,polardbm用户用于PolarDB MySQL Server端认证。

步骤二:配置ECS实例安全组规则(可选)
-
登录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。
步骤三:配置PolarDB MySQL版AD域服务端配置信息
-
访问PolarDB集群列表,在上方选择地域,然后单击目标集群ID。
-
单击左侧导航栏的账号管理,选择AD域服务信息页签。首次打开AD域服务信息页签,包含了两部分配置:AD域服务端配置和客户端信息配置。

-
单击AD域服务端配置。

Server服务标识:标识请求PolarDB MySQL版服务的类型,这里默认
polardbm,不可修改。Server端访问地址标识:标识该服务的访问地址的名称,这里默认使用集群ID,不可修改。
域名:这里对应的是ECS自建域创建的根域名或者您也可以使用自己所创建的AD域(POLARDB.DOMAIN)。
说明-
如果您使用的是企业自身的AD域,比如使用的是
Azure Active Directory(现在是Microsoft Enter ID)这里需要输入AD域对应的Domain名称。 -
Server服务标识、Server端访问地址标识、域名对应是
Kerberos SPN的组成;Kerberos Service Principal Name (SPN) 是Kerberos身份验证协议中的一个核心概念,用于唯一标识网络中的服务实例。SPN对于确保客户端能够安全地与正确的服务进行通信至关重要。SPN的格式通常如下所示:ServiceType/HostName@REALM。
AD域服务端用户:需要在AD域中创建一个用户账号,以便用于服务端服务认证。输入Server端访问地址标识、域名信息之后,会出现生成
Keytab文件的建议命令。
说明Kerberos Keytab(简称
keytab)是一个二进制文件,它存储了Kerberos安全领域内服务主体(Service Principal Names,SPNs)与相应加密密钥的映射关系。这个文件对于 Kerberos认证过程至关重要。如果您使用AD域作为Kerberos KDC管理,建议使用ktpass命令生成keytab文件,-out xxx.keytab需要替换成具体生成keytab的名称,-pass yourPassword需要替换成在AD域创建polardbm用户时候对应的密码。 -
-
生成
keytab文件。在ECS AD域环境中生成
keytab文件,打开Windows PowerShell。
执行生成
keytab命令。
确认输出信息没有异常的报错,通过
setspn命令查看polardbm成功映射SPN。 -
选择文件上传
keytab文件,完成AD域Server信息配置。需要将AD域生成的
keytab文件暂存复制到本地,点击选择文件将暂存在本地的keytab文件进行上传。
完成后单击确定。
说明提交后系统状态将变为维护实例中。
步骤四:配置PolarDB MySQL版客户端信息
-
单击左侧导航栏的账号管理,选择AD域服务信息页签,单击客户端信息配置。

-
在创建AD域客户端访问用户内,填写客户端用户和域名。

客户端用户:在PolarDB MySQL版集群中创建一个基于
Kerberos认证的访问用户,这里对应是在ECS自建域创建的Client端用户(polardbmtestuser)。域名:这里对应的是ECS自建域创建的根域名(POLARDB.DOMAIN)。
完成后单击确定。
说明提交后系统状态将变为维护实例中。
-
单击左侧导航栏的账号管理,选择用户账号页签。
-
可以看到上一步创建的用户。支持对用户进行修改权限操作,但不允许修改密码和删除。
-
如果需要删除用户,需要在AD域服务信息页签的客户端信息中指定要删除的用户。

-
步骤五:配置客户端身份验证(可选)
您需要先使用Kerberos对MySQL Client端进行身份验证,认证通过后方可正常访问PolarDB MySQL版。以下的操作需要在访问PolarDB MySQL版所在的Client端ECS上执行。
-
配置访问ECS自建AD域的/etc/krb5.conf文件。
# To opt out of the system crypto-policies configuration of krb5, remove the # symlink at /etc/krb5.conf.d/crypto-policies which will not be recreated. includedir /etc/krb5.conf.d/ [logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log # libdefaults configuration # [libdefaults]下的default_realm配置成ECS自建AD域的根域(PolarDB.Domain); [libdefaults] dns_lookup_realm = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true rdns = false pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt spake_preauth_groups = edwards25519 default_realm = POLARDB.DOMAIN default_ccache_name = KEYRING:persistent:%{uid} # realms configuration #[realms]下kdc和admin_server配置成访问ECS自建AD域对应的Domain Controller Service; [realms] POLARDB.DOMAIN = { # ad.polardb.domain配置了/etc/hosts,绑定了ECS自建AD域的IP;端口默认是88; kdc = ad.polardb.domain:88 admin_server = ad.polardb.domain:88 } # domain_realm configuration #[domain_realm]也需要按照格式配置成对应的ECS自建AD域的根域 [domain_realm] .polardb.domain = POLARDB.DOMAIN polardb.domain = POLARDB.DOMAINkinit username将
username替换成在AD域创建的Client端用户polardbmtestuser。在提示符下输入在AD域中为用户存储的密码。 -
使用以下MySQL命令登录到与AD域集成的PolarDB MySQL版数据库集群。使用主地址。
说明需保证MySQL官方客户端版本为8.0.26及以上才支持使用
authentication_kerberos_client插件。--plugin-dir指定authentication_kerberos_client.so(以及依赖的authentication_oci_client.so)所在目录。./mysql -h [主地址] -P 3306 --default-auth=authentication_kerberos_client --plugin-dir=/root/mysql-client/plugin --user=polardbmtestuser
















