private/tests/Test-Assessment.21830.ps1

function Test-Assessment-21830 {
    [CmdletBinding()]
    param()

    Write-PSFMessage '🟦 Start' -Tag Test -Level VeryVerbose

    $activity = "Checking Highly privileged roles are only activated in a PAW/SAW device"
    Write-ZtProgress -Activity $activity -Status "Getting policy"

    # Get all Conditional Access policies
    $allCAPolicies = Invoke-ZtGraphRequest -RelativeUri 'identity/conditionalAccess/policies' -ApiVersion 'v1.0'

    # Filter for enabled policies on client side
    $enabledCAPolicies = $allCAPolicies | Where-Object { $_.state -eq 'enabled' }

    # Get all role definitions
    $allRoleDefinitions = Invoke-ZtGraphRequest -RelativeUri 'roleManagement/directory/roleDefinitions' -ApiVersion 'beta'

    # Filter for privileged roles on client side
    $privilegedRoles = $allRoleDefinitions | Where-Object { $_.isPrivileged -eq $true }

    $policyDetails = @()
    # Loop through each enabled policy to get detailed information
    foreach ($policy in $enabledCAPolicies) {
        $policyId = $policy.id
        $policyDetails += Invoke-ZtGraphRequest -RelativeUri "identity/conditionalAccess/policies/$policyId" -ApiVersion 'v1.0'
    }

    $compliantDevicePolicies = $policyDetails | Where-Object {
        # Check if policy targets privileged roles
        $targetsPrivilegedRoles = $false
        if ($_.conditions.users.includeRoles) {
            foreach ($roleId in $_.conditions.users.includeRoles) {
                if ($privilegedRoles.id -contains $roleId) {
                    $targetsPrivilegedRoles = $true
                    break
                }
            }
        }

        # Check if policy requires compliant device control
        $compliantDevice = $_.grantControls.builtInControls -contains 'compliantDevice'

        return $targetsPrivilegedRoles -and $compliantDevice
    }

    $deviceFilterPolicies = $policyDetails | Where-Object {
        # Check if policy targets privileged roles
        $targetsPrivilegedRoles = $false
        if ($_.conditions.users.includeRoles) {
            foreach ($roleId in $_.conditions.users.includeRoles) {
                if ($privilegedRoles.id -contains $roleId) {
                    $targetsPrivilegedRoles = $true
                    break
                }
            }
        }

        # Check if device filter exists and has exclude mode
        $hasDeviceFilterExclude = $_.conditions.devices.deviceFilter -and
        $_.conditions.devices.deviceFilter.mode -eq 'exclude'

        # Check if policy blocks access (no grant controls or has block control)
        $blocksAccess = (-not $_.grantControls.builtInControls) -or
                        ($_.grantControls.builtInControls -contains 'block')

        return $targetsPrivilegedRoles -and $hasDeviceFilterExclude -and $blocksAccess
    }

    if ($compliantDevicePolicies.Count -eq 0 -or $deviceFilterPolicies.Count -eq 0) {
        $passed = $false
        $testResultMarkdown = "No Conditional Access policies found that restrict privileged roles to PAW device."
    }
    else {
        $passed = $true
        $testResultMarkdown = "Conditional Access policies restrict privileged role access to PAW devices."
    }

    $compliantDeviceMarkdown = "❌"
    if ($compliantDevicePolicies.Count -gt 0) {
        $compliantDeviceMarkdown = "✅"
    }

    $deviceFilterMarkdown = "❌"
    if ($deviceFilterPolicies.Count -gt 0) {
        $deviceFilterMarkdown = "✅"
    }

    $portalTemplate = "https://entra.microsoft.com/#view/Microsoft_AAD_ConditionalAccess/PolicyBlade/policyId/{0}"


    $testResultMarkdown += "`n`n**$compliantDeviceMarkdown Found $($compliantDevicePolicies.Count) policy(s) with compliant device control targeting all privileged roles**`n"
    foreach ($policy in $compliantDevicePolicies) {
        $portalLink = $portalTemplate -f $policy.id
        $testResultMarkdown += "- **Policy:** [$(Get-SafeMarkdown($policy.displayName))]($portalLink)`n"
    }

    $testResultMarkdown += "`n`n**$deviceFilterMarkdown Found $($deviceFilterPolicies.Count) policy(s) with PAW/SAW device filter targeting all privileged roles**`n"
    foreach ($policy in $deviceFilterPolicies) {
        $portalLink = $portalTemplate -f $policy.id
        $testResultMarkdown += "- **Policy:** [$(Get-SafeMarkdown($policy.displayName))]($portalLink)`n"
    }

    $params = @{
        TestId             = '21830'
        Title              = 'Highly privileged roles are only activated in a PAW/SAW device'
        UserImpact         = 'Low'
        Risk               = 'High'
        ImplementationCost = 'High'
        AppliesTo          = 'Identity'
        Tag                = 'Identity'
        Status             = $passed
        Result             = $testResultMarkdown
    }
    Add-ZtTestResultDetail @params
}