PolarDB MySQL接入自建AD域

本文介绍了在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实例PolarDB MySQL版接入自建域必须使用内网,ECS需要满足以下条件:

    • 系统镜像版本选择Windows Server 2016及以上版本,语言选择英文。

  • 创建ECS实例。访问PolarDB MySQL版 Client端认证ECS需要满足以下条件:

    • 访问PolarDB MySQL版 Client端所在ECS与目标PolarDB MySQL版集群处于相同VPC。

    • 访问PolarDB MySQL版 Client端所在ECS与AD域控制器所在ECS处于相同VPC。

  • 登录的阿里云账号为主账号。

操作步骤

步骤一:ECS实例配置AD域控制器(可选)

  1. 远程登录ECS的Windows Server 2022系统。

    说明

    AD域控制器需要建立在Windows Server操作系统之上,建议使用Windows Server 2016及以上版本,本示例以Windows Server 2022为例。

  2. 搜索Server Manager并打开。

  3. 单击Add roles and features详细参数进行如下设置。

    页面名称

    设置说明

    Installation Type

    保持默认设置。

    Server Selection

    保持默认设置。

    Server Roles

    • 选中Active Directory Domain Services,并在弹出的对话框中单击Add Features

    • 选中DNS Server,并在弹出的对话框中单击Add Features。如果提示您电脑不是固定IP,建议您修改电脑为固定IP,防止IP自动变更导致DNS服务器无法使用。

    image

    Features

    保持默认设置。

    AD DS

    保持默认设置。

    DNS Server

    保持默认设置。

    Confirmation

    单击Install进行安装。

  4. 等待安装完成后,单击Close关闭页面。

  5. 在左侧导航栏单击AD DS,然后在右上方单击More

    image

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

    image

    页面名称

    设置说明

    Deployment Configuration

    选择Add a new forest,设置域名。

    image

    Domain Controller Options

    设置恢复模式密码。

    image

    DNS Options

    取消选中Create DNS delegation选项。

    image

    Additional Options

    保持默认设置。

    Paths

    保持默认设置。

    Review Options

    保持默认设置。

    Prerequisites Check

    单击Install进行安装。

    说明

    安装完成后系统会重启。

  7. 等待系统重启,再次搜索Server Manager并打开。

  8. 在左侧导航栏单击AD DS,然后在右侧目标域控服务器上单击鼠标右键,选择Active Directory Users and Computers,进入AD用户管理模块。

    image

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

    image

  10. 设置登录的用户,然后单击Next

    image

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

    image

  12. 双击新创建的用户,在Account options里,选定支持Kerberos AES加密方式。

    image

  13. 按照上面创建User的方式,再创建一个User对应为polardbm。这里创建的两个User,polardbmtestuser用户用于Client访问,polardbm用户用于PolarDB MySQL Server端认证。

    image

步骤二:配置ECS实例安全组规则(可选)

  1. 登录ECS管理控制台

  2. 在左侧导航栏,选择实例与镜像>实例

  3. 在顶部菜单栏左上角处,选择地域

  4. 实例页面中,单击目标ECS实例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。

步骤三:配置PolarDB MySQL版AD域服务端配置信息

  1. 访问PolarDB集群列表,在上方选择地域,然后单击目标集群ID。

  2. 单击左侧导航栏的账号管理,选择AD域服务信息页签。首次打开AD域服务信息页签,包含了两部分配置:AD域服务端配置和客户端信息配置

    image

  3. 单击AD域服务端配置

    image

    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文件的建议命令。

    image

    说明

    Kerberos Keytab(简称keytab)是一个二进制文件,它存储了Kerberos安全领域内服务主体(Service Principal Names,SPNs)与相应加密密钥的映射关系。这个文件对于 Kerberos认证过程至关重要。如果您使用AD域作为Kerberos KDC管理,建议使用ktpass命令生成keytab文件,-out xxx.keytab需要替换成具体生成keytab的名称,-pass yourPassword需要替换成在AD域创建polardbm用户时候对应的密码。

  4. 生成keytab文件。

    在ECS AD域环境中生成keytab文件,打开Windows PowerShell

    image

    执行生成keytab命令。

    image

    确认输出信息没有异常的报错,通过setspn命令查看polardbm成功映射SPN。

  5. 选择文件上传keytab文件,完成AD域Server信息配置。

    需要将AD域生成的keytab文件暂存复制到本地,点击选择文件将暂存在本地的keytab文件进行上传。

    image

    完成后单击确定

    说明

    提交后系统状态将变为维护实例中

步骤四:配置PolarDB MySQL版客户端信息

  1. 单击左侧导航栏的账号管理,选择AD域服务信息页签,单击客户端信息配置

    image

  2. 创建AD域客户端访问用户内,填写客户端用户域名

    image

    客户端用户:在PolarDB MySQL版集群中创建一个基于Kerberos认证的访问用户,这里对应是在ECS自建域创建的Client端用户(polardbmtestuser)。

    域名:这里对应的是ECS自建域创建的根域名(POLARDB.DOMAIN)。

    完成后单击确定

    说明

    提交后系统状态将变为维护实例中

  3. 单击左侧导航栏的账号管理,选择用户账号页签。

    • 可以看到上一步创建的用户。支持对用户进行修改权限操作,但不允许修改密码删除

    • 如果需要删除用户,需要在AD域服务信息页签的客户端信息中指定要删除的用户。

    image

步骤五:配置客户端身份验证(可选)

您需要先使用Kerberos对MySQL Client端进行身份验证,认证通过后方可正常访问PolarDB MySQL版。以下的操作需要在访问PolarDB MySQL版所在的Client端ECS上执行。

  1. 配置访问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域中为用户存储的密码。

  2. 使用以下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

    image