PolarDB MySQL接入自建AD域

更新時間:
Copy as MD

本文介紹了在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端所在ECSAD網域控制站所在ECS處於相同VPC。

  • 登入的阿里雲帳號為主帳號。

操作步驟

步驟一:ECS執行個體配置AD網域控制站(可選)

  1. 遠程登入ECSWindows 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伺服器無法使用。

    Features

    保持預設設定。

    AD DS

    保持預設設定。

    DNS Server

    保持預設設定。

    Confirmation

    單擊Install進行安裝。

  4. 等待安裝完成後,單擊Close關閉頁面。

  5. 在左側導覽列單擊AD DS,然後在右上方單擊More

  6. 單擊Promote this server to a domain...,詳細參數進行如下設定。

    該操作入口位於 Server ManagerAll Servers Task Details and Notifications 頁面,對應 Post-deployment Configuration 任務的 Action 列。

    頁面名稱

    設定說明

    Deployment Configuration

    選擇Add a new forest,設定網域名稱。

    Root domain name 中輸入 polardb.domain

    Domain Controller Options

    設定復原模式密碼。

    Domain Controller Options 頁面,將 Forest functional levelDomain functional level 均設定為 Windows Server 2016,勾選 Domain Name System (DNS) serverGlobal Catalog (GC)

    DNS Options

    取消選中Create DNS delegation選項。

    Additional Options

    保持預設設定。

    Paths

    保持預設設定。

    Review Options

    保持預設設定。

    Prerequisites Check

    單擊Install進行安裝。

    說明

    安裝完成後系統會重啟。

  7. 等待系統重啟,再次搜尋Server Manager並開啟。

  8. 在左側導覽列單擊AD DS,然後在右側目標域控伺服器上單擊滑鼠右鍵,選擇Active Directory Users and Computers,進入AD使用者管理模組。

  9. testdomain.net > Users上單擊滑鼠右鍵,選擇New > User

  10. 設定登入的使用者,然後單擊Next

    Full name 中填寫 polardbmtestuser,在 User logon name 中填寫 polardbmtestuser,網域名稱尾碼選擇 @polardb.domain,然後單擊 Next

  11. 設定登入密碼,並設定密碼永不到期,然後單擊Next > Finish完成建立。

  12. 雙擊新建立的使用者,在Account options裡,選定支援Kerberos AES加密方式。

    勾選 This account supports Kerberos AES 128 bit encryptionThis account supports Kerberos AES 256 bit encryption 複選框。

  13. 按照上面建立User的方式,再建立一個User對應為polardbm。這裡建立的兩個User,polardbmtestuser使用者用於Client訪問,polardbm使用者用於PolarDB MySQL Server端認證。

