Entender Microsoft Entra Connect 1.4.xx.x e desaparecimento do dispositivo

Com a implementação da versão 1.4.xx.x do Microsoft Entra Connect, os clientes podem ver alguns ou todos os seus dispositivos Windows desaparecerem de Microsoft Entra ID. Isso não é motivo de preocupação, pois essas identidades de dispositivo não são usadas por Microsoft Entra ID durante a autorização de Acesso Condicional. Essa alteração não excluirá nenhum dispositivo Windows registrado corretamente com Microsoft Entra ID para Microsoft Entra junção híbrida.

Se você vir a exclusão de objetos de dispositivo em Microsoft Entra ID excedendo o Limite de Exclusão de Exportação, permita que as exclusões passem. Como permitir que as exclusões fluam quando excedem o limite de exclusão

Histórico

Dispositivos Windows registrados como Microsoft Entra junção híbrida são representados em Microsoft Entra ID como objetos de dispositivo e podem ser usados para acesso condicional. Windows 10 dispositivos são sincronizados com a nuvem por meio do Microsoft Entra Connect, enquanto dispositivos Windows de nível inferior são registrados diretamente usando Serviços de Federação do Active Directory (AD FS) (AD FS) ou logon único contínuo.

Dispositivos Windows 10

Somente Windows 10 dispositivos com um valor de atributo userCertificate específico configurado por Microsoft Entra junção híbrida deve ser sincronizado com a nuvem Microsoft Entra Connect. Em versões anteriores do Microsoft Entra Connect, esse requisito não foi rigorosamente imposto e objetos de dispositivo desnecessários foram adicionados a Microsoft Entra ID. Esses dispositivos em Microsoft Entra ID sempre permaneceram no estado "pendente", pois esses dispositivos não tinham a intenção de serem registrados com Microsoft Entra ID.

Esta versão do Microsoft Entra Connect só sincronizará Windows 10 dispositivos que estão configurados corretamente para serem Microsoft Entra ingressados híbridos. Windows 10 objetos de dispositivo sem o userCertificate de junção Microsoft Entra serão removidos do Microsoft Entra ID.

Down-Level dispositivos Windows

Microsoft Entra Connect nunca deve sincronizar dispositivos Windows de nível inferior. Todos os dispositivos em Microsoft Entra ID sincronizados incorretamente anteriormente serão excluídos do Microsoft Entra ID. Se Microsoft Entra Connect tentar excluir dispositivos Windows de nível inferior, o dispositivo não será o que foi criado pelo Microsoft Workplace Join para MSI de computadores não Windows 10 e não pode ser consumido por nenhum outro recurso Microsoft Entra.

Alguns clientes talvez precisem revisitar How To: Plan your Microsoft Entra hybrid join implementation to register their Windows devices correctly and ensure that that devices can participate in device-based Conditional Access.

Como posso verificar quais dispositivos são excluídos com essa atualização?

Para verificar quais dispositivos são excluídos, use o script do PowerShell no script de relatório de certificado do PowerShell.

Esse script gera um relatório sobre certificados armazenados em objetos do Active Directory Computer e, especificamente, certificados emitidos pelo Microsoft Entra recurso de junção híbrida.

O script também verifica os certificados presentes na propriedade UserCertificate de um objeto Computer no AD. Para cada certificado não expirado presente, o script valida se o certificado foi emitido ou não para o Microsoft Entra recurso de junção híbrida; por exemplo, Subject Name matches CN={ObjectGUID}.

Antes dessa atualização, Microsoft Entra Connect sincronizaria para Microsoft Entra qualquer computador que contivesse pelo menos um certificado válido. Começando com Microsoft Entra Connect versão 1.4, o mecanismo de sincronização identifica Microsoft Entra certificados de junção híbrida e usará o filtro cloudfilter para impedir que o objeto do computador se sincronize para Microsoft Entra ID, a menos que haja um Microsoft Entra válido certificado de junção híbrida.

