PowerShell ile Entra ID Dizin Uzantıları Nasıl Kullanılır


Entra ID Nesneleri için Depolanan Verileri Özelleştirmeye Yönelik Dizin Uzantıları

Exchange posta kutularıyla çalışmak için PowerShell'i kullandıysanız muhtemelen on beş tek değerli ve beş çok değerli özel özniteliği biliyorsunuzdur. Kuruluşlar, posta kutuları, dağıtım listeleri ve diğer posta özellikli nesneler hakkındaki bilgileri depolamayı seçtikleri için özel öznitelikleri kullanabilirler. Entra ID, posta kutularına ilişkin özel nitelikleri, posta kutularına sahip olan kullanıcı hesaplarıyla senkronize eder ve değerleri onPremisesExtensionAttributes özelliğinde saklar. Çok değerli özel nitelikler Exchange'den Entra ID'ye senkronize edilmez.

Exchange'de özel özniteliklerin kullanımı, bir posta kutusuna karşı gerçekleştirilen bazı işlemlere ilişkin ayrıntıların saklanmasından, posta kutusu sahibi hakkındaki statik ayrıntılara (rozet numarası gibi) kadar değişiklik gösterir. Önemli olan şu ki, Microsoft, kuruluşların Exchange'i müşteriler için daha kullanışlı hale getirmek için var olan özel nitelikleri nasıl kullanacaklarını belirlemez.

Dizin uzantıları Entra ID'nin eşdeğeridir. Exchange özel niteliklerinin aksine, dizin uzantıları bireysel kiracılara özeldir ve Entra ID'ye kayıtlı uygulamalarla ilişkilidir.

Kulağa karmaşık mı geliyor? Pratikte daha basit olduğundan, Microsoft Graph PowerShell SDK'yı kullanarak bazı dizin uzantılarını tanımlayalım ve kullanalım. Maalesef Microsoft'un mevcut belgeleri Azure AD modülünü kullanıyor ancak dizin uzantılarının nasıl çalıştığına ilişkin Grafik tabanlı açıklamaya başvurduktan sonra artık değeri düşen cmdlet'leri değiştirmek kolaydır.

Dizin Uzantıları Oluşturma

İlk adım, kayıtlı bir Entra ID uygulaması oluşturmak veya uzantı özelliklerini tutacak mevcut bir kayıtlı uygulamayı seçmektir. PowerShell kullanarak veya Entra ID yönetim merkezi aracılığıyla yeni bir uygulama oluşturabiliriz. Dikkat edilmesi gereken önemli bilgi, dizin uzantıları oluşturmak için gerekli olduğundan uygulamanın tanımlayıcısıdır (ID özelliği). Bu kod yeni bir uygulama ve onun hizmet sorumlusu oluşturur.

$ExtensionApp = New-MgApplication -DisplayName "Extension App to Store Properties for My Tenant"
New-MgServicePrincipal -AppId $ExtensionApp.AppId

Bir uygulama mevcut olduğunda bazı dizin uzantıları ekleyebiliriz. Bu örnek, uygulamaya iki dizin uzantısının nasıl ekleneceğini gösterir. İlk dizin uzantısı (“CostCenter”) yalnızca kullanıcı nesneleriyle kullanılabilirken, diğeri (“Yardımcı”) hem kullanıcılar hem de gruplar için kullanılabilir. Desteklenen diğer türler arasında cihazlar, uygulamalar ve yönetim birimleri yer alır. Dizin uzantılarına verilen adlara boşluk ekleyemezsiniz:

$ExtensionProperty1 = New-MgApplicationExtensionProperty -Name "CostCenter" -DataType "String" -TargetObjects "User" -ApplicationId $ExtensionApp.Id
$ExtensionProperty2 = New-MgApplicationExtensionProperty -Name "Subsidiary" -DataType "String" -TargetObjects "User", "Group" -ApplicationId $ExtensionApp.Id

PowerShell değişkenlerinden farklı olarak dizin uzantıları güçlü bir şekilde yazılır. Bu örnekte her ikisi de dize olarak tanımlanır ve en fazla 256 karakter depolayabilir. Desteklenen diğer veri türleri ikili, Boolean, DateTime, Integer ve LargeInteger'dır.

