В этой статье мы рассмотрим способ решения проблемы синхронизации паролей из on-prem Active Directory в Azure через Azure AD Connect.
Когда вы используете Password Hash Synchronization (PHS) между локальной ADDS и AzureAD, синхронизация паролей выполняется Azure AD Connect каждые 2 минуты.
При установке Azure AD Connect в Windows Server устанавливаются PowerShell модули ADSync и ADSyncDiagnostics. Вы можете использовать этот модуль для получения текущий настроек синхронизации и выполнении принудительной синхронизации.
Выведите текущие настройки синхронизации:
Get-ADSyncScheduler
AllowedSyncCycleInterval : 00:30:00 CurrentlyEffectiveSyncCycleInterval : 00:30:00 CustomizedSyncCycleInterval : NextSyncCyclePolicyType : Delta NextSyncCycleStartTimeInUTC : 4/21/2021 11:45:50 AM PurgeRunHistoryInterval : 7.00:00:00 SyncCycleEnabled : True MaintenanceEnabled : True StagingModeEnabled : False SchedulerSuspended : False SyncCycleInProgress : False
По умолчанию синхронизация данных из локальной AD в AAD выполняется каждые 30 минут (AllowedSyncCycleInterval ). Вы задать кастомный синхронизации с помощью параметра CustomizedSyncCycleInterval.
Значение SyncCycleEnabled = False
показывает, что синхронизация временно отключена. Вы можете включить ее с помощью команды:
Set-ADSyncScheduler -SyncCycleEnabled $true
Чтобы принудительно выполнить дельта синхронизацию (только изменений), выполните команду:
Start-ADSyncSyncCycle -PolicyType Delta
Это повлияет только на расписание синхронизации директории. PHS синхронизация выполняется отдельно от синхронизации директории.
Предупреждение: Password sync, no recent synchronization
На портале Azure появилось предупреждение:
Azure AD Connect Password sync: no recent synchronization
Проблема возникла после отключения сервера с ролью Azure AD Connect на несколько часов во время даунтайма инфраструктуры из за работа на оборудовании ЦОД. Синхронизация атрибутов пользователей из наземного каталога Active Directory в Azure AD заработала, но синхронизация паролей перестала работать выполнялась.
Для выявления проблем синхронизации паролей можно использовать командлет Invoke-ADSyncDiagnostics:
Import-Module ADSyncDiagnostics
Invoke-ADSyncDiagnostics -PasswordSync
В нашем случае команда вернула:
Password hash synchronization cloud configuration is enabled.
Password hash synchronization is enabled.
No password hash synchronization heartbeat is detected.
Согласно документации Microsoft, у каждого коннектора есть свой собственный канал синхронизации паролей. Если канал синхронизации паролей установлен, но коннектору не нужно синхронизировать изменения паролей (пароли в локальной AD DS не обновлялись), то в журнале событий Event Viewer каждые 30 минут будет появляться событие пульса с EventID 654:
Provision credentials ping end.
Если при запуске Invoke-ADSyncDiagnostics в журнале не было таких событий за последние три часа, то возвращается ошибка. При возникновении ошибок синхронизации паролей в Event Viewer также появляются EventID 611 и 657.
- 611:
Password synchronization failed for domain: vmblog.ru.
- 657:
Password Change Result - Anchor : B0H+OD3LM0GEnYODwdPhpg==, Result : failed, Extended Error
В этом случае, проверьте пользователю, из-под которого запущена AAD sync, предоставлены следующие права на корень локального домена ADDS.
- Replicating Directory Changes: Allow
- Replicating Directory Changes All: Allow
Команда Invoke-ADSyncDiagnostics может вернуть ошибку:
AAD Tenant: Password hash synchronization cloud configuration is disabled.
AD Connector: Password hash synchronization is disabled for all AD Connectiors.
In order to synchronize password, you need to enable password synchronization from AADConnect wizard.
В этом случае вам нужно запустить мастер AzureADConnect и включить опцию Password hash synchronization в разделе Sync -> Optional Features.
Затем проверьте, что в Task Sheduler появилось задание Azure AD Sync Scheduler. Оно должно быть активным.
Если не выполняется синхронизация пароля только для одного пользователя, выполните диагностику с помощью команды:
Invoke-ADSyncDiagnostics -PasswordSync -ADConnectorName "vmblog.ru" -DistinguishedName "CN=User1,OU=Users,DC=vmblog,DC=ru"
Если в свойствах учетной записи в AD включена опцию User must change password at next logon, это также будет препятствовать синхронизации пароля.
Дело в том, что временные пароли не синхронизируются с Azure AD. Вы можете разрешить синхронизацию временных паролей с помощью команды:
Set-ADSyncAADCompanyFeature -ForcePasswordChangeOnLogOn $true
Выполнить полную синхронизацию паролей с Azure AD с помощью PowerShell
Рассмотрим PowerShell скрипт, который запланирует полную синхронизацию паролей через Azure AD Sync.
Чтобы получить имена коннекторов в вашем домене, выполните команду:
Get-ADSyncConnector | Select Type,Name
Type Name ---- ---- Extensible2 vmblog.onmicrosoft.com - AAD AD vmblog.local
Если нет пульса, нужно выполнить полную синхронизации всех паролей с помощью следующего скрипта PowerShell:
Подставьте в значения переменных $adConnector и $aadConnector имена своих коннекторов (регистрочуствительны!). Их можно получить командой:
$adConnector = "vmblog.local"
$aadConnector = "vmblog.onmicrosoft.com - AAD"
Import-Module adsync
$c = Get-ADSyncConnector -Name $adConnector
$p = New-Object Microsoft.IdentityManagement.PowerShell.
ObjectModel.ConfigurationParameter "Microsoft.Synchronize.ForceFullPasswordSync", String, ConnectorGlobal, $null, $null, $null
$p.Value = 1
$c.GlobalParameters.Remove($p.Name)
$c.GlobalParameters.Add($p)
$c = Add-ADSyncConnector -Connector $c
# Отключить синхронизацию паролей Azure AD Connect
Set-ADSyncAADPasswordSyncConfiguration -SourceConnector $adConnector -TargetConnector $aadConnector -Enable $false
# Включить синхронизации и выполнить полную синхронизацию паролей
Set-ADSyncAADPasswordSyncConfiguration -SourceConnector $adConnector -TargetConnector $aadConnector -Enable $true
После выполнения крипта должна появится надпись:
Password Hash Sync Configuration for source "yourdomain " updated.
Подождите немного и еще раз выполите команду
Invoke-ADSyncDiagnostics
Должна появится надпись:
Latest password hash synchronization heartbeat is detected at: your_time
Если после этого выполнить Invoke-ADSyncDiagnostics, то результат будет следующим:
На портале Azure (или в Microsoft 365 Admin Center) также появилось сообщение, что синхронизация паролей теперь работает:
Password sync: recent synchronization