Microsoft Entra dispositivos que foram sincronizados anteriormente com o AD, mas não têm um certificado de junção híbrido Microsoft Entra válido, serão excluídos pelo mecanismo de sincronização usando o filtro CloudFiltered=TRUE.

Script de relatório de certificado do PowerShell

<#

Filename:    Export-ADSyncToolsHybridAzureADjoinCertificateReport.ps1.

DISCLAIMER:
Copyright (c) Microsoft Corporation. All rights reserved. This script is made available to you without any express, implied or statutory warranty, not even the implied warranty of  merchantability or fitness for a particular purpose, or the warranty of title or non-infringement. The entire risk of the use or the results from the use of this script remains with you.
.Synopsis
This script generates a report about certificates stored in Active Directory Computer objects, specifically, 
certificates issued by the Microsoft Entra hybrid join feature.
.DESCRIPTION
It checks the certificates present in the UserCertificate property of a Computer object in AD and, for each 
non-expired certificate present, validates if the certificate was issued for the Microsoft Entra hybrid join feature 
(i.e. Subject Name matches CN={ObjectGUID}).
Before, Microsoft Entra Connect would synchronize to Microsoft Entra ID any Computer that contained at least one valid 
certificate but starting on Microsoft Entra Connect version 1.4, the sync engine can identify Hybrid 
Microsoft Entra join certificates and will 'cloudfilter' the computer object from synchronizing to Microsoft Entra ID unless 
there's a valid Microsoft Entra hybrid join certificate.
Microsoft Entra Device objects that were already synchronized to AD but do not have a valid Microsoft Entra hybrid join 
certificate will be deleted (CloudFiltered=TRUE) by the sync engine.
.EXAMPLE
.\Export-ADSyncToolsHybridAzureADjoinCertificateReport.ps1 -DN 'CN=Computer1,OU=SYNC,DC=Fabrikam,DC=com'
.EXAMPLE
.\Export-ADSyncToolsHybridAzureADjoinCertificateReport.ps1 -OU 'OU=SYNC,DC=Fabrikam,DC=com' -Filename "MyHybridAzureADjoinReport.csv" -Verbose

