Pratik Grafik: Microsoft Graph PowerShell SDK'ya Güvenli Etkileşimli Erişim


Doğru Kişilerin Grafik SDK'sını kullanabileceğinden emin olun

Eylül 2021'de ilk olarak Microsoft Graph PowerShell SDK'nın kullanımı hakkında yazmaya başladım. İlk makalede, hizmet sorumlusunun zaman içinde biriken SDK'ya atanan izinleri tutmak için oluşturma biçiminden kaynaklanan olası soruna dikkat çektim. Sonunda, Connect-MgGraph cmdlet'ini kullanarak SDK'da etkileşimli olarak oturum açan herkes çok çeşitli izinlere erişim elde etti. Aynı davranış SDK'nın 2. sürümünde de devam ediyor. İdari işlemler için en az izin modelinin kullanılmasının önemi göz önüne alındığında, izinlerin tahakkuk ettirilmesi iyi bir şey değildir.

Microsoft Graph PowerShell SDK'sı, Exchange Online veya SharePoint Online yönetim modülleri gibi diğer Microsoft 365 PowerShell modüllerine benzemez. Bu modüller yöneticilerin kullanımını varsayar ve cmdlet'leri bu temelde çalışır. Elbette yönetici rolü olmayan biri bu modülleri kullanmak için oturum açarsa izinler onu kendi verilerine erişimle sınırlandırır.

Kiracıların Graph SDK'yı nasıl kullandığı açısından kullanımı şu şekilde ayırabiliriz sanırım:

  • Etkileşimli kullanım: SDK cmdlet'lerini ve komut dosyası geliştirmeyi test etme. Buna, komut dosyaları yazarken PowerShell ISE veya Visual Studio kodunun kullanılması da dahildir. Etkileşimli kullanım, yetkilendirme izinleriyle sınırlıdır.
  • Üretim komut dosyaları: Kimlik doğrulama için X.509 sertifikalarına sahip kayıtlı uygulamaları kullanan SDK cmdlet'lerine sahip üretim komut dosyaları. Bu komut dosyaları uygulama izinlerini kullanabilir, böylece kiracı genelindeki verilere erişebilirler.
  • Zamanlanmış betikler: Kimlik doğrulama için yönetilen kimliklere sahip Azure Otomasyonu zamanlanmış runbook'lar.

Bazıları Microsoft Graph PowerShell SDK'ya etkileşimli erişimi sınırlamanız gerektiğini savunuyor. Böyle bir tutumun makul olduğundan emin değilim. Geliştiricilerin test komut dosyalarına, V1.0 cmdlet'lerini beta cmdlet'lerle karşılaştırmaya vb. etkileşimli erişime ihtiyacı vardır. Etkileşimli olarak başarıyla çalıştırılamayan bir betiğin, Azure Otomasyonu altında çalışacak şekilde sorunlarını otomatik olarak düzeltmesi pek olası değildir. Ayrıca etkileşimli erişimin, tek seferlik komut komut dosyalarını isteğe bağlı olarak çalıştırmak için de yararlı olduğunu düşünüyorum.

Özetle, SDK'ya etkileşimli erişim gerekli bir kötülüktür. Bu, yalnızca doğru kişilerin SDK cmdlet'lerini etkileşimli olarak çalıştırabilmesi için etkileşimli erişimin en iyi şekilde nasıl güvence altına alınabileceği sorusunu gündeme getirir. İşte dikkate alınması gereken bazı yaklaşımlar.

SDK Uygulamasına Erişimi Kısıtlama

Microsoft Graph PowerShell SDK'nın bir kiracıya yüklenmesi, kiracının Entra ID (Azure Active Directory) örneğinde bir kurumsal uygulama oluşturur. Uygulamanın hizmet sorumlusu, SDK'ya atanan izinlere sahiptir. SDK uygulamasının her zaman 14d82eec-204b-4c2f-b7e8-296a70dab67e uygulama tanımlayıcısı vardır (Şekil 1).

