Hangi Microsoft Graph İzinlerine İhtiyacınız Olduğunu Nasıl Anlayabilirsiniz?


Microsoft Graph PowerShell SDK'sıyla Çalışırken

Şu ana kadar Microsoft'un Azure AD ve MSOL PowerShell modüllerini 2022'nin sonunda veya kısa bir süre sonra kullanımdan kaldırmayı planladığını biliyor olmalısınız. Kullanımdan kaldırılan modüllerdeki cmdlet'ler daha sonra çalışmaya devam edecek ancak herhangi bir destekleri olmayacak. Microsoft, komut dosyalarını Microsoft Graph PowerShell SDK'daki cmdlet'leri kullanacak şekilde yükseltmenizi önerir. Gerçek dönüşüm genellikle Microsoft'un cmdlet haritasında eşleşen bir cmdlet'i bulma ve ona geçme meselesidir. Ancak cmdlet'lerin sorunsuz çalışmasını engelleyen başka karmaşıklıklar vardır. Verilere erişmek için kullanılacak doğru Microsoft Graph API izinlerini bulmak bu karmaşıklıklardan yalnızca biridir.

En Az İzin Modeli

İzin işleme, Azure AD PowerShell modülü ile Microsoft Graph PowerShell SDK'sı arasında önemli ölçüde farklılık gösterir. Connect-AzureAD cmdlet'ini kullanarak oturum açtığınızda, oturum açtığınız hesabın sahip olduğu tüm yönetim izinlerini kullanabilirsiniz. Ancak Graph SDK, en az izin modelinde çalışır; bu, yüksek izinlere sahip bir hesaba bağlanırken bile işlem gerçekleştirmek için izin istemeniz gerektiği anlamına gelir.

Bir betiği Azure AD cmdlet'lerinden SDK cmdlet'lerine güncellemenin ilk adımı, betiğin işlemesini gerçekleştirmek için hangi izinlere ihtiyacı olduğunu dikkate almaktır. Bu kural, SDK cmdlet'lerini nasıl kullandığınıza bakılmaksızın (etkileşimli olarak, sertifika tabanlı kimlik doğrulama kullanan bir arka plan işi aracılığıyla veya bir Azure Otomasyonu runbook'unda) geçerlidir. Oturum açılmış hesaplardan devralınan izinlerin aksine, SDK tarafından kullanılan izinler, SDK cmdlet'lerini çalıştırmak için kullanılan hizmet sorumlusuna verilir. Etkileşimli oturumlar için hizmet sorumlusu Microsoft Graph'tır

Daha sonra bir eylemi gerçekleştirmek için gerekli Microsoft Graph API izinlerinin nasıl bulunacağı sorusu ortaya çıkıyor. Hedefe dört şekilde ulaşabilirsiniz:

Tahmin Etme ve Aşırı İzin

İlk yöntem tahmin ve umut yaklaşımıdır. Başka bir deyişle, bir betiğin kullanabileceği tüm izinleri verin veya kod çalışana kadar izin eklemeye devam edin. Buradaki tehlike, saldırganlar için çekici bir hedef haline gelen, yoğun izinlere sahip bir hizmet sorumlusuyla karşı karşıya kalmanızdır. SDK cmdlet'lerini çalıştırmak için etkileşimli oturumlar kullanıyorsanız, Microsoft Graph PowerShell hizmet sorumlusunun zaman içinde birçok izin alması ve yoğun izin verilen bir duruma gelmesi ihtimali oldukça yüksektir (Şekil 1). Bu konuya daha sonra döneceğiz.

Grafik İzinlerini Vurgulamak için Grafik Gezgini'ni kullanın

Daha sonra, Grafik Gezgini'nde bir sorgu çalıştırırsanız, gezgin size İzinleri değiştir sekmesinde sorguyu çalıştırmak için gereken izinleri gösterir (Şekil 2). Gösterilen izinler, kullanabileceğiniz tüm geçerli izinleri içerir; dolayısıyla en uygun izni seçmeniz gerekir. Bu durumda sorgu, kiracıdaki kullanıcı hesapları kümesini getirmektir (temel kullanıcı hesabı işlemleri kümesinden biri), dolayısıyla User.Read.All izni iyi bir seçimdir.

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.

Grafik belgelerini okuyun

Tüm SDK cmdlet'leri Grafik sorgularından kaynaklanır. Microsoft, kullanılabilir Grafik sorgularını işlemek ve SDK cmdlet'leri oluşturmak için OtomatikRest adlı bir işlem kullanır. Bu işlem, SDK'nın yeni bir sürümünü oluşturmak için aylık olarak gerçekleştirilir. Süreç aynı zamanda otomatik dokümantasyon da oluşturur, ancak makine tarafından oluşturulan metin genellikle karmaşıktır ve takip edilmesi zordur, bu yüzden sıklıkla temel Graph dokümantasyonuna geri dönüyorum. Kullanıcı hesaplarının listelenmesi örneğini ele alalım. Hızlı bir arama bizi, hem yetki verilen (oturum açmış kullanıcı olarak verilere erişmek için kullanılan) hem de uygulama (arka plan işlemleri için kullanılan) için gerekli izinleri listeleyen Kullanıcıları listele sayfasına götürür. Bu durumda sayfa, User.Read.All seçeneğinin iyi bir seçim olduğunu doğrular.

