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執行個體配置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...,詳細參數進行如下設定。
該操作入口位於 Server Manager 的 All 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 level 和 Domain functional level 均設定為 Windows Server 2016,勾選 Domain Name System (DNS) server 和 Global Catalog (GC)。
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。
在 Full name 中填寫
polardbmtestuser,在 User logon name 中填寫polardbmtestuser,網域名稱尾碼選擇@polardb.domain,然後單擊 Next。 -
設定登入密碼,並設定密碼永不到期,然後單擊Next > Finish完成建立。
-
雙擊新建立的使用者,在
Account options裡,選定支援Kerberos AES加密方式。勾選 This account supports Kerberos AES 128 bit encryption 和 This account supports Kerberos AES 256 bit encryption 複選框。
-
按照上面建立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檔案的建議命令。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使用者時候對應的密碼。 -
-
產生
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。 -
选择文件上傳
keytab檔案,完成AD域Server資訊配置。需要將AD域產生的
keytab檔案暫存複製到本地,點擊选择文件將暫存在本地的keytab檔案進行上傳。在配置AD域Server資訊對話方塊中,Server服務識別預設為
polardbm,填寫Server端訪問地址標識(即叢集訪問地址),設定網域名稱為POLARDB.DOMAIN,AD網域服務端使用者為polardbm。對話方塊中還提供了產生Keytab檔案的參考ktpass命令。完成後單擊确定。
說明提交後系統狀態將變為維護執行個體中。
步驟四:配置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[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>