內部部署 Microsoft Entra 密碼保護疑難排解

部署 Microsoft Entra Password Protection 之後,可能需要進行疑難排解。 本文將詳細說明,以協助您瞭解一些常見的疑難排解步驟。

DC 代理程式在目錄中找不到 Proxy

此問題的主要徵兆是 DC 代理程式管理員事件記錄檔中的 30017 事件。

此問題的一般原因是 Proxy 尚未註冊。 如果 Proxy 已註冊,可能會因為 AD 複寫延遲而造成一些延遲,直到特定 DC 代理程式能夠看到該 Proxy 為止。

DC 代理程式無法與 Proxy 通訊

此問題的主要徵兆是 DC 代理程式管理員事件記錄檔中的 30018 事件。 此問題可能有數個可能的原因:

  1. DC 代理程式位於不允許網路連線到已註冊 Proxy 的隔離部分。 只要其他 DC 代理程式可以與 Proxy 通訊,以便從 Azure 下載密碼原則,這個問題可能會是良性的。 下載之後,這些原則將會透過 sysvol 共用中原則檔案的複寫,由隔離 DC 取得。

  2. Proxy 主機電腦封鎖對 RPC 端點對應程式端點的存取 (埠 135)

    Microsoft Entra Password Protection Proxy 安裝程式會自動建立 Windows 防火牆輸入規則,以允許存取埠 135。 如果稍後刪除或停用此規則,DC 代理程式將無法與 Proxy 服務通訊。 如果內建的 Windows 防火牆已停用,而不是另一個防火牆產品,您必須設定該防火牆以允許存取埠 135。

  3. Proxy 主機電腦封鎖對 Proxy 服務接聽的 RPC 端點 (動態或靜態) 的存取

    Microsoft Entra Password Protection Proxy 安裝程式會自動建立 Windows 防火牆輸入規則,以允許存取 Microsoft Entra Password Protection Proxy 服務所接聽的任何輸入埠。 如果稍後刪除或停用此規則,DC 代理程式將無法與 Proxy 服務通訊。 如果內建的 Windows 防火牆已停用,而不是另一個防火牆產品,您必須設定該防火牆,以允許存取 Microsoft Entra Password Protection Proxy 服務所接聽的任何輸入埠。 如果 Proxy 服務已設定為接聽特定靜態 RPC 埠(使用 Set-AzureADPasswordProtectionProxyConfiguration Cmdlet),此組態可能會更具體。

  4. Proxy 主機電腦未設定為允許網域控制站登入電腦的能力。 此行為是透過「從網路存取這部電腦」使用者許可權指派來控制。 樹系中所有網域中的所有網域控制站都必須獲得此許可權。 此設定通常會受限於較大的網路強化工作。

Proxy 服務無法與 Azure 通訊

  1. 請確定 Proxy 電腦能夠連線到部署需求 中列出的 端點。

  2. 請確定樹系和所有 Proxy 伺服器都會向相同的 Azure 租使用者註冊。

    您可以執行 Get-AzureADPasswordProtectionProxyGet-AzureADPasswordProtectionDCAgent PowerShell Cmdlet 來檢查這項需求,然後比較 AzureTenant 每個傳回專案的 屬性。 若要進行正確的作業,報告租使用者名稱在所有 DC 代理程式和 Proxy 伺服器中都必須相同。

    如果 Azure 租使用者註冊條件不符,您可以視需要執行 Register-AzureADPasswordProtectionProxy 和/或 Register-AzureADPasswordProtectionForest PowerShell Cmdlet 來修正此問題,請務必針對所有註冊使用來自相同 Azure 租使用者的認證。

DC 代理程式無法加密或解密密碼原則檔案

