Bu notta, yerel Active Directory (On-Premises AD) ve Microsoft 365 / Entra ID arasında oluşan senkronizasyon çakışmasının nedenini ve kullanıcının e-postalarını, lisansını ve verilerini hiçbir şekilde riske atmadan Microsoft Graph API ile sorunun nasıl çözüleceğini adım adım inceleyeceğiz.
1. Problemin Tanımı ve Belirtileri
Senaryo
- Yerel Domain Controller (On-Premises AD) üzerindeki bir kullanıcı hesabı silinir.
- AD Connect senkronizasyonu çalışır ve nesne Microsoft 365 (Entra ID) tarafında da Silinen Kullanıcılar (Deleted Users / Recycle Bin) sekmesine düşer.
- Daha sonra bu kullanıcı Entra ID portalı üzerinden geri yüklenir (Restore edilir) ve UPN / birincil e-posta adresi değiştirilerek sadece bulut üzerinde aktif tutulmak istenir.
Ortaya Çıkan Hata
Bu senaryonun ardından Azure AD Connect her senkronizasyon döngüsünde (Export adımında) hata vermeye başlar:
- AD Sync Error:
DeletingCloudOnlyObjectNotAllowed - Event ID:
6941(ADSync) - Wazuh / SIEM Alarmı: Windows Application Log (Rule ID:
60602, Level: 9)
Plaintext
Error Details:
"ECMA2 MA export run caused an error.
DN: CN={...}
Error Name: DeletingCloudOnlyObjectNotAllowed
Error Detail: Bu hata, Azure AD Connect silindiğini onaylayamadan önce silinen bir nesnenin Azure AD’de geri dönüşüm kutusundan kurtarılmış olduğunu gösterir..."
2. Hatanın Kök Nedeni (Root Cause)
- Nesne yerel AD’de silindiği için AD Connect, Entra ID’ye “Bu kullanıcı yerelde yok, buluttan da silinmeli” komutunu gönderir.
- Ancak nesne bulut tarafında manuel geri yüklendiği için Entra ID güvenlik ve veri bütünlüğü mekanizması gereği şu cevabı döner:“Bu nesne bulutta geri yüklenmiş/aktif bir nesnedir. Yerel AD silindiğini onaylamadan bu nesneye silme işlemi uygulanamaz.”
- AD Connect her senkronizasyon periyodunda (30 dakikada bir) bu silme komutunu tekrarladığı için sistem sürekli hata üretir ve SIEM/Wazuh loglarında gürültü oluşturur.
3. Kesin ve Risk Sız Çözüm: OnPremisesImmutableId’nin Temizlenmesi
Kullanıcıyı silmeden veya posta kutusunu riske atmadan yapılacak işlem, bu nesnenin yerel Active Directory ile olan senkronizasyon bağını (OnPremisesImmutableId) tamamen koparmaktır.
Bağ koptuğunda Entra ID nesneyi bağımsız bir “Cloud-Only” (Sadece Bulut) nesnesi olarak kabul eder ve AD Connect servisi nesneyi takip etmeyi bırakır.
Adım 1: Nesnenin ObjectId Bilgisini Tespit Etme
Azure AD Connect Synchronization Service Manager konsolundan veya olay günlüklerinden hataya sebep olan nesnenin ObjectId değerini alın.
Örnek:
3c90bcda-511d-4cb5-0000-000000000000
Adım 2: Microsoft Graph PowerShell Modülünü Kurma ve Azure / Entra ID’ye Bağlanma
Microsoft, eski MSOnline ve AzureAD PowerShell modüllerini tamamen emekliye ayırdığı için işlemlerimizi güncel Microsoft Graph PowerShell SDK üzerinden yürütüyoruz.
- PowerShell’i Yönetici (Administrator) olarak açın ve modülü yükleyin:PowerShell
Install-Module Microsoft.Graph -Scope CurrentUser -Repository PSGallery -Force - Entra ID / Tenant ortamınıza kullanıcı düzenleme yetkisiyle bağlanın:PowerShell
Connect-MgGraph -Scopes "User.ReadWrite.All"(Bu komut sonrasında açılan tarayıcı penceresinden Global Admin yetkisine sahip 365 hesabınızla oturum açıp istenen izinleri onaylayın).
Adım 3: Microsoft Graph API ile Senkronizasyon Bağını Koparma
PowerShell üzerindeki varsayılan Update-MgUser cmdlet’i bazı durumlarda $null veya boş dize geçişlerinde BadRequest (400) hatası döndürebilir. Bu nedenle en kararlı ve doğrudan yöntem Microsoft Graph Request (PATCH) çağrısı yapmaktır.
Bağlantıyı sağladıktan sonra şu komut blokunu çalıştırın:
PowerShell
# Null değerini içerecek JSON gövdesini (Body) hazırlayın
$body = @{
onPremisesImmutableId = $null
}
# PATCH metodu ile kullanıcının senkronizasyon bağını sıfırlayın
Invoke-MgGraphRequest -Method PATCH -Uri "https://graph.microsoft.com/v1.0/users/3c90bcda-511d-4cb5-0000-000000000000" -Body $body
(Komut çalıştıktan sonra alt satıra hatasız geçmesi işlemin başarılı olduğunu gösterir).
Adım 4: Senkronizasyonu Tetikleme ve Doğrulama
Bağlantıyı kopardıktan sonra On-Premises AD Connect sunucusunda senkronizasyon döngüsünü başlatın:
PowerShell
Start-ADSyncSyncCycle -PolicyType Delta
İşlem tamamlandıktan sonra:
- Microsoft 365 / Entra ID Tarafı: Kullanıcının hesabı, lisansları, mevcut e-postaları ve posta kutusu hiçbir kesinti yaşanmadan korunmuş olur. Nesne türü artık “Cloud” olarak görünür.
- On-Premises AD Connect Tarafı:
DeletingCloudOnlyObjectNotAllowedhatası Synchronization Service Manager üzerinden temizlenir.
Kaynak:
https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/tshoot-connect-sync-errors
https://learn.microsoft.com/en-us/graph/api/user-update?view=graph-rest-1.0&tabs=http
