Run-ReportAzureRBAC.ps1
<#PSScriptInfo
.VERSION 1.0.0.4 .GUID 2b32a6b1-3ba3-4b6c-a4dd-2c3f09f2f835 .AUTHOR matt.quickenden .COMPANYNAME Avanade .COPYRIGHT .TAGS Report HTML Azure RBAC .LICENSEURI .PROJECTURI http://www.azurefieldnotes.com/ .ICONURI .EXTERNALMODULEDEPENDENCIES AzureRM .REQUIREDSCRIPTS .EXTERNALSCRIPTDEPENDENCIES .RELEASENOTES #> <# .DESCRIPTION A report to show RBAC from Azure. This is a prototype. #> #Requires –Modules AzureRM #Requires –Modules ReportHTML #Requires -Modules ReportHTMLHelpers [CmdletBinding(DefaultParameterSetName='ReportParameters')] param ( [Parameter(Mandatory=$false,ParameterSetName='ReportParameters')] [string] $LeftLogo ='https://azurefieldnotesblog.blob.core.windows.net/wp-content/2017/02/YourLogoHere.png', [Parameter(Mandatory=$false,ParameterSetName='ReportParameters')] [string] $RightLogo ='https://azurefieldnotesblog.blob.core.windows.net/wp-content/2017/02/ReportHTML.png', [Parameter(Mandatory=$false,ParameterSetName='ReportParameters')] [string] $reportPath, [Parameter(Mandatory=$false,ParameterSetName='ReportParameters')] [string] $ReportName='AzureRBAC', [Parameter(Mandatory=$false,ParameterSetName='ReportParameters')] [Parameter(Mandatory=$false,ParameterSetName='ReportParametersObject')] [switch] $UseExistingData, [Parameter(Mandatory=$false,ParameterSetName='ReportParametersObject')] [PSObject] $ReportParameterObject ) Test-AzureRmAccountTokenExpiry if ($UseExistingData) { Write-Warning "Reusing the data, helpful when developing the report" } else { $RoleDefinitions = Get-AzureRmRoleDefinition $AssignedRoles = Get-AzureRmRoleAssignment $AzureUsers = $AssignedRoles | select SignInName -Unique $GroupAssignedRoles = $AssignedRoles | group DisplayName $ResourceGroups = Get-AzureRmResourceGroup $i=0;$Records = $ResourceGroups.Count $RGRoleAssignments = @() foreach ($RG in $ResourceGroups ) { Write-Progress -PercentComplete ($i/$Records *100) -Activity "Getting role assignments from Resource Groups" $RGRoleAssignment = '' | select ResourceGroup, RoleAssignment $RGRoleAssignment.ResourceGroup = $rg.ResourceGroupName $RGRoleAssignment.RoleAssignment = Get-AzureRmRoleAssignment -ResourceGroupName $RG.ResourceGroupName | select DisplayName, RoleDefinitionName, Scope $RGRoleAssignments += $RGRoleAssignment $I++ } $UserAssignedRBAC = @() foreach ($AzureUser in ($AzureUsers | ? {$_.SignInName -ne $null}) ) { $UserAssignedRBAC += Get-AzureRmRoleAssignment -SignInName $AzureUser.SignInName | Select DisplayName, RoleDefinitionName, Scope #GROUP... $UserAssignedRBAC += Get-AzureRmRoleAssignment -SignInName $AzureUser.SignInName -ExpandPrincipalGroups | FL DisplayName, RoleDefinitionName, Scope } $GroupedUserAssignedRBAC = $UserAssignedRBAC | group DisplayName } $rpt = @() $rpt += Get-HTMLOpenPage -LeftLogoString $LeftLogo -RightLogoString $RightLogo $rpt += Get-HTMLContentOpen -HeaderText RoleDefinitions -IsHidden #$Roles = Get-HTMLAnchorLink -AnchorName $_.name.replace(' ','') -AnchorText $_.name $rpt += Get-HTMLContentTable ($RoleDefinitions | select Name, Description, IsCustom) $rpt += Get-HTMLContentClose $rpt += Get-HTMLContentOpen -HeaderText ("RBAC Role Definitions") -BackgroundShade 2 -IsHidden foreach ($RoleDefinition in $RoleDefinitions ) { $rpt += Get-HTMLContentOpen -HeaderText $RoleDefinition.Name -BackgroundShade 1 -Anchor ($RoleDefinition.Name.Replace(' ','')) -IsHidden $rpt += Get-HTMLContenttext -Heading "Description" -Detail $RoleDefinition.Description $rpt += Get-HTMLContentOpen -HeaderText "actions" $ofs = "<BR>" $actions = ([string]$RoleDefinition.Actions) $Nonactions = ([string]$RoleDefinition.NotActions) $ofs = "" $rpt += Get-HTMLContenttext -Heading "Actions" -Detail $Actions $rpt += Get-HTMLContenttext -Heading "Not Actions" -Detail $Nonactions $rpt += get-htmlcontentclose $rpt += get-htmlcontentclose } $rpt += Get-HTMLContentClose $rpt += Get-HTMLContentOpen -HeaderText "Resource Groups & Roles" -BackgroundShade 2 -IsHidden foreach ($RGRole in $RGRoleAssignments) { $rpt += Get-HTMLContentOpen -HeaderText $RGRole.ResourceGroup -BackgroundShade 1 -IsHidden $rpt += Get-HTMLContentTable ($RGRole.RoleAssignment | select DisplayName, RoleDefinitionName) $rpt += get-htmlcontentclose } $rpt += get-htmlcontentclose $rpt += Get-HTMLContentOpen -HeaderText "User Assigned Roles" -BackgroundShade 1 -IsHidden $rpt += get-htmlcontenttable ($UserAssignedRBAC) -GroupBy displayname $rpt += get-htmlcontentclose $rpt += get-htmlclosepage Save-HTMLReport -ReportContent $rpt -ReportPath $ReportPath -ReportName $ReportName -ShowReport |