Azure AD'deki Tüm Yönetici Rolü Üyeliklerini Powershell ile Dışa Aktarın


Azure AD'de atanan tüm yönetici rollerinin listesini dışarı aktarma yeteneği, kiracınızdaki ayrıcalıklı kullanıcılara üst düzey bir genel bakış sağlayacaktır. Bu, ilgili kullanıcılara uygun izinlerin atanıp atanmadığı veya bazı değişikliklerin gerekli olup olmadığı konusunda bilinçli bir karar vermenizi sağlayacaktır.

Önceki bir eğitimde, PIM'den (Ayrıcalıklı Kimlik Yönetimi) yönetici rolü atamalarının tam listesini dışa aktarmak için PowerShell'i nasıl kullanabileceğimizi göstermiştim. Bu eğitimi buradan okuyabilirsiniz: Microsoft Graph PowerShell ile Tüm AzureAD PIM Rolleri Nasıl Dışa Aktarılır.

Bu eğitimde, Microsoft Graph PowerShell kullanarak Azure AD'deki tüm yönetici rolü üyeliklerinin raporunu nasıl çalıştıracağınızı ve bunu CSV'ye nasıl aktaracağınızı göstereceğim. Rol yönetimi için PIM kullanmıyorsanız ancak yine de kiracınızda hangi kullanıcıların yönetici rolü üyeliğine sahip olduğunu açıkça tanımlamanız gerekiyorsa bu yararlı olur.

Önkoşullar

Güç kalkanı

Bu komut dosyasındaki komutu çalıştırmak için modülün 1. sürümünden itibaren Microsoft Graph PowerShell'in en güncel sürümünün yüklü olması gerekir. Sürüm 2, bu komut dosyasında kullanılan Get-MgUser cmdlet'indeki bazı bilgileri desteklememektedir.

Microsoft Graph PowerShell'in nasıl kurulacağı konusunda rehberlik için buradaki eğitimimi izleyin: Microsoft Graph PowerShell Modülü Nasıl Kurulur

İzinler

Microsoft Graph PowerShell için gerekli izinlere (RoleManagement.Read.Directory, User.Read.All, AuditLog.Read.All) izin vermek için kiracınızda genel yönetici rolünün size atanması gerekir. Ancak izinlere izin verildikten sonra global okuyucu gibi daha düşük seviyeli bir kullanıcı bağlamı kullanılabilir.

Tüm yönetici rolü üyelikleri komut dosyasını dışa aktarın

Bu komut dosyası önce Microsoft Graph'a bağlanacak ve tüm ayrıcalıklı dizin rollerini depolayacak ve bunları $allroles değişkenine kaydedecektir. Daha sonra her rol arasında geçiş yapacak ve üye atamaları olup olmadığını kontrol edecek, atanan üye yoksa rol atlanacaktır. Daha sonra mevcut role yapılan her atamaya ilişkin bilgileri içeren bir dizi nesnesi sağlanacak ve bu daha sonra rapora eklenecektir.

Bu scriptin aynı kopyasına buradaki Github profilimden de ulaşabilirsiniz.

Bu komut dosyasında kullanılan 3 temel cmdlet vardır:

  • Get-MgDirectoryRole > Bu cmdlet, kiracınızdaki tüm yönetici rollerini alacaktır.
  • Get-MgDirectoryRoleMember > Bu cmdlet belirli bir rolün üyelerini alacaktır.
  • Get-MgUser > Bu cmdlet, kiracınızdaki kullanıcıları alacaktır. Bu cmdlet'i kullanmayla ilgili kapsamlı bir kılavuzu burada yazdım: Get-MgUser'ı Microsoft Graph PowerShell ile Kullanma
<#
AUTHOR: Daniel Bradley
LINKEDIN: https://www.linkedin.com/in/danielbradley2/
TWITTER: https://twitter.com/DanielatOCN
WEBSITE: https://ourcloudnetwork.com/
Info: This script was written by Daniel Bradley for the ourcloudnetwork.com blog
#>

#Connect to Microsoft Graph
Connect-MgGraph -Scopes RoleManagement.Read.Directory, User.Read.All, AuditLog.Read.All
Select-MgProfile -Name Beta

#Get all directory roles
$allroles = Get-MgDirectoryRole

#Provision in new array object
$Report = [System.Collections.Generic.List[Object]]::new()

#Start a loop to build the report
Foreach ($role in $allroles){
    $rolemembers = $null
    #Get members of each role
    $Rolemembers = Get-MgDirectoryRoleMember -DirectoryRoleId $Role.id
    #Skip role if role assignments are empty
    If ($Rolemembers -eq $null) {Write-host "No users assigned to $($Role.DisplayName)"} Else {
        Foreach ($Member in $rolemembers){
        #Filter out non-user assignments
            If ($member.AdditionalProperties.'@odata.type' -notmatch "servicePrincipal") {
                $SignInActivity = $null
                #Get signin logs for user
                $SignInActivity = Get-MgUser -UserId $member.id -Property signinactivity | Select-Object -ExpandProperty signinactivity
                #Build current array object
                $obj = [pscustomobject][ordered]@{
                    Role                     = $Role.DisplayName
                    User                     = $member.AdditionalProperties.displayName
                    Username                 = $member.AdditionalProperties.userPrincipalName
                    LastInteractiveSignIn    = $SignInActivity.LastSignInDateTime
                }
                #Add current array object to the report
                $report.Add($obj)
            }
        }
    }
}

#Export report to csv
$report | Export-CSV -path C:\temp\AdminRoleReport.csv -NoTypeInformation

Özet

Bu betik, Microsoft Graph PowerShell kullanarak eyleme geçirilebilir bir yönetici rolü üyelik raporu elde etmeye yönelik basit bir barebone yöntemidir. Rol üyelikleriniz için hiçbir şekilde eksiksiz bir denetim çözümü değildir, ancak ilk adımları atarak ve kullanıcıların artık ihtiyaç duymadığı erişimi ortadan kaldırarak yönetici ayak izinizi azaltarak daha iyi rol yönetimi yolculuğunuza başlamanıza yardımcı olacaktır.

İlgili makaleler