#>
   [CmdletBinding()]
   Param
   (
       # Computer DistinguishedName
       [Parameter(ParameterSetName='SingleObject',
               Mandatory=$true,
               ValueFromPipelineByPropertyName=$true,
               Position=0)]
       [String]
       $DN,

       # AD OrganizationalUnit
       [Parameter(ParameterSetName='MultipleObjects',
               Mandatory=$true,
               ValueFromPipelineByPropertyName=$true,
               Position=0)]
       [String]
       $OU,

       # Output CSV filename (optional)
       [Parameter(Mandatory=$false,
               ValueFromPipelineByPropertyName=$false,
               Position=1)]
       [String]
       $Filename

   )

   # Generate Output filename if not provided
   If ($Filename -eq "")
   {
       $Filename = [string] "$([string] $(Get-Date -Format yyyyMMddHHmmss))_ADSyncAADHybridJoinCertificateReport.csv"
   }
   Write-Verbose "Output filename: '$Filename'"
   
   # Read AD object(s)
   If ($PSCmdlet.ParameterSetName -eq 'SingleObject')
   {
       $directoryObjs = @(Get-ADObject $DN -Properties UserCertificate)
       Write-Verbose "Starting report for a single object '$DN'"
   }
   Else
   {
       $directoryObjs = Get-ADObject -Filter { ObjectClass -like 'computer' } -SearchBase $OU -Properties UserCertificate
       Write-Verbose "Starting report for $($directoryObjs.Count) computer objects in OU '$OU'"
   }

   Write-Host "Processing $($directoryObjs.Count) directory object(s). Please wait..."
   # Check Certificates on each AD Object
   $results = @()
   ForEach ($obj in $directoryObjs)
   {
       # Read UserCertificate multi-value property
       $objDN = [string] $obj.DistinguishedName
       $objectGuid = [string] ($obj.ObjectGUID).Guid
       $userCertificateList = @($obj.UserCertificate)
       $validEntries = @()
       $totalEntriesCount = $userCertificateList.Count
       Write-verbose "'$objDN' ObjectGUID: $objectGuid"
       Write-verbose "'$objDN' has $totalEntriesCount entries in UserCertificate property."
       If ($totalEntriesCount -eq 0)
       {
           Write-verbose "'$objDN' has no Certificates - Skipped."
           Continue
       }

       # Check each UserCertificate entry and build array of valid certs
       ForEach($entry in $userCertificateList)
       {
           Try
           {
               $cert = [System.Security.Cryptography.X509Certificates.X509Certificate2] $entry
           }
           Catch
           {
               Write-verbose "'$objDN' has an invalid Certificate!"
               Continue
           }
           Write-verbose "'$objDN' has a Certificate with Subject: $($cert.Subject); Thumbprint:$($cert.Thumbprint)."
           $validEntries += $cert

       }
       
       $validEntriesCount = $validEntries.Count
       Write-verbose "'$objDN' has a total of $validEntriesCount certificates (shown above)."
       
       # Get non-expired Certs (Valid Certificates)
       $validCerts = @($validEntries | Where-Object {$_.NotAfter -ge (Get-Date)})
       $validCertsCount = $validCerts.Count
       Write-verbose "'$objDN' has $validCertsCount valid certificates (not-expired)."

       # Check for Microsoft Entra hybrid join Certificates
       $hybridJoinCerts = @()
       $hybridJoinCertsThumbprints = [string] "|"
       ForEach ($cert in $validCerts)
       {
           $certSubjectName = $cert.Subject
           If ($certSubjectName.StartsWith($("CN=$objectGuid")) -or $certSubjectName.StartsWith($("CN={$objectGuid}")))
           {
               $hybridJoinCerts += $cert
               $hybridJoinCertsThumbprints += [string] $($cert.Thumbprint) + '|'
           }
       }

       $hybridJoinCertsCount = $hybridJoinCerts.Count
       if ($hybridJoinCertsCount -gt 0)
       {
           $cloudFiltered = 'FALSE'
           Write-verbose "'$objDN' has $hybridJoinCertsCount Microsoft Entra hybrid join Certificates with Thumbprints: $hybridJoinCertsThumbprints (cloudFiltered=FALSE)"
       }
       Else
       {
           $cloudFiltered = 'TRUE'
           Write-verbose "'$objDN' has no Microsoft Entra hybrid join Certificates (cloudFiltered=TRUE)."
       }
       
       # Save results
       $r = "" | Select ObjectDN, ObjectGUID, TotalEntriesCount, CertsCount, ValidCertsCount, HybridJoinCertsCount, CloudFiltered
       $r.ObjectDN = $objDN
       $r.ObjectGUID = $objectGuid
       $r.TotalEntriesCount = $totalEntriesCount
       $r.CertsCount = $validEntriesCount
       $r.ValidCertsCount = $validCertsCount
       $r.HybridJoinCertsCount = $hybridJoinCertsCount
       $r.CloudFiltered = $cloudFiltered
       $results += $r
   }

   # Export results to CSV
   Try
   {        
       $results | Export-Csv $Filename -NoTypeInformation -Delimiter ';'
       Write-Host "Exported Hybrid Microsoft Entra Domain Join Certificate Report to '$Filename'.`n"
   }
   Catch
   {
       Throw "There was an error saving the file '$Filename': $($_.Exception.Message)"
   }

Próximas etapas

Entre em contato conosco para obter ajuda

Se você tiver dúvidas ou precisar de ajuda, crie uma solicitação de suporte ou peça ajuda à comunidade de suporte do Azure. Você também pode enviar comentários sobre o produto para a comunidade de comentários do Azure.