SDK'ya erişimi seçilen kullanıcılarla kısıtlamak için uygulamanın özelliklerini düzenleyin ve:

  • SDK uygulamasında etkileşimli olarak oturum açabilmesini istediğiniz kişilere erişim atamaları eklemek için Kullanıcılar ve gruplar sekmesine erişin. Entra ID P1 lisanslarınız varsa atamaları yönetmek için bir güvenlik grubu oluşturabilir ve genel yöneticileri ve diğer seçili kullanıcıları grup üyeliğine dahil edebilirsiniz. Yeni güvenlik grubu için bir atama ekleyin.
  • Atama gerekli kaydırıcısını Hayır'dan (varsayılan) Evet'e getirin. Bu eylem, Entra ID'ye yalnızca uygulama için doğrudan atamaları olan hesapların uygulamayı kullanabileceğini bildirir.
  • Değişikliklerinizi kaydedin.

Atamaları olan hesaplar normal şekilde oturum açmaya devam edebilir. Entra ID, ataması olmayan hesapları engeller ve bir hata görüntüler (Şekil 2).

Microsoft Graph PowerShell SDK uygulamasına erişimi denetlemek için doğrudan atamaları kullanmak, seçilen hesaplara erişimi kısıtlamanın en basit ve en hızlı yöntemidir. Tüm kiracılar bu kontrolü uygulamayı düşünmelidir.

Microsoft Platform Geçiş Planlaması ve Konsolidasyonu

Kullanıcılar için maliyetleri, riskleri ve kesintileri en aza indirirken geçiş planlamasını basitleştirin, geçiş zorluklarının üstesinden gelin ve projeleri daha hızlı tamamlayın.

Oturum Açma İşlemleri Kontrol Ediliyor

Yalnızca onaylı hesap listesinin SDK'yı etkileşimli olarak kullandığını doğrulamak için Entra ID oturum açma günlüğünü sorgulayarak SDK ile ilişkili etkinlikleri arayabilirsiniz. Get-MgBetaAuditLogSignIn cmdlet'ini ve SDK'nın uygulama tanımlayıcısı için etkileşimli kullanıcı oturum açma işlemlerini ayıklamak üzere bir filtreyi kullanarak oturum açma etkinliklerini nasıl kontrol edeceğiniz aşağıda açıklanmıştır:

[array]$SDKRecords = Get-MgBetaAuditLogSignIn -Filter "(signInEventTypes/any(t:t eq 'interactiveuser')) and AppId eq '14d82eec-204b-4c2f-b7e8-296a70dab67e'" -Top 2000 -Sort "createdDateTime DESC"

$SDKRecords | format-Table UserDisplayName, CreatedDateTime, IpAddress

UserDisplayName             CreatedDateTime     IPAddress
---------------             ---------------     ---------
Tony Redmond                27/07/2023 15:20:55 78.19.137.37
Hans Flick                  27/07/2023 15:20:13 45.11.131.38
Hans Flick                  27/07/2023 15:19:28 45.11.131.38
James Ryan                  27/07/2023 15:18:38 13.22.127.27

Microsoft'un Kurumsal Uygulaması Yerine Kayıtlı Bir Uygulama Kullanın

Graph SDK'ya Microsoft'un varsayılan kurumsal uygulaması aracılığıyla erişilmesinin gerekmesi için hiçbir neden yoktur. Kiracıya özel kayıtlı bir uygulama oluşturabilir ve onun yerine bu uygulamayı kullanabilirsiniz. Kurumsal uygulama, Microsoft gibi bir yayıncının kontrolü altında olan ve birden fazla kiracıda bulunabilen bir uygulamadır. Kurumsal uygulamanın hizmet sorumlusu, kiracı içinde başlatılmasıdır. Kayıtlı bir uygulama kiracının kontrolü altındadır.

Buradaki fikir bir organizasyonun şunları yapabilmesidir:

  • Kullanılacak farklı hesap grupları için bir dizi kayıtlı uygulama oluşturun. Örneğin, yardım masası üyelerinin kullanabileceği bir uygulama oluşturun.
  • Yalnızca hedef kullanıcı grubunun ihtiyaç duyduğu izinleri uygulamalarına atayın. Örneğin, yardım masası uygulamasına, bu kullanıcıların dizin nesnelerinin tüm ayrıntılarını okumasına izin vermek için Directory.Read.All izni atanabilir. Yardım masası cihazlarla ilgileniyorsa kiracı yöneticileri Devices.ReadWrite.All iznine vb. izin verebilir.

Temel olarak, etkileşimli Graph SDK erişimi için kayıtlı uygulamalar oluşturmak, kuruluşların izinleri daha ayrıntılı bir düzeyde yönetmesine olanak tanır.