Grafik İzinlerini Tanımlamak için SDK Yardımını Kullanın

SDK, geliştiricilerin eylemleri gerçekleştirmek için hangi izinlere ihtiyaç duyduklarını anlamalarına yardımcı olacak iki cmdlet içerir.

  • Find-MgGraphPermission: Farklı eylemler için yetki verilen izinleri ve uygulama izinlerini listeler.
  • Find-MgGraphCommand: Gerekli izinler de dahil olmak üzere, farklı nesne türleriyle etkileşimde bulunmak için kullanılabilen cmdlet'leri listeler. Cmdlet, kullanılabilir komutları bulmak için bir nesnenin URI'sini alarak çalışır.

Örneğin Azure AD'de depolanan organizasyon bilgileriyle etkileşim kurmak istediğimi varsayalım. Find-MgGraphPermission cmdlet'ini çalıştırarak başlayabilirim:

Find-MgGraphPermission organization | ? {$_.PermissionType -eq "Application"} | Format-List Name, Description

Name        : Organization.Read.All
Description : Allows the app to read the organization and related resources, on behalf of the signed-in user. Related resources include things like subscribed skus and tenant branding information.

Name        : Organization.ReadWrite.All
Description : Allows the app to read and write the organization and related resources, on behalf of the signed-in user. Related resources include things like subscribed skus and tenant branding information.

Komut, uygulama izinlerini filtrelemek ve görüntülemek için çıktısını yönlendirir (aynı devredilen izinler mevcuttur). Çıktıdan, kuruluş bilgilerini (kiracı adı ve tanımlayıcı gibi) ve Organization.ReadWrite.All okumak için Organization.Read.All iznini kullanmamız gerektiği açıktır. yazılabilir bir ayarı güncellememiz gerekir mi?

Kısa olması açısından yukarıda yalnızca izin adını ve açıklamasını gösteriyorum. Microsoft 365 grupları da dahil olmak üzere Azure AD gruplarının özelliklerini güncellemek için gereken Group.ReadWrite.All izninin tam çıktısını burada bulabilirsiniz.

Id             : 62a82d76-70ea-41e2-9197-370581804d09
PermissionType : Application
Consent        : Admin
Name           : Group.ReadWrite.All
Description    : Allows the app to create groups, read all group properties and memberships, update group properties and memberships, and delete groups. Also allows the app to read and write group calendar and conversations.  All of these operations can be performed by the app without a signed-in user.

Kullanıcılar, Gruplar, Azure AD (Dizin), Uygulamalar (Uygulama) vb. ile etkileşimde bulunmak için hangi izinlerin gerekli olduğunu görmek için komutların değiştirilmiş bir sürümünü deneyebilirsiniz.

Find-MgGraphCommand cmdlet'i, o URL için hangi SDK cmdlet'lerinin mevcut olduğunu görmek için bir Grafik URL'sinin bir kısmını iletir. URL, nesne kümeleriyle ilgilenmek için kullanılabilen cmdlet'leri listeleyen Kullanıcılar veya Gruplar gibi bir şeydir. {id} eklerseniz bu, tek tek nesneleri işlemek için kullanılabilen cmdlet'leri görmek istediğiniz anlamına gelir.

Örneğin, bireysel grupları işlemek için hangi cmdlet'lerin mevcut olduğunu görelim. Komut ve çıktısı aşağıda gösterilmiştir:

Find-MgGraphCommand -uri "/groups/{id}" | ? {$_.APIVersion -eq "v1.0"} | Fl Command, Method, Permissions

Command     : Get-MgGroup
Method      : GET
Permissions : {Directory.AccessAsUser.All, Directory.Read.All, Directory.ReadWrite.All, Group.Read.All...}

Command     : Remove-MgGroup
Method      : DELETE
Permissions : {Directory.AccessAsUser.All, Group.ReadWrite.All}

Command     : Update-MgGroup
Method      : PATCH
Permissions : {Directory.AccessAsUser.All, Directory.ReadWrite.All, Group.ReadWrite.All}

Graph'ın V1.0 ve beta olmak üzere iki uç noktası vardır. V1.0 uç noktası üretim sürümüdür, beta uç noktası ise geliştirme aşamasındadır. Çoğu durumda, ek işlevsellik sağladıkları için cmdlet'leri beta uç noktayla birlikte kullanırsınız. Örneğin, Get-MgUser cmdlet'ini V1.0 uç noktasına karşı çalıştırırsanız, hesaplar için herhangi bir lisans bilgisi döndürmez ancak beta uç noktaya karşı çalıştırıldığında döner.

