內部部署 Microsoft Entra 密碼保護疑難排解
部署 Microsoft Entra 密碼保護之後,可能需要進行疑難排解。 本文將深入說明以協助您了解一些常見的疑難排解步驟。
DC 代理程式在目錄中找不到 Proxy
此問題的主要徵兆是 DC 代理程式系統管理事件記錄檔中的 30017 事件。
此問題的常見原因是 Proxy 尚未註冊。 如果已註冊 Proxy,可能會因為 AD 複寫延遲而發生一些延遲,直到特定 DC 代理程式能夠看到該 Proxy 為止。
DC 代理程式無法與 Proxy 通訊
此問題的主要徵兆是 DC 代理程式系統管理事件記錄檔中的 30018 事件。 這個問題可能有數個可能的原因:
DC 代理程式位於網路的隔離部分,不允許網路連線到已註冊的 Proxy。 只要其他 DC 代理程式可以與 Proxy 通訊以便從 Azure 下載密碼原則,這個問題可能就是良性的。 一旦下載之後,這些原則就會透過複寫 sysvol 共用中的原則檔案,由隔離的 DC 取得。
Proxy 主機電腦封鎖對 RPC 端點對應程式端點 (連接埠 135) 的存取
Microsoft Entra 密碼保護 Proxy 安裝程式會自動建立 Windows 防火牆輸入規則,以允許存取連接埠 135。 如果此規則稍後遭到刪除或停用,則 DC 代理程式將無法與 Proxy 服務通訊。 如果已停用內建 Windows 防火牆而不是另一個防火牆產品,您必須將該防火牆設定為允許存取連接埠 135。
Proxy 主機電腦封鎖對由 Proxy 服務所接聽 RPC 端點 (動態或靜態) 的存取
Microsoft Entra 密碼保護 Proxy 安裝程式會自動建立 Windows 防火牆輸入規則,以允許存取 Azure AD 密碼保護 Proxy 服務所接聽的任何輸入連接埠。 如果此規則稍後遭到刪除或停用,則 DC 代理程式將無法與 Proxy 服務通訊。 如果已停用內建 Windows 防火牆而不是另一個防火牆產品,您必須將該防火牆設定為允許存取 Microsoft Entra 密碼保護 Proxy 服務所接聽的任何輸入連接埠。 如果 Proxy 服務已設定為在特定的靜態 RPC 連接埠上接聽 (使用
Set-AzureADPasswordProtectionProxyConfiguration
Cmdlet),則此設定可能更具體。未將 Proxy 主機電腦設定為允許網域控制站能夠登入電腦。 此行為是透過「從網路存取這台電腦」使用者權限指派來控制。 必須向樹系中所有網域的所有網域控制站授與此權限。 這項設定通常會受限於較大型網路強化工作的一部分。
Proxy 服務無法與 Azure 進行通訊
確定 Proxy 電腦可以連線到部署需求中所列的端點。
確定樹系和所有 Proxy 伺服器都已針對相同的 Azure 租用戶進行註冊。
您可以執行
Get-AzureADPasswordProtectionProxy
和Get-AzureADPasswordProtectionDCAgent
PowerShell Cmdlet 來檢查這項需求,然後比較每個傳回項目的AzureTenant
屬性。 針對正確的作業,報告的租用戶名稱在所有 DC 代理程式和 Proxy 伺服器上都必須相同。如果 Azure 租用戶註冊不符條件確實存在,則可以視需要執行
Register-AzureADPasswordProtectionProxy
和/或Register-AzureADPasswordProtectionForest
PowerShell Cmdlet 來修正此問題,並務必使用來自相同 Azure 租用戶的認證來進行所有註冊。
DC 代理程式無法將密碼原則檔案加密或解密
Microsoft Entra 密碼保護與 Microsoft 金鑰發佈服務所提供的加密和解密功能有重大的相依性。 加密或解密失敗可能會有各種不同的徵兆,並有幾個可能的原因。
確定 KDS 服務已在網域中的所有 Windows Server 2012 和更新的網域控制站上啟用和運作。
根據預設,KDS 服務的服務啟動模式會設定為手動 (觸發程式啟動)。 這項設定表示當用戶端第一次嘗試使用此服務時,其會隨需啟動。 Microsoft Entra 密碼保護可接受使用此預設服務啟動模式進行運作。
如果已將 KDS 服務啟動模式設定為 [停用],則必須先修正此設定,Microsoft Entra 密碼保護才能正常運作。
此問題的簡單測試是透過服務管理 MMC 主控台來手動啟動 KDS 服務,或使用其他管理工具 (例如,從命令提示字元主控台執行 "net start kdssvc")。 KDS 服務預期會順利啟動並繼續執行。
KDS 服務無法啟動的最常見根本原因是 Active Directory 網域控制站物件位於預設網域控制站 OU 之外。 KDS 服務不支援此設定,且此設定不是 Microsoft Entra 密碼保護所加諸的限制。 這種情況的修正方法是將網域控制站物件移至預設網域控制站 OU 下的位置。
不相容的 KDS 加密緩衝區格式從 Windows Server 2012 R2 變更為 Windows Server 2016
KDS 安全性修正是在 Windows Server 2016 (可修改 KDS 加密緩衝區格式) 中引進,這些緩衝區有時會無法在 Windows Server 2012 和 Windows Server 2012 R2 上解密。 反之亦可行;在 Windows Server 2012 和 Windows Server 2012 R2 上 KDS 加密的緩衝區在 Windows Server 2016 和更新版本上一律會成功解密。 如果您 Active Directory 網域中的網域控制站混合執行這些作業系統,可能會回報 Microsoft Entra 密碼保護解密失敗。 由於安全性修正的本質,以及不具確定性 (無法確定哪個網域控制站上的 Microsoft Entra 密碼保護 DC 代理程式會在指定時間加密資料),因此無法準確地預測這些失敗的時間或徵兆。
除了不在 Active Directory 網域中混合執行這些不相容的作業系統之外,此問題並沒有因應措施。 換句話說,您應該只執行 Windows Server 2012 和 Windows Server 2012 R2 網域控制站,或應只執行 Windows Server 2016 和上面的網域控制站。
DC 代理程式認為樹系尚未註冊
此問題的徵兆是記錄在 DC Agent\Admin 通道中的 30016 事件,其中包含:
The forest has not been registered with Azure. Password policies cannot be downloaded from Azure unless this is corrected.
此問題有兩個可能的成因。
- 樹系確實尚未註冊。 若要解決此問題,請依照部署需求中所述執行 Register-AzureADPasswordProtectionForest 命令。
- 已註冊樹系,但 DC 代理程式無法解密樹系註冊資料。 此案例的根本原因與上列問題 #2 的 DC 代理程式無法加密或解密密碼原則檔底下列出的相同。 確認這項理論的一個簡單方式是,您只會在 Windows Server 2012 或 Windows Server 2012R2 網域控制站上執行的 DC 代理程式上看到這個錯誤,而在 Windows Server 2016 和更新版本的網域控制站上執行的 DC 代理程式則正常運作。 解決方法相同:將所有網域控制站升級為 Windows Server 2016 或更新版本。
弱式密碼已被接受,但不應為
這個問題可能有數個原因。
您的 DC 代理程式正在執行的公開預覽軟體版本已過期。 請參閱公開預覽 DC 代理程式軟體已過期。
您的 DC 代理程式無法下載原則,或無法解密現有的原則。 查看上述主題中的可能原因。
密碼原則強制模式仍會設為 [稽核]。 如果發生這種情況,請使用 Microsoft Entra 密碼保護入口網站,將其重新設定為 [強制]。 如需詳細資訊,請參閱作業模式。
密碼原則已停用。 如果此設定生效,請重新設定為使用 Microsoft Entra Password Protection 入口網站啟用。 如需詳細資訊,請參閱作業模式。
您尚未在網域中的所有網域控制站上安裝 DC 代理程式軟體。 在這種情況下,很難確保遠端 Windows 用戶端在密碼變更作業期間以特定網域控制站為目標。 如果您認為您已成功以安裝 DC 代理程式軟體的特定 DC 為目標,則可藉由仔細檢查 DC 代理程式系統管理事件記錄檔來進行驗證:無論結果為何,至少會有一個事件來記錄密碼驗證的結果。 如果已變更密碼的使用者沒有任何事件,則可能會由不同的網域控制站來處理密碼變更。
做為替代測試,請在直接登入已安裝 DC 代理程式軟體的 DC 時,嘗試設定/變更密碼。 這項技術不建議用於生產環境 Active Directory 網域。
雖然 DC 代理程式軟體的累加式部署支援受限於這些限制,但 Microsoft 強烈建議您儘快在網域中的所有網域控制站上安裝 DC 代理程式軟體。
密碼驗證演算法實際上可能會如預期般運作。 請參閱如何評估密碼。
Ntdsutil.exe 無法設定弱式 DSRM 密碼
Active Directory 一律會驗證新的目錄服務修復模式密碼,以確保其符合網域的密碼複雜性需求;這種驗證也會呼叫密碼篩選 dll,例如 Microsoft Entra 密碼保護。 如果新的 DSRM 密碼遭拒絕,則會產生下列錯誤訊息:
C:\>ntdsutil.exe
ntdsutil: set dsrm password
Reset DSRM Administrator Password: reset password on server null
Please type password for DS Restore Mode Administrator Account: ********
Please confirm new password: ********
Setting password failed.
WIN32 Error Code: 0xa91
Error Message: Password doesn't meet the requirements of the filter dll's
當 Microsoft Entra 密碼保護記錄 Active Directory DSRM 密碼的密碼驗證事件記錄檔事件時,事件記錄檔訊息預期不會包含使用者名稱。 因為 DSRM 帳戶是本機帳戶,不是實際 Active Directory 網域的一部分,所以會發生這種行為。
因為有弱式 DSRM 密碼,所以網域控制站複本升階失敗
在 DC 升階程序期間,會將新的目錄服務修復模式密碼提交到網域中的現有 DC 以進行驗證。 如果新的 DSRM 密碼遭拒絕,則會產生下列錯誤訊息:
Install-ADDSDomainController : Verification of prerequisites for Domain Controller promotion failed. The Directory Services Restore Mode password does not meet a requirement of the password filter(s). Supply a suitable password.
如同上述問題,任何 Microsoft Entra 密碼保護密碼驗證結果事件在此案例中的使用者名稱皆會是空白。
本機系統管理員密碼不夠嚴密,導致網域控制站降階失敗
目前支援將仍在執行 DC 代理程式軟體的網域控制站降階。 不過,系統管理員應了解 DC 代理程式軟體會在降級程序期間繼續強制執行目前的密碼原則。 新的本機系統管理員帳戶密碼 (指定為降階作業的一部分) 會像任何其他密碼一樣受到驗證。 Microsoft 建議您在 DC 降階程序中,選擇本機系統管理員帳戶的安全密碼。
在降階成功後,網域控制站即已重新啟動,並重新以一般成員伺服器的形式執行,且 DC 代理程式軟體會回復為以被動模式執行。 其後您可以隨時將其解除安裝。
開機進入目錄服務修復模式
如果網域控制站在開機後進入目錄服務修復模式,則 DC 代理程式密碼篩選 dll 會偵測到此狀況,並將導致所有密碼驗證或強制活動停用,而不論目前作用中的原則設定為何。 DC 代理程式密碼篩選 dll 會將 10023 警告事件記錄到管理事件記錄檔,例如:
The password filter dll is loaded but the machine appears to be a domain controller that has been booted into Directory Services Repair Mode. All password change and set requests will be automatically approved. No further messages will be logged until after the next reboot.
公開預覽 DC 代理程式軟體已過期
在 Microsoft Entra 密碼保護公開預覽期間,會將 DC 代理程式軟體進行硬式編碼,以在下列日期停止處理密碼驗證要求:
- 1.2.65.0 版將於 2019 年 9 月 1 日停止處理密碼驗證要求。
- 於 2019 年 7 月 1 日 1.2.25.0 版以及先前版本停止處理密碼驗證要求。
隨著期限將至,所有時間限制的 DC 代理程式版本將會在開機時於 DC 代理程式系統管理事件記錄檔中發出 10021 事件,如下所示:
The password filter dll has successfully loaded and initialized.
The allowable trial period is nearing expiration. Once the trial period has expired, the password filter dll will no longer process passwords. Please contact Microsoft for a newer supported version of the software.
Expiration date: 9/01/2019 0:00:00 AM
This message will not be repeated until the next reboot.
一旦超過期限之後,所有時間限制的 DC 代理程式版本將會在開機時於 DC 代理程式系統管理事件記錄檔中發出 10022 事件,如下所示:
The password filter dll is loaded but the allowable trial period has expired. All password change and set requests will be automatically approved. Please contact Microsoft for a newer supported version of the software.
No further messages will be logged until after the next reboot.
由於期限只會在初始開機時予以檢查,您可能直到行事曆期限過了很長一段時間後,才會看到這些事件。 一旦辨識期限之後,除了系統會自動核准所有密碼之外,就不會對網域控制站或較大型環境造成負面影響。
重要
Microsoft 建議將過期的公開預覽 DC 代理程式立即升級為最新版本。
若要在您的環境中探索需要升級的 DC 代理程式,簡單的方法是執行 Get-AzureADPasswordProtectionDCAgent
Cmdlet,例如:
PS C:\> Get-AzureADPasswordProtectionDCAgent
ServerFQDN : bpl1.bpl.com
SoftwareVersion : 1.2.125.0
Domain : bpl.com
Forest : bpl.com
PasswordPolicyDateUTC : 8/1/2019 9:18:05 PM
HeartbeatUTC : 8/1/2019 10:00:00 PM
AzureTenant : bpltest.onmicrosoft.com
在本主題中,SoftwareVersion 欄位顯然是要查看的索引鍵屬性。 您也可以使用 PowerShell 篩選來篩選掉已等於或高於所需基準版本的 DC 代理程式,例如:
PS C:\> $LatestAzureADPasswordProtectionVersion = "1.2.125.0"
PS C:\> Get-AzureADPasswordProtectionDCAgent | Where-Object {$_.SoftwareVersion -lt $LatestAzureADPasswordProtectionVersion}
在任何版本中,Microsoft Entra 密碼保護 Proxy 軟體都不會有時間限制。 Microsoft 仍建議將 DC 和 Proxy 代理程式升級為最新版本,因為其皆已發行。 此 Get-AzureADPasswordProtectionProxy
Cmdlet 可用來尋找需要升級的 Proxy 代理程式,類似於上述的 DC 代理程式範例。
如需特定升級程序的其他詳細資訊,請參閱升級 DC 代理程式及升級 Proxy 服務。
緊急補救
如果發生 DC 代理程式服務造成問題的情況,可以立即將 DC 代理程式服務關閉。 DC 代理程式密碼篩選 dll 仍會嘗試呼叫非執行中服務,且會記錄警告事件 (10012、10013),但在這段期間傳入的所有密碼都會被接受。 隨後如有需要,也可以透過 Windows 服務控制管理員,在啟動類型設為 [已停用] 的情況下設定 DC 代理程式服務。
另一個補救措施是在 Microsoft Entra 密碼保護入口網站中,將啟用模式設為 [否]。 下載更新的原則之後,每個 DC 代理程式服務都將進入靜止模式,在此模式中會依原樣接受所有密碼。 如需詳細資訊,請參閱作業模式。
移除
如果決定要將 Microsoft Entra 密碼保護軟體解除安裝,並從網域和樹系清除所有相關的狀態,您可以使用下列步驟來完成這項工作:
重要
這些步驟務必要依序執行。 如果有任何 Proxy 服務的執行個體仍繼續執行,它將會定期重新建立其 serviceConnectionPoint 物件。 如果有任何 DC 代理程式服務的執行個體仍繼續執行,它將會定期重新建立其 serviceConnectionPoint 物件與 sysvol 狀態。
從所有機器解除安裝 Proxy 軟體。 此步驟不需要重新開機。
從所有網域控制站解除安裝 DC 代理程式軟體。 此步驟需要重新開機。
手動移除每個網域命名內容中的所有 Proxy 服務連接點。 您可以使用下列 Active Directory PowerShell 命令來找出這些物件的位置:
$scp = "serviceConnectionPoint" $keywords = "{ebefb703-6113-413d-9167-9f8dd4d24468}*" Get-ADObject -SearchScope Subtree -Filter { objectClass -eq $scp -and keywords -like $keywords }
請勿省略 $keywords 變數值結尾處的星號 ("*")。
透過
Get-ADObject
命令找到的產生物件隨後可使用管線傳送到Remove-ADObject
,或以手動方式刪除。手動移除在每個網域命名內容中所有的 DC 代理程式連接點。 樹系中的每個網域控制站可能各有一個此類物件,視先前部署軟體的範圍而定。 您可以使用下列 Active Directory PowerShell 命令來找出該物件的位置:
$scp = "serviceConnectionPoint" $keywords = "{2bac71e6-a293-4d5b-ba3b-50b995237946}*" Get-ADObject -SearchScope Subtree -Filter { objectClass -eq $scp -and keywords -like $keywords }
透過
Get-ADObject
命令找到的產生物件隨後可使用管線傳送到Remove-ADObject
,或以手動方式刪除。請勿省略 $keywords 變數值結尾處的星號 ("*")。
手動移除樹系層級的組態狀態。 樹系組態狀態會保存在 Active Directory 組態命名內容中的容器內。 您可以依照下列方式加以探索和刪除:
$passwordProtectionConfigContainer = "CN=Azure AD Password Protection,CN=Services," + (Get-ADRootDSE).configurationNamingContext Remove-ADObject -Recursive $passwordProtectionConfigContainer
手動刪除下列資料夾及其所有內容,以手動移除所有 sysvol 相關狀態:
\\<domain>\sysvol\<domain fqdn>\AzureADPasswordProtection
如有必要,也可在指定的網域控制站上從本機存取此路徑;預設位置會類似於下列路徑:
%windir%\sysvol\domain\Policies\AzureADPasswordProtection
如果已將 sysvol 共用設定於非預設位置中,此路徑將會不同。
使用 PowerShell Cmdlet 的健康情況測試
AzureADPasswordProtection PowerShell 模組包含兩個健康情況相關的 Cmdlet,可執行軟體已安裝且正常運作的基本驗證。 建議您在設定新的部署之後,以及調查問題時,執行這些 Cmdlet。
每個個別的健康情況測試都會傳回基本的 [成功] 或 [失敗] 結果,以及失敗時的選擇性訊息。 如果未清除失敗的原因,請尋找可能解釋失敗的錯誤事件記錄檔訊息。 啟用文字記錄訊息可能也很有用。 如需詳細資訊,請參閱監視 Microsoft Entra 密碼保護。
Proxy 健康情況測試
Test-AzureADPasswordProtectionProxyHealth Cmdlet 支援兩種可個別執行的健康情況測試。 第三種模式可讓您執行所有不需要任何參數輸入的測試。
Proxy 註冊驗證
這項測試會確認 Proxy 代理程式已正確地向 Azure 註冊,且能夠向 Azure 進行驗證。 成功執行如下所示:
PS C:\> Test-AzureADPasswordProtectionProxyHealth -VerifyProxyRegistration
DiagnosticName Result AdditionalInfo
-------------- ------ --------------
VerifyProxyRegistration Passed
如果偵測到錯誤,測試將會傳回 [失敗] 結果和選擇性的錯誤訊息。 以下是一個可能的失敗範例:
PS C:\> Test-AzureADPasswordProtectionProxyHealth -VerifyProxyRegistration
DiagnosticName Result AdditionalInfo
-------------- ------ --------------
VerifyProxyRegistration Failed No proxy certificates were found - please run the Register-AzureADPasswordProtectionProxy cmdlet to register the proxy.
端對端 Azure 連線能力的 Proxy 驗證
這項測試是 -VerifyProxyRegistration 測試的超集合。 Proxy 代理程式需要正確地向 Azure 註冊、能夠向 Azure 進行驗證,最後再新增訊息是否可成功傳送至 Azure 的檢查,藉此確認完整的端對端通訊可正常運作。
成功執行如下所示:
PS C:\> Test-AzureADPasswordProtectionProxyHealth -VerifyAzureConnectivity
DiagnosticName Result AdditionalInfo
-------------- ------ --------------
VerifyAzureConnectivity Passed
所有測試的 Proxy 驗證
此模式可讓您執行不需要參數輸入的 Cmdlet 所支援所有測試的大量執行。 成功執行如下所示:
PS C:\> Test-AzureADPasswordProtectionProxyHealth -TestAll
DiagnosticName Result AdditionalInfo
-------------- ------ --------------
VerifyTLSConfiguration Passed
VerifyProxyRegistration Passed
VerifyAzureConnectivity Passed
DC 代理程式健康情況測試
Test-AzureADPasswordProtectionDCAgentHealth Cmdlet 支援數種可個別執行的健康情況測試。 第三種模式可讓您執行所有不需要任何參數輸入的測試。
基本 DC 代理程式健康情況測試
下列測試可以個別執行,而且不接受參數。 下表中列出每個測試的簡短描述。
DC 代理程式健康情況測試 | 描述 |
---|---|
-VerifyPasswordFilterDll | 確認密碼篩選 dll 目前已載入,並且能夠呼叫 DC 代理程式服務 |
-VerifyForestRegistration | 確認目前已註冊樹系 |
-VerifyEncryptionDecryption | 使用 Microsoft KDS 服務驗證基本加密和解密是否正常運作 |
-VerifyDomainIsUsingDFSR | 確認目前網域使用 DFSR 進行 sysvol 複寫 |
-VerifyAzureConnectivity | 使用任何可用的 Proxy 確認與 Azure 的端對端通訊是否正常運作 |
以下是 -VerifyPasswordFilterDll 測試傳遞的範例;其他測試看起來會像成功:
PS C:\> Test-AzureADPasswordProtectionDCAgentHealth -VerifyPasswordFilterDll
DiagnosticName Result AdditionalInfo
-------------- ------ --------------
VerifyPasswordFilterDll Passed
所有測試的 DC 代理程式驗證
此模式可讓您執行不需要參數輸入的 Cmdlet 所支援所有測試的大量執行。 成功執行如下所示:
PS C:\> Test-AzureADPasswordProtectionDCAgentHealth -TestAll
DiagnosticName Result AdditionalInfo
-------------- ------ --------------
VerifyPasswordFilterDll Passed
VerifyForestRegistration Passed
VerifyEncryptionDecryption Passed
VerifyDomainIsUsingDFSR Passed
VerifyAzureConnectivity Passed
使用特定 Proxy 伺服器的連線能力測試
許多疑難排解情況都牽涉到調查 DC 代理程式與 Proxy 之間的網路連線能力。 有兩個健康情況測試可供您特別專注於這類問題。 這些測試需要指定特定的 Proxy 伺服器。
驗證 DC 代理程式與特定 Proxy 之間的連線能力
這種測試會驗證從 DC 代理程式到 Proxy 第一個通訊階段的連線能力。 其會驗證 Proxy 是否會收到呼叫,但不涉及與 Azure 的通訊。 成功執行看起來像這樣:
PS C:\> Test-AzureADPasswordProtectionDCAgentHealth -VerifyProxyConnectivity bpl2.bpl.com
DiagnosticName Result AdditionalInfo
-------------- ------ --------------
VerifyProxyConnectivity Passed
以下是在目標伺服器上所執行 Proxy 服務已停止的範例失敗狀況:
PS C:\> Test-AzureADPasswordProtectionDCAgentHealth -VerifyProxyConnectivity bpl2.bpl.com
DiagnosticName Result AdditionalInfo
-------------- ------ --------------
VerifyProxyConnectivity Failed The RPC endpoint mapper on the specified proxy returned no results; please check that the proxy service is running on that server.
驗證 DC 代理程式與 Azure (使用特定 Proxy) 之間的連線能力
此測試會使用特定的 Proxy 來驗證 DC 代理程式與 Azure 之間的完整端對端連線能力。 成功執行看起來像這樣:
PS C:\> Test-AzureADPasswordProtectionDCAgentHealth -VerifyAzureConnectivityViaSpecificProxy bpl2.bpl.com
DiagnosticName Result AdditionalInfo
-------------- ------ --------------
VerifyAzureConnectivityViaSpecificProxy Passed
下一步
Microsoft Entra Password Protection 常見問題集
如需關於全域和自訂禁用密碼清單的詳細資訊,請參閱禁用不當密碼一文