Guia prático, completo e seguro para sincronizar e fundir contas do Active Directory local com identidades já existentes no Entra ID (Azure AD), corrigindo erros de proxyAddresses duplicados e unificando logon com SSO de forma previsível.
Contexto e sintomas
Ao habilitar o Azure AD Connect em modo híbrido, é comum encontrar falhas de acoplamento entre identidades locais e objetos que já existem no Microsoft 365. Um sintoma frequente é o erro:
Unable to update this object. Another object with the same value for property ProxyAddresses exists.
Exemplo: duplicate ProxyAddresses SMTP:usuario@dominio.com
Isso ocorre porque o mesmo endereço SMTP está presente na conta local (on-premises) e também em um objeto na nuvem (usuário, caixa compartilhada, sala, grupo habilitado para e-mail ou contato). O Azure AD Connect não consegue “fundir” os objetos e interrompe a sincronização desse item até que o conflito seja removido.
Visão geral da correspondência de identidades
Existem dois mecanismos para “casar” o objeto local com o objeto existente no Entra ID:
- Soft Match: tentativa automática de correspondência baseada em UPN e/ou proxyAddresses (SMTP principal). Se o UPN e/ou o SMTP principal do usuário on‑prem coincidirem com os da conta na nuvem, a fusão é feita automaticamente.
- Hard Match: correspondência explícita definindo o
ImmutableId
no objeto de nuvem para o valor derivado do anchor do AD local (por padrão, mS-DS-ConsistencyGuid e, na ausência dele, o objectGUID). É a abordagem determinística quando o Soft Match falha.
Em ambas as abordagens, cada endereço SMTP precisa ser único em todo o tenant. Se houver duplicidade, a exportação para a nuvem falhará.
Pré‑requisitos essenciais
- Domínios verificados: todos os sufixos usados em UPN e e‑mail (ex.: @empresa.co.mz, @empresa.com.br) devem estar verificados no tenant.
- Saúde do diretório: execute o IdFix para localizar duplicidades e valores inválidos em
userPrincipalName
,proxyAddresses
,mail
, entre outros. - Endereçamento consistente: defina
SMTP:principal@dominio
como primário (em maiúsculas) e demais aliases comosmtp:alias@dominio
(minúsculas). Evite caracteres especiais fora do padrão. - Âncora de identidade: saiba qual atributo sua instalação usa como sourceAnchor. Recomenda-se mS-DS-ConsistencyGuid; se ausente, o Azure AD Connect utiliza objectGUID.
- Permissões e módulos: garanta privilégios para ler o AD, executar cmdlets do Azure AD Connect e usar PowerShell do Microsoft Graph.
Roteiro de remediação
Etapa | Ação | Comandos ou observações |
---|---|---|
Soft Match | Habilitar correspondência automática por UPN/SMTP e testar com poucos usuários. | PowerShell Set-MsolDirSyncFeature -Feature EnableSoftMatchOnUpn -Enable $true Inclua a OU no escopo e force sincronização delta. |
Hard Match | Quando o Soft Match não resolve: calcular o ImmutableId a partir do AD local e aplicar no usuário de nuvem. | PowerShell $user = Get-ADUser "<sAMAccountName>" -Properties ObjectGUID,'mS-DS-ConsistencyGuid' if ($user.'mS-DS-ConsistencyGuid') { $guid = New-Object System.Guid (,$user.'mS-DS-ConsistencyGuid') } else { $guid = $user.ObjectGUID } $id = [Convert]::ToBase64String($guid.ToByteArray()) Set-MsolUser -UserPrincipalName user@dominio.com -ImmutableId $id Se já existir valor conflitando, zere antes: -ImmutableId $null . |
Resolver duplicidades | Limpar proxyAddresses duplicados no AD local (e em objetos de nuvem quando necessário). Use IdFix. | Depois de corrigir, execute sincronização delta. |
Módulo moderno | Preferir Microsoft Graph PowerShell no lugar do MSOnline (depreciado). | PowerShell Install-Module Microsoft.Graph -Scope CurrentUser Connect-MgGraph -Scopes User.ReadWrite.All Update-MgUser -UserId user@dominio.com -OnPremisesImmutableId $id |
Validar | Após o delta, conferir estado no Sync Service Manager e no portal da Microsoft. | O usuário deve aparecer como origem “Windows Server AD”. |
Procedimento detalhado
Soft Match com UPN e SMTP
O Soft Match tenta unir automaticamente objetos com UPN e/ou SMTP primário idênticos. Recomendações:
- Alinhe o UPN do AD local ao domínio de e‑mail usado no Microsoft 365.
- Garanta que o
SMTP:
primário noproxyAddresses
do AD local seja o mesmo da conta de nuvem a ser fundida. - Ative a função de Soft Match por UPN quando apropriado:
PowerShell
Set-MsolDirSyncFeature -Feature EnableSoftMatchOnUpn -Enable $true
Inclua a OU de teste no escopo de sincronização e force um ciclo delta:
PowerShell
Start-ADSyncSyncCycle -PolicyType Delta
Se o objeto casar, o conector irá join e a origem do usuário passará a “Windows Server AD”. Se não casar, não insista replicando a mesma tentativa; avance para Hard Match.
Hard Match com ImmutableID
Quando o Soft Match não resolve (por exemplo, múltiplos aliases diferentes, UPN divergente ou migrações prévias), utilize o Hard Match. Ele é determinístico e evita ambiguidade.
Passo a passo:
- Identifique o anchor usado no seu ambiente:
- Preferencial:
mS-DS-ConsistencyGuid
. - Alternativo:
objectGUID
, quando o anterior não estiver definido.
- Preferencial:
- Calcule o ImmutableId no AD local e converta para Base64.
- Defina o ImmutableId no objeto de nuvem correspondente e execute um delta.
Exemplo completo em PowerShell (AD + MSOnline):
PowerShell
1) Obter o GUID de referência (mS-DS-ConsistencyGuid ou objectGUID)
$user = Get-ADUser "<sAMAccountName>" -Properties ObjectGUID,'mS-DS-ConsistencyGuid'
if ($user.'mS-DS-ConsistencyGuid') {
$guid = New-Object System.Guid (,$user.'mS-DS-ConsistencyGuid')
} else {
$guid = $user.ObjectGUID
}
$id = [Convert]::ToBase64String($guid.ToByteArray())
2) (opcional) limpar ImmutableId antigo na nuvem
Set-MsolUser -UserPrincipalName [user@dominio.com](mailto:user@dominio.com) -ImmutableId $null
3) aplicar o novo ImmutableId ao usuário de nuvem
Set-MsolUser -UserPrincipalName [user@dominio.com](mailto:user@dominio.com) -ImmutableId $id
4) sincronizar
Start-ADSyncSyncCycle -PolicyType Delta
Equivalente com Microsoft Graph PowerShell:
PowerShell
Requer consentimento para User.ReadWrite.All
Install-Module Microsoft.Graph -Scope CurrentUser
Connect-MgGraph -Scopes User.ReadWrite.All
Limpar e aplicar
Update-MgUser -UserId [user@dominio.com](mailto:user@dominio.com) -OnPremisesImmutableId $null
Update-MgUser -UserId [user@dominio.com](mailto:user@dominio.com) -OnPremisesImmutableId $id
Resolvendo proxyAddresses duplicados
Toda identidade habilitada para e‑mail no tenant (usuários, caixas compartilhadas/salas, grupos habilitados para e‑mail e contatos de e‑mail) compete pelo mesmo espaço de endereços. Estratégia de saneamento:
- Mapeie duplicidades com IdFix e também com consultas no AD local para garantir que o conflito está eliminado na origem.
PowerShell
Pesquisar quem já possui um determinado SMTP
Get-ADObject -LDAPFilter "(proxyAddresses=SMTP:usuario@dominio.com)" -Properties proxyAddresses |
Select-Object Name, ObjectClass, DistinguishedName, proxyAddresses
- Corrija no AD local: remova ou ajuste aliases obsoletos. Lembre-se da regra de capitalização: apenas o primário em maiúsculas (
SMTP:
).
PowerShell
Exemplo: substituir primário e manter alias
Set-ADUser "<sAMAccountName>" -Replace @{proxyAddresses=@(
"SMTP:principal@dominio.com",
"smtp:alias1@dominio.com",
"smtp:alias2@dominio.com"
)}
- Objetos puramente de nuvem: se o conflito estiver em uma caixa ou grupo criado na nuvem, ajuste o endereço nesse objeto de nuvem para liberar o SMTP desejado.
Após alterações, dispare o delta e verifique as exportações no conector do Microsoft 365.
Validação após a sincronização
- No Synchronization Service Manager, verifique se as etapas de Import, Synchronization e Export concluíram sem erros para o conector on‑prem e para o conector do Microsoft 365.
- No centro de administração, o usuário deve exibir origem Windows Server AD e atributos de e‑mail/aliases vindos do AD local.
- Faça sign‑in com o UPN corporativo para confirmar o SSO e a convergência de políticas de segurança.
Cenários especiais
- Usuário versus contato: se existir um MailContact na nuvem usando o SMTP desejado, o usuário local não poderá exportar. Converta ou remova o contato antes.
- Grupos habilitados para e‑mail: endereços pertencentes a Distribution Lists ou Microsoft 365 Groups também bloqueiam a exportação; ajuste-os.
- Caixas de sala e compartilhadas: unifique os endereços, garantindo que o targetAddress e o proxyAddresses não conflitem com usuários.
- Múltiplos florestas: verifique regras de junção do Azure AD Connect entre florestas para evitar criação duplicada do mesmo usuário a partir de fontes distintas.
Erros comuns e como corrigir
- Duplicate ProxyAddresses: resolva a duplicidade em todas as classes de objeto. Não basta ajustar só o usuário.
- ImmutableId em uso: ocorre se você tentar aplicar um
ImmutableId
que já pertence a outro objeto de nuvem. Limpe o valor no objeto antigo ($null
) e repita. - UPN com domínio não verificado: altere o sufixo UPN no AD local para um domínio verificado antes de sincronizar.
- Tipo de objeto divergente: se o objeto de nuvem for um Cloud‑Only com mailbox e você criou outro usuário on‑prem com o mesmo SMTP, prefira fundir via Hard Match ao invés de recriar.
- Demora de convergência: aguarde a replicação do AD e, se necessário, execute um Initial para limpeza completa.
PowerShell
Forçar ciclo completo quando houver muitas mudanças estruturais
Start-ADSyncSyncCycle -PolicyType Initial
Boas práticas de governança
- Padrão de nomenclatura para UPN e e‑mail alinhados a domínios oficiais da organização.
- Controle de aliases: estabeleça processo para criar/aposentar endereços, evitando sprawl de proxyAddresses.
- IdFix antes de cada mudança grande: execute varreduras de qualidade de dados em ondas antes de ampliar o escopo de OU.
- Backlog de exceções: documente contas com endereços legados, apelidos históricos ou cenários de fusão de empresas.
- Automação de verificação: scripts de auditoria que sinalizam duplicidades e diferenças entre UPN e SMTP primário.
Perguntas frequentes
Preciso que o SMTP primário seja igual ao UPN?
Não é obrigatório; porém, alinhar ambos simplifica o Soft Match e reduz erros de autenticação e comunicação.
Posso editar proxyAddresses
diretamente na nuvem após habilitar a sincronização?
Evite. Com Azure AD Connect, os atributos passam a ser de origem on‑prem. Ajuste no AD local e deixe o conector exportar.
O módulo MSOnline ainda funciona?
Funciona, mas está depreciado. Prefira Microsoft Graph PowerShell para comandos de usuário e automação moderna.
Checklist rápido
- Domínios verificados no tenant.
- IdFix sem erros críticos.
- UPN e SMTP primário alinhados quando possível.
- Nenhum
proxyAddresses
duplicado. - Soft Match ativado e testado com poucos usuários.
- Hard Match aplicado quando necessário, usando
mS-DS-ConsistencyGuid
ouobjectGUID
. - Delta ou Initial executado e validado sem erros no Sync Service.
Modelos de script
Função para calcular o ImmutableId a partir do AD
PowerShell
function Get-ImmutableIdFromAD {
param(
[Parameter(Mandatory)] [string] $SamAccountName
)
$u = Get-ADUser $SamAccountName -Properties ObjectGUID,'mS-DS-ConsistencyGuid'
if ($u.'mS-DS-ConsistencyGuid') {
$g = New-Object System.Guid (,$u.'mS-DS-ConsistencyGuid')
} else {
$g = $u.ObjectGUID
}
return [Convert]::ToBase64String($g.ToByteArray())
}
Uso:
$id = Get-ImmutableIdFromAD -SamAccountName "jdoe"
$id
Aplicar Hard Match em lote
PowerShell
CSV com colunas: SamAccountName, UserPrincipalName
$users = Import-Csv .\HardMatch.csv
foreach ($row in $users) {
$id = Get-ImmutableIdFromAD -SamAccountName $row.SamAccountName
# Limpar e aplicar via Graph
Update-MgUser -UserId $row.UserPrincipalName -OnPremisesImmutableId $null
Update-MgUser -UserId $row.UserPrincipalName -OnPremisesImmutableId $id
}
Start-ADSyncSyncCycle -PolicyType Delta
Exemplo de sessão completa
PowerShell
1) Pré-checagem
Import-Module ActiveDirectory
Get-ADUser "maria.silva" -Properties mail,proxyAddresses,userPrincipalName |
Select-Object userPrincipalName, mail, proxyAddresses
2) Corrigir proxyAddresses no AD local
Set-ADUser "maria.silva" -Replace @{proxyAddresses=@(
"SMTP:maria[.silva@empresa.com](mailto:.silva@empresa.com)",
"smtp:maria@empresa.com"
)}
3) Habilitar Soft Match por UPN (opcional)
Set-MsolDirSyncFeature -Feature EnableSoftMatchOnUpn -Enable $true
4) Tentar Soft Match
Start-ADSyncSyncCycle -PolicyType Delta
5) Se não casar, Hard Match
$id = Get-ImmutableIdFromAD -SamAccountName "maria.silva"
Set-MsolUser -UserPrincipalName [maria.silva@empresa.com](mailto:maria.silva@empresa.com) -ImmutableId $null
Set-MsolUser -UserPrincipalName [maria.silva@empresa.com](mailto:maria.silva@empresa.com) -ImmutableId $id
6) Sincronizar e validar
Start-ADSyncSyncCycle -PolicyType Delta
Conferir no Sync Service Manager e no portal que a origem é "Windows Server AD"
Dicas finais
- Execute o IdFix antes de ligar a sincronização para reduzir drasticamente erros de exportação.
- Lembre da capitalização:
SMTP:
para o primário;smtp:
para aliases. - Padronize domínios e verifique seu status no tenant antes de iniciar qualquer fusão.
- Siga uma ordem segura: corrigir atributos on‑prem → habilitar Soft Match → testar um usuário → ampliar escopo de OU.
- Nos ajustes finais, dispare
Start-ADSyncSyncCycle -PolicyType Delta
e valide resultados.
Aplicando esse roteiro, as contas do AD local serão associadas corretamente às identidades existentes no Entra ID, viabilizando SSO, governança centralizada e redução de incidentes em operações de identidade.