Active Directory OU Delegasyonlarını PowerShell ile Raporlama
Kurumsal BT altyapısında Active Directory (AD) yönetimi, güvenlik ve yetki dağıtımı açısından kritik bir rol oynar. Özellikle Organizational Unit (OU) bazlı delegasyonlar, büyük ve hiyerarşik yapılarda belirli kullanıcılar için özel erişimlerin tanımlanmasına olanak sağlar. Ancak yüzlerce OU içeren bir ortamda kimlerin hangi yetkilere sahip olduğunu manuel olarak incelemek hem zahmetli hem de zaman kaybıdır.
Bu yazıda, Active Directory içerisindeki tüm OU’lar üzerinde tanımlanmış Access Control Entry (ACE) kayıtlarını otomatik olarak tarayan bir PowerShell scriptini analiz ediyoruz. Bu script, erişim kontrol listelerini (ACL) inceleyerek hangi kullanıcı veya grubun hangi izinlere sahip olduğunu detaylı şekilde raporlar.
Scriptin Amacı Nedir?
Bu PowerShell scripti, Active Directory ortamındaki tüm Organizational Unit’lerin Access Control List (ACL) bilgilerini toplayarak delegasyon yapılarını incelemeyi amaçlar. Özellikle, sistem hesapları dışında tanımlanmış kullanıcı veya grupların erişimlerini tespit etmek için oldukça kullanışlıdır.
Böylece aşağıdaki gibi sorulara net yanıtlar bulabilirsiniz:
- Kimler bu OU üzerinde nesne oluşturma, silme veya okuma yetkisine sahip?
- Hangi özel izinler verilmiş?
- Bu yetkiler kalıcı mı, yoksa başka bir üst OU’dan mı devralınmış?
- Hatalı ya da gereksiz delegasyonlar var mı?
- Mevcut ortamın delegasyon yapısını belgelemek isteyen BT yöneticileri için mükemmel bir başlangıç noktasıdır.
- Gereksizsiz veya hatalı verilmiş delegasyonları bulup temizlemeye yardımcı olur.
- Helpdesk veya teknik destek ekiplerine verilen yetkilerin sınırlarını kontrol etmek için kullanılabilir.
PowerShell Scripti
Aşağıda, erişim kontrol listelerini sistematik olarak inceleyen PowerShell scriptini bulabilirsiniz:
# Tüm OU'ları al
$OUs = Get-ADOrganizationalUnit -Filter * | Select-Object -ExpandProperty DistinguishedName
$schemaIDGUID = @{}
$ErrorActionPreference = 'SilentlyContinue'
# Şema GUID'lerini ve Extended Rights GUID'lerini yükle
Get-ADObject -SearchBase (Get-ADRootDSE).schemaNamingContext -LDAPFilter '(schemaIDGUID=*)' -Properties name, schemaIDGUID |
ForEach-Object { $schemaIDGUID.add([System.GUID]$_.schemaIDGUID, $_.name) }
Get-ADObject -SearchBase "CN=Extended-Rights,$((Get-ADRootDSE).configurationNamingContext)" -LDAPFilter '(objectClass=controlAccessRight)' -Properties name, rightsGUID |
ForEach-Object { $schemaIDGUID.add([System.GUID]$_.rightsGUID, $_.name) }
$ErrorActionPreference = 'Continue'
$report = @()
# Her OU için ACL bilgilerini topla
ForEach ($OU in $OUs) {
$report += Get-Acl -Path "AD:\$OU" |
Select-Object -ExpandProperty Access |
Select-Object @{name='organizationalUnit';expression={$OU}}, `
@{name='objectTypeName';expression={if ($_.objectType.ToString() -eq '00000000-0000-0000-0000-000000000000') {'All'} else { $schemaIDGUID[$_.objectType] }}}, `
@{name='inheritedObjectTypeName';expression={ $schemaIDGUID[$_.inheritedObjectType] }}, `
*
}
# Sistem hesaplarını filtrele ve sonucu GridView'de göster
$report | Where-Object {
($_.IdentityReference -notlike "*BUILTIN*") -and
($_.IdentityReference -notlike "*NT AUTHORITY*")
} | Out-GridView
Nasıl Çalışır?
Active Directory’deki tüm OU’ları listeler:
OU’ların Distinguished Name bilgilerini alarak her birine erişim sağlar.
$OUs = Get-ADOrganizationalUnit -Filter * | Select-Object -ExpandProperty DistinguishedName
Şema ve Extended Rights GUID’lerini yükler:
ACL’lerde sadece GUID olarak geçen nesneleri okunabilir hale getirmek için schemaIDGUID ve rightsGUID bilgilerini çeker.
$schemaIDGUID = @{}
...
Get-ADObject -LDAPFilter '(schemaIDGUID=*)' ...
Get-ADObject -LDAPFilter '(objectClass=controlAccessRight)' ...
Her OU için ACL bilgilerini alır:
Kimlerin hangi izinlere sahip olduğunu belirleyerek detaylı bir erişim analizi yapar.
Get-Acl -Path "AD:\$OU"
Sistem hesaplarını filtreler:
Where-Object {
($_.IdentityReference -notlike "*BUILTIN*") -and
($_.IdentityReference -notlike "*NT AUTHORITY*")
}
Gereksiz veya default sistem hesaplarını filtreleyerek yalnızca özel tanımlı kullanıcı ve grupları listeye dahil eder.
Sonuç
Active Directory ortamınızda yetki delegasyonlarını daha şeffaf ve verimli bir şekilde analiz etmek istiyorsanız, bu PowerShell scripti tam size göre. Özellikle denetim süreçlerinde veya güvenlik önlemleri almak istediğinizde, bu tür otomasyonlarla sisteminizi incelemek büyük avantaj sağlayacaktır.
Scripti sisteminize uygulayarak kimlerin neye erişimi olduğunu kolayca görüntüleyebilirsiniz.
Bu bilgilerin faydalı olması dileğiyle…
Eline sağlık.