Compartilhar via


Entenda o Microsoft Entra Connect 1.4.xx.x e o 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 da ID do Microsoft Entra. Isso não é motivo de preocupação, pois essas identidades de dispositivo não são usadas pela ID do Microsoft Entra durante a autorização de Acesso Condicional. Essa alteração não excluirá nenhum dispositivo Windows que tenha sido registrado corretamente com a ID do Microsoft Entra para o ingresso híbrido do Microsoft Entra.

Se você vir a exclusão de objetos de dispositivo na ID do Microsoft Entra excedendo o Limite de Exclusão de Exportação, permita que as exclusões sejam realizadas. Como permitir que as exclusões sejam feitas quando excedem o limite de exclusão

Tela de fundo

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

Dispositivos Windows 10

Somente dispositivos Windows 10 com um valor de atributo userCertificate específico configurado pelo ingresso híbrido do Microsoft Entra devem ser sincronizados com a nuvem pelo Microsoft Entra Connect. Nas versões anteriores do Microsoft Entra Connect, esse requisito não era rigorosamente imposto e objetos de dispositivo desnecessários eram adicionados à ID do Microsoft Entra. Esses dispositivos na ID do Microsoft Entra sempre permaneceram no estado "pendente", pois esses dispositivos não deveriam ser registrados com a ID do Microsoft Entra.

Esta versão do Microsoft Entra Connect sincronizará apenas dispositivos Windows 10 configurados corretamente para ingressar no Microsoft Entra híbrido. Os objetos de dispositivo do Windows 10 sem o userCertificate específico de ingresso no Microsoft Entra serão removidos da ID do Microsoft Entra.

Dispositivos Windows de nível inferior

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

Alguns clientes podem precisar revisitar Como planejar sua implementação de ingresso híbrido do Microsoft Entra para registrar seus dispositivos Windows corretamente e garantir que esses dispositivos possam participar do Acesso Condicional baseado em dispositivo.

Como posso verificar quais dispositivos são excluídos com esta 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 de computador do Active Directory e, especificamente, certificados emitidos pelo recurso de junção híbrida do Microsoft Entra.

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 recurso de junção híbrida do Microsoft Entra; por exemplo, Subject Name matches CN={ObjectGUID}.

Antes dessa atualização, o Microsoft Entra Connect sincronizava com o Microsoft Entra qualquer computador que contivesse pelo menos um certificado válido. A partir do Microsoft Entra Connect versão 1.4, o mecanismo de sincronização identifica certificados de ingresso híbrido do Microsoft Entra e usará o filtro cloudfilter para impedir que o objeto do computador seja sincronizado com a ID do Microsoft Entra, a menos que haja um certificado de ingresso híbrido válido do Microsoft Entra.

Os dispositivos do Microsoft Entra que foram sincronizados anteriormente com o AD, mas não têm um certificado de ingresso híbrido válido do Microsoft Entra, 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.