本文介绍了在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.DOMAIN
kinit 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