private/tests/Test-Assessment.21790.ps1

<#
.SYNOPSIS

#>


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

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

    $activity = "Checking Outbound cross-tenant access settings are configured"
    Write-ZtProgress -Activity $activity -Status "Getting policy"

    # Query the default cross-tenant access policy
    $result = Invoke-ZtGraphRequest -RelativeUri 'policies/crossTenantAccessPolicy/default' -ApiVersion v1.0

    # Helper function to process targets
    function Get-TargetDescription {
        param (
            [Parameter(Mandatory)]
            [object]$TargetConfig
        )

        if ($TargetConfig.targets[0].target -eq "AllUsers") {
            return "All users"
        }
        elseif ($TargetConfig.targets[0].target -eq "AllApplications") {
            return "All external applications"
        }
        else {
            $users = 0
            $groups = 0
            $applications = 0

            foreach ($target in $TargetConfig.targets) {
                if ($target.targetType -eq "user") {
                    $users++
                }
                elseif ($target.targetType -eq "group") {
                    $groups++
                }
                else {
                    $applications++
                }
            }

            if ($applications -gt 0) {
                return "Selected external applications ($applications applications)"
            }
            else {
                return "Selected users and groups ($users users, $groups groups)"
            }
        }
    }

    # Evaluate B2B Collaboration outbound settings
    $b2bCollaborationOutbound = $result.b2bCollaborationOutbound.usersAndGroups.accessType -eq "blocked" -and
    $result.b2bCollaborationOutbound.usersAndGroups.targets[0].target -eq "AllUsers" -and
    $result.b2bCollaborationOutbound.applications.accessType -eq "blocked" -and
    $result.b2bCollaborationOutbound.applications.targets[0].target -eq "AllApplications"

    # Evaluate B2B Direct Connect outbound settings
    $b2bDirectConnectOutbound = $result.b2bDirectConnectOutbound.usersAndGroups.accessType -eq "blocked" -and
    $result.b2bDirectConnectOutbound.usersAndGroups.targets[0].target -eq "AllUsers" -and
    $result.b2bDirectConnectOutbound.applications.accessType -eq "blocked" -and
    $result.b2bDirectConnectOutbound.applications.targets[0].target -eq "AllAppplications"

    $testResultMarkdown = ""

    if ($b2bCollaborationOutbound -and $b2bDirectConnectOutbound) {
        $passed = $true
        $testResultMarkdown += "Tenant has a default cross-tenant access setting outbound policy that blocks access.%TestResult%"
    }
    else {
        $passed = $false
        $testResultMarkdown += "Tenant has a default cross-tenant access setting outbound policy with unrestricted access.%TestResult%"
    }

    # Portal link for the report
    $portalLink = 'https://entra.microsoft.com/#view/Microsoft_AAD_IAM/OutboundAccessSettings.ReactView/isDefault~/true/name//id/'

    # Get user/group target descriptions
    $b2bColUsersTargetDesc = Get-TargetDescription -TargetConfig $result.b2bCollaborationOutbound.usersAndGroups
    $b2bColAppsTargetDesc = Get-TargetDescription -TargetConfig $result.b2bCollaborationOutbound.applications
    $b2bDirUsersTargetDesc = Get-TargetDescription -TargetConfig $result.b2bDirectConnectOutbound.usersAndGroups
    $b2bDirAppsTargetDesc = Get-TargetDescription -TargetConfig $result.b2bDirectConnectOutbound.applications

    # Create a here-string with the report details
    $mdInfo = @"

## [Outbound access settings - Default settings]($portalLink)
### B2B Collaboration
Users and groups
- Access status: $($result.b2bCollaborationOutbound.usersAndGroups.accessType)
- Applies to: $b2bColUsersTargetDesc

External applications
- Access status: $($result.b2bCollaborationOutbound.applications.accessType)
- Applies to: $b2bColAppsTargetDesc

### B2B Direct Connect
Users and groups
- Access status: $($result.b2bDirectConnectOutbound.usersAndGroups.accessType)
- Applies to: $b2bDirUsersTargetDesc

External applications
- Access status: $($result.b2bDirectConnectOutbound.applications.accessType)
- Applies to: $b2bDirAppsTargetDesc

"@


    # Replace the placeholder with the detailed information
    $testResultMarkdown = $testResultMarkdown -replace "%TestResult%", $mdInfo

    $params = @{
        TestId             = '21790'
        Title              = 'Outbound cross-tenant access settings are configured'
        UserImpact         = 'Medium'
        Risk               = 'High'
        ImplementationCost = 'High'
        AppliesTo          = 'Identity'
        Tag                = 'Identity'
        Status             = $passed
        Result             = $testResultMarkdown
    }

    Add-ZtTestResultDetail @params
}