Konuk Üyelerin Bulunduğu Microsoft 365 Grupları Nasıl Bulunur?
Konuk Üyelerin Bulunduğu Grupları Bulmak İçin Çeşitli Yöntemler Mevcuttur
Graph API'lerini ne kadar sevsem de bazen bir iş için doğru seçim olmuyorlar. Kiracıdaki konuk üyelerin bulunduğu tüm Microsoft 365 gruplarını bulmak isteyen bir okuyucu örneğini ele alalım. Grupları üyeliğe göre filtrelemek için Graph API'lerini kullanmak istediler ancak bunun mümkün olmadığını gördüler. Bunun yerine, işi yapmak için gereken kod türü:
- Tüm misafir hesaplarını bulun.
- Her misafir hesabı için ait oldukları grupları bulun.
- Misafirli grupları rapor edin.
Bu kulağa basit geliyor. Tek sorun, her konuk hesabı için grup kümesini bulmak üzere Azure AD'yi sorgulamak ve ardından Get-MgUserMemberGroup< nedeniyle görünen adı almak için Get-MgGroup'e yapılan bir çağrının yapılması için gereken süredir. tam grup ayrıntıları yerine yalnızca bir dizi grup tanımlayıcıyı döndürür. Her durumda, işte aklıma gelen şey:
[array]$GuestAccounts = Get-MgUser -All -Filter "UserType eq 'Guest'" | Select -ExpandProperty Id
[array]$AllGroups = $Null
ForEach ($Guest in $GuestAccounts) {
[array]$Groups = Get-MgUserMemberGroup -UserId $Guest -SecurityEnabledOnly:$false
$AllGroups += $Groups }
$GraphGroups = $AllGroups | Sort -Unique
ForEach ($Group in $GraphGroups) {
$G = Get-MgGroup -GroupId $Group
If ($G.GroupTypes -like "*Unified*") {
Write-Host ("Microsoft 365 Group {0} found" -f $G.DisplayName) }
}
Yavaş Ama Çalışan Kod
Kod çalışıyor ama yavaş. 170 misafir hesabına ve 217 Microsoft 365 Grubuna sahip kiracımda, kodun konuk üyelerin bulunduğu 12 grubu bulması 10 saniyeden biraz fazla sürdü. Tek seferlik bir komut dosyası için bu sorun değil, ancak performans ve işlevsellik açısından daha iyisini yapabiliriz.
Acil sorun, Microsoft Graph PowerShell SDK cmdlet'lerinin konuk içeren grupları bulmasına yönelik filtrelemenin bulunmamasıdır. Bu, tüm misafirleri alma ve daha sonra ait oldukları grupları bulma ihtiyacını zorlar. Diğer bir karmaşıklık da Get-MgUserMemberGroup'un bir konuğun ait olabileceği tüm grup türlerini döndürmesidir. Çoğu durumda bunlar Microsoft 365 gruplarıdır ancak dağıtım listesine bir konuk hesabı ekleyebilirsiniz; dolayısıyla yalnızca Microsoft 365 gruplarını işlediğimizden emin olmak için daha fazla kontrol yapılması gerekir.
Misafirli Grupları Bulmak için Get-UnifiedGroup'u Kullanma
Ancak Get-UnifiedGroup cmdlet'i için uygun bir filtre mevcuttur. Bu bir Graph cmdlet'i değil ancak Microsoft 365'teki sorunları çözmek için çoğu zaman birden fazla yol bulunduğunu kanıtlıyor. Aslında, Get-UnifiedGroup ile çözüm çok kolaydır çünkü Exchange Online konuk sayısını takip eder her grupta filtrelenebilir bir özellik bulunur; bu, konuk üyelerin bulunduğu grup kümesini bulmak için sunucu tarafı bir filtre kullanabileceğimiz anlamına gelir:
[array]$ExoGroups = Get-UnifiedGroup -Filter {GroupExternalMemberCount -gt 0}
Komut iki saniyeden kısa sürede çalıştı, yani bu hoş bir gelişme.
Konuk Üyelerin Olmaması Gereken Grupların Tespiti
Artık Microsoft 365 gruplarının hangi konuk üyelere sahip olduğunu biliyoruz. Bu ilginç bir bilgi ancak verileri, konukların erişimini engelleyen hassasiyet etiketlerine sahip gruplarda olup olmadığını kontrol etmek için kullanabiliriz. Yönetici, bir gruba misafir erişimini engelleyen bir hassasiyet etiketi atarsa, hassasiyet etiketi yeni misafir üyelerin eklenmesini engeller ancak mevcut misafirler üzerinde hiçbir etkisi olmaz. Bu üyeler grubun kaynaklarına tam erişimden yararlanmaya devam ediyor. Bu misafirlerin kalması, etiketin yanlış olup olmadığına veya konukların kaldırılması gerekip gerekmediğine karar vermek için incelemeyi hak eden bir tutarsızlık yaratır.
Belirlediğimiz grup kümesini kontrol etmek için hangi hassasiyet etiketlerinin konuk üyeleri yasaklayan kapsayıcı yönetimi ayarlarına (Ekipleri, Grupları ve Siteleri kontrol etmek için) sahip olduğunu bilmemiz gerekir. Bunu yapmak için:
- Tüm etiketleri bulmak için Set-Label cmdlet'ini çalıştırın.
- Konteyner yönetimi ayarlarının bulunduğu seti bulun.
- Konuk erişimini engelleyen etiketleri filtreleyin.
Bu kod işi yapar ve iki karma tablo oluşturur: biri konteyner yönetimi etiketlerini içerir, diğeri ise konuk erişimine izin veren etiketleri içerir.
Connect-IPPSSession
[array]$Labels = Get-Label
$ContainerLabels = @{}
$LabelsAllowingGuests = @{}
ForEach ($Label in $Labels) { # Find out which labels apply blocks to guest users
$LabelGuestAccess = $True
$LabelActions = $Label.LabelActions | ConvertFrom-Json
ForEach ($LabelAction in $LabelActions) {
If (($LabelAction.Type -eq "protectgroup") -and ($Label.ContentType -Like "*Site*")) {
$Settings = $LabelAction.Settings
$ContainerLabels.Add([String]$Label.ImmutableId, $Label.DisplayName)
ForEach ($Setting in $Settings) {
If ($Setting.Key -eq "allowaccesstoguestusers" -and $Setting.Value -eq "true") {
$LabelsAllowingGuests.Add([String]$Label.ImmutableId, $Label.DisplayName)}}}
}}
Write-Host “The following labels allow guest access to Groups, Teams, and Sites”
$LabelsAllowingGuests | Format-Table Value
Hash tabloları doldurulduğunda tutarlı olduğundan emin olmak için her gruba atanan hassasiyet etiketini kontrol edebiliriz. Bir grupta misafirlere izin vermeyen bir etiket varsa, bir yöneticinin misafirlerin kalması mı yoksa kaldırılması mı gerektiğine karar vermesi için grubu işaretleriz. Karar, konukların bir grup üyeliğine alınmasına izin vermekse, konukların erişimine izin veren bir hassasiyet etiketi atamak en iyisi olacaktır.
ForEach ($Group in $ExoGroups) {
$CheckLabel = $LabelsAllowingGuests.Item($Group.SensitivityLabel.Guid)
# Write-Host "Group" $Group.DisplayName "Label" $LabelDisplayName
If (!($CheckLabel)) {
$BadLabel = $ContainerLabels.Item($Group.SensitivityLabel.Guid)
Write-Host ("The label assigned to the {0} group doesn't allow guests ({1})" -f $Group.DisplayName, $BadLabel ) }
}
The label assigned to the Corporate Business Development group doesn't allow guests (Limited Access)
The label assigned to the Sales Department team group doesn't allow guests (Limited Access)
Hız ve Verimlilik
Ve bu kadar. Konuk üyelerin bulunduğu gruplar bulduk ve grupların uygun hassasiyet etiketi olup olmadığını kontrol ettik. Grupları bulmak için sunucu tarafı filtre kullanmak, Get-UnifiedGroup ile performansın şu anda Graph cmdlet'leriyle mümkün olandan çok daha iyi olduğu anlamına gelir.
Bir ek not olarak, son birkaç yılda Microsoft, konteyner yönetimi için mevcut kontrol setini oluşturdu. Son zamanlardaki bir örnek, sitenin harici paylaşım yeteneği üzerindeki kontroldür. Office belgelerini (ve PDF dosyalarını) korumak için duyarlılık etiketleri kullanmak istemeseniz bile kapsayıcı yönetimi için etiketleri kullanmak ekipler, gruplar ve siteler üzerinde tutarlı ayarlar uygulamanın harika bir yoludur.