Microsoft Entra Password Protection 對於 Microsoft 金鑰散發服務所提供的加密和解密功能具有重大相依性。 加密或解密失敗可能會顯示各種徵兆,而且有數個可能的原因。

  1. 確定在網域中的所有 Windows Server 2012 和更新版本網域控制站上都已啟用 KDS 服務並正常運作。

    根據預設,KDS 服務的服務啟動模式會設定為 [手動] (觸發程式啟動)。 此組態表示用戶端第一次嘗試使用服務時,就會視需要啟動。 Microsoft Entra Password Protection 可以接受此預設服務啟動模式。

    如果 KDS 服務啟動模式已設定為 [已停用],則必須先修正此設定,Microsoft Entra Password Protection 才能正常運作。

    此問題的簡單測試是透過服務管理 MMC 主控台或其他管理工具手動啟動 KDS 服務(例如,從命令提示字元主控台執行 「net start kdssvc」。 KDS 服務應該會順利啟動並持續執行。

    KDS 服務無法啟動最常見的根本原因是 Active Directory 網域控制站物件位於預設網域控制站 OU 外部。 KDS 服務不支援此組態,而且不是 Microsoft Entra Password Protection 所強加的限制。 此條件的修正方式是將網域控制站物件移至預設網域控制站 OU 下的位置。

  2. 不相容的 KDS 加密緩衝區格式從 Windows Server 2012 R2 變更為 Windows Server 2016

    Windows Server 2016 引進了 KDS 安全性修正程式,可修改 KDS 加密緩衝區的格式;這些緩衝區有時無法在 Windows Server 2012 和 Windows Server 2012 R2 上解密。 反向方向沒問題 - Windows Server 2012 和 Windows Server 2012 R2 上 KDS 加密的緩衝區一律會在 Windows Server 2016 和更新版本上成功解密。 如果您的 Active Directory 網域中的網域控制站正在執行這些作業系統的混合,可能會回報偶爾的 Microsoft Entra Password Protection 解密失敗。 鑒於安全性修正的性質,無法準確預測這些失敗的時機或徵兆,並假設這是不具決定性的 Microsoft Entra Password Protection DC 代理程式,網域控制站將在指定時間加密資料。

    除了不要在您的 Active Directory 網域中執行這些不相容的作業系統混合以外,此問題沒有因應措施。 換句話說,您應該只執行 Windows Server 2012 和 Windows Server 2012 R2 網域控制站,或者您應該只執行 Windows Server 2016 和更新版本網域控制站。

DC 代理程式認為樹系尚未註冊

此問題的徵兆是 30016 事件,會記錄在 DC Agent\管理員 通道中,其中部分說明:

The forest has not been registered with Azure. Password policies cannot be downloaded from Azure unless this is corrected.

此問題有兩個可能的原因。

  1. 森林確實尚未登記。 若要解決此問題,請執行 Register-AzureADPasswordProtectionForest 命令,如部署需求 中所述
  2. 樹系已註冊,但 DC 代理程式無法解密樹系註冊資料。 此案例的根本原因與上述 DC 代理程式下 所列的問題 #2 相同,無法加密或解密密碼原則檔案 。 確認此理論的簡單方式是,您只會在 Windows Server 2012 或 Windows Server 2012R2 網域控制站上執行的 DC 代理程式上看到此錯誤,而 Windows Server 2016 和更新版本的網域控制站上執行的 DC 代理程式則沒問題。 因應措施相同:將所有網域控制站升級至 Windows Server 2016 或更新版本。

接受弱式密碼,但不應接受

這個問題可能有數個原因。

  1. 您的 DC 代理程式正在執行已過期的公開預覽軟體版本。 請參閱 公開預覽 DC 代理程式軟體已過期

  2. 您的 DC 代理程式無法下載原則或無法解密現有的原則。 檢查上述主題中是否有可能的原因。

  3. 密碼原則 [強制執行模式] 仍然設定為 [稽核]。 如果此設定生效,請將其重新設定為使用 Microsoft Entra Password Protection 入口網站強制執行。 如需詳細資訊,請參閱 作業 模式。

  4. 密碼原則已停用。 如果此設定生效,請將其重新設定為使用 Microsoft Entra Password Protection 入口網站啟用。 如需詳細資訊,請參閱 作業 模式。

  5. 您尚未在網域中的所有網域控制站上安裝 DC 代理程式軟體。 在此情況下,很難確保遠端 Windows 用戶端在密碼變更作業期間以特定網域控制站為目標。 如果您認為已成功將 DC 代理程式軟體安裝的目標設為特定 DC,您可以按兩下 DC 代理程式管理員事件記錄檔來進行驗證:不論結果為何,至少會有一個事件來記錄密碼驗證的結果。 如果變更密碼的使用者沒有任何事件存在,則密碼變更可能會由不同的網域控制站處理。

    作為替代測試,請嘗試在直接登入 DC 代理程式軟體的 DC 時設定\變更密碼。 不建議將這項技術用於生產 Active Directory 網域。

    雖然受這些限制支援 DC 代理程式軟體的累加部署,但 Microsoft 強烈建議 DC 代理程式軟體儘快安裝在網域中的所有網域控制站上。

  6. 密碼驗證演算法實際上可能如預期般運作。 請參閱 如何評估 密碼。

Ntdsutil.exe 無法設定弱式 DSRM 密碼

Active Directory 一律會驗證新的目錄服務修復模式密碼,以確保它符合網域的密碼複雜度需求;此驗證也會呼叫密碼篩選 dll,例如 Microsoft Entra Password Protection。 如果拒絕新的 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 Password Protection 記錄 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 Password Protection 密碼驗證結果事件都會有此案例的空白使用者名稱。

網域控制站降級因為弱式本機管理員istrator 密碼而失敗

支援降級仍在執行 DC 代理程式軟體的網域控制站。 管理員istrators 應該知道 DC 代理程式軟體會在降級程式期間繼續強制執行目前的密碼原則。 新的本機管理員istrator 帳戶密碼(指定為降級作業的一部分)會像任何其他密碼一樣進行驗證。 Microsoft 建議為本機管理員istrator 帳戶選擇安全密碼,作為 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 Password Protection 公開預覽期間,DC 代理程式軟體經過硬式編碼,以在下列日期停止處理密碼驗證要求:

  • 1.2.65.0 版將於 2019 年 9 月 1 日停止處理密碼驗證要求。
  • 於 2019 年 7 月 1 日 1.2.25.0 版以及先前版本停止處理密碼驗證要求。

隨著期限的臨近,所有限時 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 an 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 代理程式版本都會在開機時間發出 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 Password Protection Proxy 軟體在任何版本中都不會有時間限制。 Microsoft 仍建議 DC 和 Proxy 代理程式在發行時升級至最新版本。 Get-AzureADPasswordProtectionProxyCmdlet 可用來尋找需要升級的 Proxy 代理程式,類似于上述 DC 代理程式的範例。

如需 特定升級程式的詳細資訊,請參閱升級 DC 代理程式和 升級 Proxy 服務

緊急補救

如果發生 DC 代理程式服務造成問題的情況,DC 代理程式服務可能會立即關閉。 DC 代理程式密碼篩選 dll 仍會嘗試呼叫非執行中的服務,並將記錄警告事件 (10012, 10013),但在此期間會接受所有傳入的密碼。 然後,也可以透過 Windows 服務控制管理員設定 DC 代理程式服務,並視需要啟動類型為「已停用」。

另一個補救措施是在 Microsoft Entra Password Protection 入口網站中將 [啟用] 模式設定為 [否]。 下載更新的原則之後,每個 DC 代理程式服務都會進入靜止模式,其中所有密碼都已依原狀接受。 如需詳細資訊,請參閱 作業 模式。

去除

如果決定卸載 Microsoft Entra 密碼保護軟體,並從網域和樹系清除所有相關狀態,則可以使用下列步驟來完成這項工作:

重要

請務必依序執行這些步驟。 如果 Proxy 服務的任何實例保持執行狀態,它會定期重新建立其服務連線ionPoint 物件。 如果 DC 代理程式服務的任何實例保持執行狀態,它會定期重新建立其服務連線ionPoint 物件和 sysvol 狀態。

  1. 從所有機器卸載 Proxy 軟體。 此步驟不需要 重新開機。

  2. 從所有網域控制站卸載 DC 代理程式軟體。 此步驟 需要 重新開機。

  3. 手動移除每個網域命名內容中的所有 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 ,或手動刪除。

  4. 手動移除每個網域命名內容中的所有 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變數值結尾處的星號 (「*」。

  5. 手動移除樹系層級設定狀態。 樹系組態狀態會在 Active Directory 組態命名內容中的容器中維護。 您可以探索並刪除它,如下所示:

    $passwordProtectionConfigContainer = "CN=Azure AD Password Protection,CN=Services," + (Get-ADRootDSE).configurationNamingContext
    Remove-ADObject -Recursive $passwordProtectionConfigContainer
    
  6. 手動刪除下列資料夾及其所有內容,以手動移除所有 sysvol 相關狀態:

    \\<domain>\sysvol\<domain fqdn>\AzureADPasswordProtection

    如有必要,您也可以在指定的網域控制站本機存取此路徑;預設位置會類似下列路徑:

    %windir%\sysvol\domain\Policies\AzureADPasswordProtection

    如果 sysvol 共用已設定在非預設位置,則此路徑會有所不同。

使用 PowerShell Cmdlet 進行健康情況測試

AzureADPasswordProtection PowerShell 模組包含兩個健康情況相關的 Cmdlet,可執行軟體安裝及運作的基本驗證。 建議您在設定新的部署之後,以及調查問題時,執行這些 Cmdlet。

每個個別健康情況測試都會傳回基本通過或失敗的結果,加上失敗時的選擇性訊息。 如果失敗的原因不清楚,請尋找可能會說明失敗的錯誤事件記錄檔訊息。 啟用文字記錄訊息可能也很有用。 如需詳細資訊,請參閱 監視 Microsoft Entra Password Protection

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 複寫
-VerifyAzure連線ivity 確認與 Azure 的端對端通訊正在使用任何可用的 Proxy 運作

以下是 -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 密碼保護的常見問題

如需全域和自訂禁用密碼清單的詳細資訊,請參閱禁止不正確的密碼一文