步驟二:配置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 MySQLAD網域服務端配置資訊

  1. 訪問PolarDB叢集列表,在上方選擇地區,然後單擊目的地組群ID。

  2. 單擊左側導覽列的账号管理,選擇AD域服务信息頁簽。首次開啟AD網域服務資訊頁簽,包含了兩部分配置:AD網域服務端配置和客户端信息配置

  3. 單擊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檔案的建議命令。

    ktpass -out xxx.keytab -princ polardbm/poxxx@POLARDB.DOMAIN -mapUser polardbm -pass yourPassword xxx xxx
    說明

    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

    執行產生keytab命令。

    Windows PowerShell
    Copyright (C) Microsoft Corporation. All rights reserved.
    Install the latest PowerShell for new features and improvements! https://aka.ms/PSWindows
    PS C:\Users\Administrator> ktpass -out polardbmtest.keytab -princ polardbm/xxx xxx @POLARDB.DOMAIN -mapuser polardbm -pass xxx -crypto all -ptype KRB5_NT_PRINCIPAL
    Targeting domain controller: xxx.xxx.polardb.domain
    Using legacy password setting method
    Successfully mapped polardbm/xxx xxx to polardbm.
    Key created.
    Key created.
    Key created.
    Key created.
    Key created.
    Output keytab to polardbmtest.keytab:
    Keytab version: 0x502
    keysize 71 polardbm/xxx    xxx @POLARDB.DOMAIN ptype 1 (KRB5_NT_PRINCIPAL) vno 3 etype 0x1 (DES-CBC-CRC) keylength 8 (0xda2ab510c84fce73)
    keysize 71 polardbm/xxx    xxx @POLARDB.DOMAIN ptype 1 (KRB5_NT_PRINCIPAL) vno 3 etype 0x3 (DES-CBC-MD5) keylength 8 (0xda2ab510c84fce73)
    keysize 79 polardbm/xxx    xxx @POLARDB.DOMAIN ptype 1 (KRB5_NT_PRINCIPAL) vno 3 etype 0x17 (RC4-HMAC) keylength 16 (0x6017cf909fc53f720f1020652db561e6)
    keysize 95 polardbm/xxx    xxx @POLARDB.DOMAIN ptype 1 (KRB5_NT_PRINCIPAL) vno 3 etype 0x12 (AES256-SHA1) keylength 32 (0x7b780ab91260f36c06c153c02f357bc79c90256644db6523b33d0673219b07ea3)
    keysize 79 polardbm/xxx    xxx r8@POLARDB.DOMAIN ptype 1 (KRB5_NT_PRINCIPAL) vno 3 etype 0x11 (AES128-SHA1) keylength 16 (0x3da47d2f33d0827f0a56efcbbf0bfd06)

    確認輸出資訊沒有異常的報錯,通過setspn命令查看polardbm成功映射SPN。

  5. 选择文件上傳keytab檔案,完成ADServer資訊配置。

    需要將AD域產生的keytab檔案暫存複製到本地,點擊选择文件將暫存在本地的keytab檔案進行上傳。

    配置ADServer資訊對話方塊中,Server服務識別預設為polardbm,填寫Server端訪問地址標識(即叢集訪問地址),設定網域名稱POLARDB.DOMAINAD網域服務端使用者polardbm。對話方塊中還提供了產生Keytab檔案的參考ktpass命令。

    完成後單擊确定

    說明

    提交後系統狀態將變為維護執行個體中

步驟四:配置PolarDB MySQL用戶端資訊

  1. 單擊左側導覽列的账号管理,選擇AD域服务信息頁簽,單擊客户端信息配置

  2. 建立AD域用戶端訪問使用者內,填寫客户端用户域名

    客户端用户:在PolarDB MySQL叢集中建立一個基於Kerberos認證的訪問使用者,這裡對應是在ECS自建域建立的Client端使用者(polardbmtestuser)。

    域名:這裡對應的是ECS自建域建立的根網域名稱(POLARDB.DOMAIN)。

    完成後單擊确定

    說明

    提交後系統狀態將變為維護執行個體中

  3. 單擊左側導覽列的账号管理,選擇用户账号頁簽。

    • 可以看到上一步建立的使用者。支援對使用者進行修改权限操作,但不允許修改密码刪除

    • 如果需要刪除使用者,需要在AD域服务信息頁簽的用戶端資訊中指定要刪除的使用者。

步驟五:配置用戶端驗證(可選)

您需要先使用KerberosMySQL Client端進行身分識別驗證,認證通過後方可正常訪問PolarDB MySQL。以下的操作需要在訪問PolarDB MySQL所在的ClientECS上執行。

  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]下kdcadmin_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
    [root@iZ2zee0l2f5hdwxs75m0urZ mysql-client]# ./mysql -h xxx rds.aliyuncs.com -P 3306 --default-auth=authentication_kerberos_client --plugin-dir=/root/mysql-client/plugin --user=polardbmtestuser
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 4374
    Server version: 8.0.13 Source distribution
    Copyright (c) 2000, 2024, Oracle and/or its affiliates.
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    mysql>