SDK ile kullanılmak üzere kayıtlı bir uygulama oluşturmak için:

  • Entra ID yönetim merkezini açın ve Uygulamalar sekmesini açın. Yeni bir uygulama oluşturun ve ona uygun bir ad verin ve uygulamayı kaydedin (kaydedin).
  • Uygulamaya erişin ve Kimlik Doğrulama sekmesini açın. Platform ekle'yi seçin ve Mobil ve masaüstü uygulamalar'ı seçin. Önerilen listeden https://login.microsoftonline.com/common/oauth2/nativeclient yönlendirme URI'sini ekleyin.
  • URI Ekle'yi seçin ve http://localhost'u girin. Başlangıçta bu URI'yi atladım ancak daha sonra Connect-MgGraph cmdlet'iyle oturum açmaya çalışırken URI uyumsuzluğuyla ilgili sorunlarla karşılaştım. Hata mesajı beni localhost için URI'yi eklemeye yönlendirdi ve sorun ortadan kalktı.
  • Değişiklikleri kaydedin.

Şekil 3, Microsoft Graph PowerShell SDK ile kullanılmak üzere kayıtlı bir uygulamaya eklenen yönlendirme URI'lerini göstermektedir.

Uygulama mevcut olduğunda, belirlenen hesaplar Graph SDK'da oturum açmak için uygulamayı kullanabilir. SDK'ya varsayılan kurumsal uygulamayı kullanmama talimatını vermek için kiracı tanımlayıcısını ve uygulama tanımlayıcısını bağlantıya ekleyin. Örneğin:

Connect-MgGraph -TenantId a662313f-14fc-43a2-9a7a-d2e27f4f3478 -AppId a69635f3-3ac8-4949-a82b-f31b396de57b

Varsayılan kurumsal uygulamaya erişimi engellenen kullanıcılar, kayıtlı uygulamayı kullanarak oturum açabilir. Bunu yaptıklarında, uygulamanın Get-MgContext cmdlet'inde ortaya çıktığı gibi temel bir dizi izinlere (kapsamlara) sahip olduğunu görecekler:

Get-MgContext

ClientId               : a69635f3-3ac8-4949-a82b-f31b396de57b
TenantId               : a662313f-14fc-43a2-9a7a-d2e27f4f3478
Scopes                 : {openid, profile, User.Read, email}
AuthType               : Delegated
TokenCredentialType    : InteractiveBrowser
CertificateThumbprint  :
CertificateSubjectName :
Account                : Tony.Redmond@office365itpros.com
AppName                : Microsoft Graph SDK Tenant Access
ContextScope           : CurrentUser
Certificate            :
PSHostVersion          : 5.1.22621.1778
ManagedIdentityId      :
ClientSecret           :

Get-MgUser -all
Get-MgUser : Insufficient privileges to complete the operation.
Status: 403 (Forbidden)

Belirlenen kullanıcıların SDK ile gerçek çalışma yapmasına izin vermek için kiracı yöneticisinin uygulamayı güncelleyerek gerekli Grafik izinlerini eklemesi ve bu izinleri vermesi gerekir. Uygulama için tahakkuk eden izinlere dikkat etmek akıllıca olacaktır. Varsayılan kurumsal uygulama gibi, izinler de hiç kaldırılmadan birikme eğilimindedir.

Yukarıda açıklanana benzer şekilde Get-MgBetaAuditLogSignIn cmdlet'ini kullanarak kayıtlı uygulama için oturum açma kayıtları.

Microsoft Graph PowerShell SDK'ya Güvenli Erişim

Kaç kiracının Graph SDK'ya erişim hakkında hiç düşünmediğini merak ediyorum. Yalnızca birkaç yöneticinin bulunduğu küçük kiracılarda, uygulamaya erişimi kısıtlamak için zaman ayırırsanız varsayılan kurumsal uygulamayı kullanmaya devam etmenin hiçbir zararı yoktur. Daha büyük kiracılarda, SDK cmdlet'lerini kaç farklı türde kişinin çalıştırdığını ve bunların gerçekleştirdiği görevleri düşünün ve ardından özel izin kümelerine sahip bazı kayıtlı uygulamaların daha iyi bir yanıt olup olmadığını öğrenin.

İlgili makaleler