modules/Devolutions.CIEM.EffectivePermissions/Public/Get-CIEMEffectivePermission.ps1
|
function Get-CIEMEffectivePermission { [CmdletBinding()] [OutputType('CIEMEffectivePermission[]')] param( [Parameter()] [ValidateSet('Azure', 'AWS')] [string[]]$Provider, [Parameter()] [string]$PrincipalId, [Parameter()] [ValidateSet('User', 'Group', 'ServicePrincipal', 'ManagedIdentity', 'Role', 'ServiceAccount', 'Application', 'WorkloadIdentity', 'Unknown')] [string[]]$PrincipalType, [Parameter()] [string]$ResourceId, [Parameter()] [string]$ResourceType, [Parameter()] [ValidateSet('Read', 'Write', 'Manage', 'PermissionAdmin', 'DataAccess', 'SecretAccess', 'AssumeRole', 'Impersonate', 'Execute', 'Unclassified')] [string[]]$AccessLevel, [Parameter()] [ValidateSet('RoleAssignment', 'GroupMembership', 'DirectoryRole', 'AppRoleAssignment', 'OAuthGrant', 'ManagedPolicy', 'InlinePolicy', 'ResourcePolicy', 'TrustPolicy', 'ServiceControlPolicy', 'PermissionBoundary', 'IAMBinding', 'DenyPolicy', 'RoleBinding', 'ClusterRoleBinding')] [string[]]$EntitlementType, [Parameter()] [switch]$PrivilegedOnly, [Parameter()] [bool]$IncludeInherited = $true, [Parameter()] [switch]$IncludeDenied, [Parameter()] [switch]$IncludeRaw ) $ErrorActionPreference = 'Stop' $selectedProviders = if ($Provider) { @($Provider) } else { @('Azure') } $results = [System.Collections.Generic.List[object]]::new() foreach ($providerName in $selectedProviders) { switch ($providerName) { 'Azure' { $results.AddRange(@(ResolveCIEMAzureEffectivePermission -IncludeInherited:$IncludeInherited)) } 'AWS' { $results.AddRange(@(ResolveCIEMAwsEffectivePermission)) } default { throw "Provider '$providerName' is not supported by Get-CIEMEffectivePermission." } } } $filtered = @($results) if ($PrincipalId) { $filtered = @($filtered | Where-Object { $_.Principal.Id -eq $PrincipalId }) } if ($PrincipalType) { $filtered = @($filtered | Where-Object { [string]$_.Principal.Type -in $PrincipalType }) } if ($ResourceId) { $filtered = @($filtered | Where-Object { $_.Target.Id -eq $ResourceId }) } if ($ResourceType) { $filtered = @($filtered | Where-Object { $_.Target.Type -eq $ResourceType }) } if ($AccessLevel) { $filtered = @($filtered | Where-Object { @($_.Actions | Where-Object { [string]$_.AccessLevel -in $AccessLevel }).Count -gt 0 }) } if ($EntitlementType) { $filtered = @($filtered | Where-Object { [string]$_.Entitlement.Type -in $EntitlementType }) } if ($PrivilegedOnly) { $filtered = @($filtered | Where-Object { $_.Privileged }) } if (-not $IncludeDenied) { $filtered = @($filtered | Where-Object { @($_.Actions | Where-Object { $_.Effect -in @([CIEMPermissionEffect]::Deny, [CIEMPermissionEffect]::ConditionalDeny) }).Count -eq 0 }) } if (-not $IncludeRaw) { foreach ($item in $filtered) { foreach ($evidence in @($item.Evidence)) { $evidence.DataJson = $null } } } @($filtered) } |