Kayıtlı uygulama için tanımlanan dizin uzantıları kümesini kontrol etmek ve uzantıların hangi nesneler için uygun olduğunu görmek için Get-MgApplicationExtensionProperty cmdlet'ini çalıştırın:

Get-MgApplicationExtensionProperty -ApplicationId $ExtensionApp.Id | Format-Table Name, DataType, TargetObjects

Name                                                  DataType TargetObjects
----                                                  -------- -------------
extension_450c03488bae4eb98cc22699c0b46690_Subsidiary String   {User, Group}
extension_450c03488bae4eb98cc22699c0b46690_CostCenter String   {User}

Belgeler, bir "sahip" uygulamasının en fazla beş tanım tutabileceğini (Şekil 1'de gösterildiği gibi, belgelerin bu yönü yanlış veya güncelliğini kaybetmiş olabilir) ve bir kuruluşun her kaynak türü için (bir kullanıcı gibi) en fazla 100 dizin uzantısını destekleyebileceğini söylüyor. ).

Dizin Uzantılarını Kullanma

Dizin uzantılarına değer yazmak için güncellenecek uzantıların adlarını ve atanacak değerleri tutacak bir karma tablo oluştururuz. Bu örnekte hash tablosunu az önce tanımladığımız iki dizin uzantısının adları ve atamak istediğimiz değerlerle dolduruyoruz. Farklı uygulamalara ait uzantıları birleştirebilirsiniz.

$Properties = @{}
$Properties.Add('extension_450c03488bae4eb98cc22699c0b46690_CostCenter', "8ZW")
$Properties.Add('extension_450c03488bae4eb98cc22699c0b46690_Subsidiary', "Contoso U.S.A")

$UserId = (Get-MgUser -UserId Tricia.Griffin@office365itpros.com).Id
Update-MgUser -UserId $UserId -AdditionalProperties $Properties

Dizin uzantılarında saklanan değerleri almak için Get-MgUser'i çalıştırırken uzantı adlarını belirtin:

$User = Get-MgUser -UserId $UserId -Property ` extension_450c03488bae4eb98cc22699c0b46690_CostCenter,
extension_450c03488bae4eb98cc22699c0b46690_Subsidiary

$User.AdditionalProperties | Format-List

Key   : @odata.context
Value : https://graph.microsoft.com/v1.0/$metadata#users(extension_450c03488bae4eb98cc22699c0b46690_Subsidiary,extension_450c03488bae4eb98cc22699c0b46690_CostCenter)/$entity

Key   : extension_450c03488bae4eb98cc22699c0b46690_CostCenter
Value : 8ZW

Key   : extension_450c03488bae4eb98cc22699c0b46690_Subsidiary
Value : Contoso U.S.A

Komut dosyaları yazarken, additionalProperties özelliğinde tutulan verilere bakarak dizin uzantılarına ilişkin değerleri almak daha kolaydır. Örneğin:

$User.AdditionalProperties['extension_450c03488bae4eb98cc22699c0b46690_Subsidiary']
Contoso U.S.A

Dizin uzantıları filtrelenebilir. Bu örnekler, bir dizin uzantısında belirli bir değere sahip tüm kullanıcı hesaplarını bulmak için filtrelerin nasıl kullanılacağını gösterir:

[array]$Users = Get-MgUser -Filter "extension_450c03488bae4eb98cc22699c0b46690_CostCenter eq '8ZW'"
[array]$Users = Get-MgUser -Filter "extension_450c03488bae4eb98cc22699c0b46690_SeniorityDate ge '1983-10-02T23:59:00'"
[array]$Users = Get-MgUser -Filter "extension_450c03488bae4eb98cc22699c0b46690_WorkRemote eq 'true'"

Yukarıda açıklandığı gibi Update-MgUser cmdlet'i dizin uzantılarında saklanan değerleri günceller. Kuralın istisnası, bir dizin uzantısına boş bir değer yazmak istediğiniz zamandır. Update-MgUser cmdlet'i şimdilik bunu yapamaz ($Null özel değişkenini işleyememek, Graph SDK'nın zaaflarından biridir). Geçici çözüm, dizin uzantısı adını ve $Null değerini içeren bir karma tablosu iletmek ve tabloyu Invoke-MgGraphRequest cmdlet'i tarafından çalıştırılan bir Yama isteğine girdi olarak kullanmaktır:

$PropertyNull = @{}
$PropertyNull.add("extension_450c03488bae4eb98cc22699c0b46690_Subsidiary", $Null)

Invoke-MgGraphRequest -Method PATCH -Uri "https://graph.microsoft.com/v1.0/users/Tricia.Griffin@office365itpros.com" -Body $PropertyNull

Dizin Uzantılarını Kaldırma

Hatalar yapılır ve bazen bir dizin uzantısını kaldırmak gerekir. Bunu yapmak için önce uzantının tanımlayıcısını bulun:

Get-MgApplicationExtensionProperty -ApplicationId $ExtensionApp.Id | Format-Table Id, Name

Id                                   Name
--                                   ----
cad8d83d-eada-47c7-9bf4-5c9ef87beed9 extension_450c03488bae4eb98cc22699c0b46690_HiringManager
b4948d37-ce31-4214-b885-8b44f5fbefe3 extension_450c03488bae4eb98cc22699c0b46690_RetirementDate
6af6c7fe-a516-4b3b-ba28-b80d0b91bd9a extension_450c03488bae4eb98cc22699c0b46690_BadgeNumber
de02f69a-d599-4f68-9cb1-9a2b07e8c395 extension_450c03488bae4eb98cc22699c0b46690_LeaveAllowance
7ba15153-d8b6-4ffc-8265-edd8ede66cbf extension_450c03488bae4eb98cc22699c0b46690_Subsidiary
5ce0873c-dc0f-4df0-bdeb-a0db895d5c2b extension_450c03488bae4eb98cc22699c0b46690_CostCenter

Daha sonra dizin uzantısını kaldırmak için Remove-MgApplicationExtensionProperty cmdlet'ini çalıştırın. Bu örnekte, Yardımcı bilgileri saklayan dizin uzantısını kaldırıyorum. Cmdlet, dizin uzantısını kaldırmadan önce onay istemez. Kaldırılması, diğer Entra ID nesnelerine ait uzantıda tutulan verileri ortadan kaldırır; bu nedenle cmdlet'i çalıştırmadan önce devam etmek istediğinizden emin olun.

Remove-MgApplicationExtensionProperty -ApplicationId $ExtensionApp.Id -ExtensionPropertyId 7ba15153-d8b6-4ffc-8265-edd8ede66cbf

Aynı adda bir dizin uzantısını yeniden oluşturmak mümkündür. Ancak yeni dizin uzantısının farklı bir tanımlayıcısı vardır ve diğer dizin uzantısını sildiğinizde kaldırılan verileri kurtarmaz.

Dizin Uzantılarını Göz önünde bulundurmaya değer

Microsoft kiracıları, verileri özel niteliklerde depolama konusunda seçim yapmakta zorlanırlar. Exchange özel öznitelikleri, Exchange Online'ın kullanıldığı her kiracı için kullanılabilir ve erişilebilirdir, ancak on beş öznitelikle sınırlandırılmışsınızdır. Entra ID dizin uzantılarının başka hiçbir uygulamaya bağımlılığı yoktur, daha fazla uzantı tanımlayabilirsiniz (daha önce bahsedilen sınırlara kadar) ve bunlar daha fazla nesne türünü destekler (bazı yararlı arka plan bilgileri için bu karşılaştırmaya bakın). Şu anda dizin uzantılarını kullanmaya ihtiyacınız olmayabilir, ancak gelecekte ne olacağını asla bilemezsiniz.

Active Directory için Siber Güvenlik Risk Yönetimi

Bu Siber Güvenlik Risk Yönetimi Çözümleri aracılığıyla AD saldırılarını nasıl önleyeceğinizi ve bu saldırılardan nasıl kurtulacağınızı keşfedin.

İlgili makaleler