Entender Azure AD Connect 1.4.xx.x e o desaparecimento do dispositivo
Com a implementação da versão 1.4.xx.x do Azure Active Directory Connect (Azure AD Connect), os clientes podem ver alguns ou todos os seus dispositivos Windows desaparecerem de Azure AD. Isso não é motivo de preocupação, pois essas identidades de dispositivo não são usadas pelo Azure Active Directory (Azure AD) durante a autorização de Acesso Condicional. Essa alteração não excluirá nenhum dispositivo Windows que tenha sido registrado corretamente com Azure AD for Hybrid Azure AD Join.
Se você vir a exclusão de objetos de dispositivo em Azure AD 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
Os dispositivos Windows registrados como Hybrid Azure AD Joined são representados em Azure AD como objetos de dispositivo e podem ser usados para acesso condicional. Windows 10 dispositivos são sincronizados com a nuvem por meio do Azure AD 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 pelo Hybrid Azure AD Join devem ser sincronizados com a nuvem Azure AD Connect. Em versões anteriores do Azure AD Connect, esse requisito não foi rigorosamente imposto e objetos de dispositivo desnecessários foram adicionados a Azure AD. Esses dispositivos em Azure AD sempre permaneceram no estado "pendente", pois esses dispositivos não tinham a intenção de serem registrados com Azure AD.
Esta versão do Azure AD Connect só sincronizará Windows 10 dispositivos que estão configurados corretamente para serem híbridos Azure AD ingressados. Windows 10 objetos de dispositivo sem o Azure AD usuário específico de junçãoCertificate serão removidos do Azure AD.
Down-Level dispositivos Windows
Azure AD Connect nunca deve sincronizar dispositivos Windows de nível inferior. Todos os dispositivos em Azure AD sincronizados incorretamente anteriormente serão excluídos do Azure AD. Se Azure AD Connect tentar excluir dispositivos Windows de nível inferior, o dispositivo não será o que foi criado pelo Microsoft Workplace Join para computadores não Windows 10 MSI e não poderá ser consumido por nenhum outro recurso Azure AD.
Alguns clientes talvez precisem revisitar How To: Plan your hybrid Azure Active Directory 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 recurso de junção Azure AD Híbrido.
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 do Hybrid Azure AD; por exemplo, Subject Name matches CN={ObjectGUID}
.
Antes dessa atualização, Azure AD Connect sincronizaria para Azure AD qualquer computador que contivesse pelo menos um certificado válido. Começando com Azure AD Connect versão 1.4, o mecanismo de sincronização identifica certificados de junção de Azure AD híbridos e usará o filtro cloudfilter para impedir que o objeto do computador se sincronize para Azure AD, a menos que haja um certificado de junção do Hybrid Azure AD válido.
Azure AD dispositivos que foram sincronizados anteriormente com o AD, mas não têm um certificado de junção do Hybrid Azure AD 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 Hybrid Azure AD 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 Hybrid Azure AD join feature
(i.e. Subject Name matches CN={ObjectGUID}).
Before, Azure AD Connect would synchronize to Azure AD any Computer that contained at least one valid
certificate but starting on Azure AD Connect version 1.4, the sync engine can identify Hybrid
Azure AD join certificates and will 'cloudfilter' the computer object from synchronizing to Azure AD unless
there's a valid Hybrid Azure AD join certificate.
Azure AD Device objects that were already synchronized to AD but do not have a valid Hybrid Azure AD 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 AAD 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 AAD Hybrid Join Certificates with Thumbprints: $hybridJoinCertsThumbprints (cloudFiltered=FALSE)"
}
Else
{
$cloudFiltered = 'TRUE'
Write-verbose "'$objDN' has no AAD 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 Azure AD 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 de produto para o suporte à comunidade do Azure.
Comentários
Submeter e ver comentários