Bu durumda, çıktıyı yalnızca V1.0 uç noktasında mevcut olan komutları gösterecek şekilde filtreledim ve bir grubu listelemek, bir grubu silmek ve bir grubun özelliklerini güncellemek için üç cmdlet'in mevcut olduğunu görebiliriz. Ayrıca Group.Read.All izninin grup bilgilerini okumak için yeterli olduğunu görebiliriz ancak bir grubu silmek veya güncellemek için Group.ReadWriteAll'e ihtiyacımız var.

Kapsam belirleme

Bir betiğin gerçekleştirdiği eylemleri gerçekleştirmesi için hangi Microsoft Graph API izinlerinin gerekli olduğunu öğrendikten sonra, Connect-MgGraph cmdlet'inin Scopes parametresinde Graph'a bağlanırken gerekli izinler kümesini belirtirsiniz. Örneğin:

$RequiredScopes = ("Organization.ReadWrite.All”, "Directory.Read.All")
Connect-MgGraph -Scope $RequiredScopes

Etkileşimli oturumlar için Microsoft Graph PowerShell hizmet sorumlusunun istenen izinleri kullanma izni yoksa sizden onay istenir (Şekil 3).

Uygulamanın bu izni kullanmasına izin verirseniz oturum, devredilen izni oturum süresince kullanabilir. Temel olarak devredilmiş izin, kullanıcının sahip olduğu verilere erişebilmesi ancak diğer kullanıcılara ait verilere erişememesi anlamına gelir. Ancak verilere erişimin bir hesaba atanan yönetici rolleri aracılığıyla da sağlanması mümkündür. Microsoft'un belgelerinde açıkladığı gibi, "Uygulamanızın etkin izinleri, uygulamaya (izin yoluyla) verilen yetkilendirilmiş izinler ile şu anda oturum açmış olan kullanıcının ayrıcalıklarının en az ayrıcalıklı kesişimidir .” Başka bir deyişle, hesabınız yönetici rolüne sahipse, hesabınızın yönetici rolüne sahip olmaması durumunda olduğundan daha fazla veriye erişebileceksiniz.

Kuruluş adına onay verirseniz Entra ID, izni hizmet sorumlusuna ekler ve bundan sonraki tüm oturumlar için kullanılabilir hale gelir. Hizmet sorumlusuna verilen onay, uygulama izni içindir; bu, kullanıcının kuruluş genelindeki verilere erişebileceği anlamına gelir.

Bağlandıktan sonra aşağıdakileri çalıştırarak hangi izinlerin etkin olduğunu kontrol edebilirsiniz:

(Get-MgContext).Scopes

Birikmiş Grafik İzinleri

Microsoft Graph PowerShell hizmet sorumlusunun sürekli olarak izin biriktirmesi, korunulması gereken bir durumdur. Hizmet sorumlusundaki tüm izinleri kaldırmak istiyorsanız bunu Azure AD yönetim merkezi aracılığıyla (Şekil 1'deki gibi) yapabilir veya hizmet sorumlusunu kaldırabilirsiniz. Bu gerçekleştiğinde SDK, bir dahaki sefere birisi oturum açmayı denediğinde hizmet sorumlusunun eksik olduğunu algılar ve onu yeniden oluşturur (hizmet sorumlusu için AppId her zaman 14d82eec-204b-4c2f-b7e8-296a70dab67e'dir) .

Hizmet sorumlusunu oluşturmak için Grafiğe Application.ReadWrite.All izniyle bağlanın ve şu komutları çalıştırın:

Remove-MgServicePrincipal cmdlet'i onay istemeyecektir. Neyse ki Azure AD, hata yapmanız durumunda geçici olarak silinen hizmet sorumlusu nesnelerini geri yükleme yeteneğini yakında kanıtlayacak.

$SDKServicePrincipalId = (Get-MgServicePrincipal -all | ? {$_.DisplayName -eq "Microsoft Graph PowerShell"}).Id
Remove-MgServicePrincipal -ServicePrincipalId $SDKServicePrincipalID

Daha Karmaşık, Daha Fazla Kontrol

Microsoft Graph PowerShell SDK'sıyla çalışmak, PowerShell modüllerinde (şimdiye kadar) normdan daha fazla izinlere dikkat edilmesini gerektirir. Yönetici izinlerini üstlenmek yerine izin istemeli ve yalnızca gerekli seti kullanmalısınız. Alışmak biraz zaman alır ve Azure AD ve MSOL modüllerine dayalı betiklerin dönüştürülmesine yönelik denetim listesinin bir parçasıdır. Hayattaki diğer pek çok şey gibi, zamanla bağlantılar için izin yönetimine de alışacağız.

İlgili makaleler