次の方法で共有


Microsoft Entra Connect 1.4.xx.x とデバイスの消失について

Microsoft Entra Connect のバージョン 1.4.xx.x の実装により、お客様の Windows デバイスの一部またはすべてが Microsoft Entra ID から消える場合があります。 これらのデバイス ID は、 Conditional Access 承認中に Microsoft Entra ID によって使用されないため、これは問題の原因ではありません。 この変更により、Microsoft Entra ハイブリッド参加の Microsoft Entra ID に正しく登録された Windows デバイスは削除されません。

Microsoft Entra ID のデバイス オブジェクトの削除が Export の削除しきい値を超えている場合は、削除を実行できるようにします。 方法: 削除のしきい値を超えた場合に削除の実行を許可する

背景

Microsoft Entra ハイブリッド参加済みとして登録された Windows デバイスは、デバイス オブジェクトとして Microsoft Entra ID で表され、条件付きアクセスに使用できます。 Windows 10 デバイスは Microsoft Entra Connect 経由でクラウドに同期されますが、ダウンレベルの Windows デバイスは、Active Directory フェデレーション サービス (AD FS) (AD FS) またはシームレス シングル サインオンを使用して直接登録されます。

Windows 10 デバイス

Microsoft Entra ハイブリッド参加によって構成された特定の userCertificate 属性値を持つ Windows 10 デバイスのみを、Microsoft Entra Connect によってクラウドに同期する必要があります。 以前のバージョンの Microsoft Entra Connect では、この要件は厳密に適用されておらず、不要なデバイス オブジェクトが Microsoft Entra ID に追加されていました。 Microsoft Entra ID のこのようなデバイスは、Microsoft Entra ID に登録されることを意図していなかったので、常に "保留中" 状態のままでした。

このバージョンの Microsoft Entra Connect では、Microsoft Entra ハイブリッド参加済みとして正しく構成されている Windows 10 デバイスのみが同期されます。 Microsoft Entra 参加固有の userCertificate のない Windows 10 デバイス オブジェクトは、Microsoft Entra ID から削除されます。

ダウンレベルの Windows デバイス

Microsoft Entra Connect では、ダウンレベルの Windows デバイス 同期しないでください。 以前に正しく同期されていない Microsoft Entra ID 内のすべてのデバイスは、Microsoft Entra ID から削除されます。 Microsoft Entra Connect が ダウン レベルの Windows デバイスを削除しようとすると、デバイスは windows 10 以外のコンピューター MSI 用の Microsoft Workplace Join によって作成されたデバイスではなく他の Microsoft Entra 機能では使用できません。

一部のお客様は 方法: Microsoft Entra ハイブリッド参加の実装を計画する Windows デバイスを正しく登録し、それらのデバイスがデバイス ベースの条件付きアクセスに参加できることを確認する必要があります。

この更新プログラムで削除されるデバイスはどのように確認できますか?

削除されるデバイスを確認するには、PowerShell 証明書レポート スクリプト PowerShell スクリプトを使用します。

このスクリプトは、 Active Directory Computer オブジェクトに格納されている証明書、特に Microsoft Entra ハイブリッド参加機能によって発行された証明書に関するレポートを生成します。

スクリプトは、AD の Computer オブジェクトの UserCertificate プロパティに存在する証明書もチェックします。 有効期限が切れていない証明書が存在するごとに、証明書が Microsoft Entra ハイブリッド参加機能に対して発行されたかどうかを検証します。たとえば、 Subject Name matches CN={ObjectGUID}

この更新プログラムの前に、Microsoft Entra Connect は、少なくとも 1 つの有効な証明書を含む任意のコンピューターを Microsoft Entra に同期していました。 Microsoft Entra Connect バージョン 1.4 以降、同期エンジンは Microsoft Entra ハイブリッド参加証明書を識別し、有効な Microsoft Entra ハイブリッド参加証明書がない限り、コンピューター オブジェクトが Microsoft Entra ID に同期されないように、 cloudfilter フィルターを使用します。

以前に AD に同期されていたが、有効な Microsoft Entra ハイブリッド参加証明書がない Microsoft Entra デバイスは、フィルター CloudFiltered=TRUEを使用して同期エンジンによって削除されます。

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)"
   }

次のステップ

お問い合わせはこちらから

質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。