Skip to main content

Forcepoint Web Security to Entra Internet Access (EIA) Configuration Transformer

Overview​

The Convert-ForcepointWS2EIA function converts Forcepoint Web Security (FWS) policy configuration to Microsoft Entra Internet Access (EIA) format. It processes a matrix-style CSV file where rows represent web categories (predefined or user-defined FQDNs) and columns represent security groups, with cell values indicating the policy action (Block, Allow, Continue, Do not block).

Prerequisites​

Required Input Files​

  1. Forcepoint Policies CSV (matrix format)

    • Manually exported from Forcepoint Web Security
    • Matrix-style format with categories/FQDNs as rows and security groups as columns
    • Sample file: Samples/ForcepointWS2EIA/sample_forcepoint_policies.rename_to_csv
  2. Category Mappings CSV

    • CSV file mapping Forcepoint predefined categories to GSA categories
    • Sample file: Samples/ForcepointWS2EIA/Forcepoint-to-GSA-CategoryMapping.rename_to_csv

PowerShell Requirements​

  • PowerShell 7.0 or higher
  • Migrate2GSA module installed

Installation​

# Import the module
Import-Module Migrate2GSA

# Verify the function is available
Get-Command Convert-ForcepointWS2EIA

Syntax​

Convert-ForcepointWS2EIA
-ForcepointPoliciesPath <string>
-CategoryMappingsPath <string>
[-OutputBasePath <string>]
[-EnableDebugLogging]
[<CommonParameters>]

Parameters​

-ForcepointPoliciesPath​

Path to the Forcepoint Policies CSV export file. This should be a matrix-style CSV where rows represent web categories or FQDNs and columns represent security groups with their disposition settings.

  • Type: String
  • Required: Yes

-CategoryMappingsPath​

Path to the Forcepoint to GSA category mappings CSV file. This file provides mapping between Forcepoint predefined web categories and Microsoft GSA (Global Secure Access) web categories.

  • Type: String
  • Required: Yes

-OutputBasePath​

Base directory for output CSV files and log file.

  • Type: String
  • Default: Current directory
  • Required: No (uses default if not specified)

-EnableDebugLogging​

Enable verbose debug logging for detailed processing information.

  • Type: Switch
  • Default: False
  • Required: No

Examples​

Example 1: Basic Conversion​

Convert-ForcepointWS2EIA `
-ForcepointPoliciesPath "C:\FWS\policies.csv" `
-CategoryMappingsPath "C:\FWS\mappings.csv"

Converts Forcepoint configuration from specified paths using default output directory.

Example 2: Custom Output Path​

Convert-ForcepointWS2EIA `
-ForcepointPoliciesPath ".\policies.csv" `
-CategoryMappingsPath ".\mappings.csv" `
-OutputBasePath "C:\Output"

Converts Forcepoint configuration and saves output to C:\Output.

Example 3: With Debug Logging​

Convert-ForcepointWS2EIA `
-ForcepointPoliciesPath ".\policies.csv" `
-CategoryMappingsPath ".\mappings.csv" `
-EnableDebugLogging

Converts Forcepoint configuration with detailed debug logging enabled.

Input File Format​

Forcepoint Policies CSV Structure​

The input CSV uses a matrix format where:

  • Rows: Represent web categories or FQDNs
  • Columns: Represent security groups and their disposition settings
  • Cells: Contain policy actions (Block, Allow, Continue, Do not block)
Parent Category Name,Child Category Name,DEFAULT Disposition,Finance Group Disposition,Marketing Group Disposition
Abortion,Abortion,Do not block,Block,Do not block
Adult Material,Adult Content,Block,Block,Block
User-Defined,example.com,Block,Allow,Block

Column Structure​

  1. Parent Category Name: Predefined category group name, or "User-Defined" for custom FQDNs
  2. Child Category Name: Specific category name (used for mapping) or the actual FQDN
  3. DEFAULT Disposition: Default policy action for all users
  4. [GroupName] Disposition: Policy action for specific security group

Action Values​

All action values are case-insensitive:

Forcepoint ActionMaps to EIANotes
BlockblockBlocks access
ContinueblockWarning + block (flagged for review)
AllowallowAllows access
Do not blockallowDoes not restrict access

Category Mappings CSV Structure​

ForcepointCategory,GSACategory,MappingNotes
Abortion,Uncategorized,No direct GSA category match
Adult Content,PornographyAndSexuallyExplicit,Direct mapping
Drugs,IllegalDrug,Semantic match
  • ForcepointCategory: Child category name from Forcepoint CSV
  • GSACategory: Target GSA category name (leave blank or "Unmapped" if no match)
  • MappingNotes: Optional notes explaining the mapping rationale

Output Files​

The function generates three output files with timestamp prefix [yyyyMMdd_HHmmss]:

1. Policies CSV ([timestamp]_EIA_Policies.csv)​

Contains all web content filtering policies with rules for blocked/allowed categories and FQDNs.

Key Fields:

  • PolicyName: Sequential name with action suffix (e.g., "Web Content Filtering 1-Block")
  • PolicyAction: "Block" or "Allow" (one action per policy)
  • RuleType: "webCategory" or "FQDN"
  • RuleDestinations: Semicolon-separated categories or single FQDN
  • ReviewNeeded: "Yes" if unmapped categories or Continue action present
  • Provision: "Yes" unless review needed

2. Security Profiles CSV ([timestamp]_EIA_SecurityProfiles.csv)​

Contains security profile definitions linking policies to security groups.

Key Fields:

  • SecurityProfileName: Sequential name (e.g., "Security_Profile_1")
  • Priority: 500, 600, 700... for groups; 60000 for DEFAULT
  • SecurityProfileLinks: Policy references with priorities (Allow policies first, then Block)
  • EntraGroups: Semicolon-separated group names or placeholder for DEFAULT

3. Log File ([timestamp]_Convert-ForcepointWS2EIA.log)​

Detailed processing log with statistics and warnings.

Conversion Process​

Phase 1: Data Loading​

  • Loads Forcepoint policies CSV and category mappings
  • Identifies security group columns (columns ending with "Disposition")
  • Builds category mapping lookup table

Phase 2: Policy Parsing​

  • Processes each security group (including DEFAULT)
  • Collects dispositions for each category/FQDN
  • Maps Forcepoint categories to GSA categories
  • Identifies user-defined FQDNs
  • Flags unmapped categories and Continue actions

Phase 3: Policy Deduplication​

  • Generates hash for each unique policy definition
  • Reuses policies when multiple groups have identical rules
  • Creates separate Block and Allow policies as needed
  • Assigns unique sequential policy numbers

Phase 4: Security Profile Creation​

  • Groups security groups by shared policies
  • Assigns priorities based on CSV column order
  • Links Allow and Block policies (Allow policies first)
  • Handles DEFAULT group with special placeholder

Phase 5: Export and Summary​

  • Exports policies and security profiles to CSV
  • Validates against GSA limits (100 policies, 1000 rules, 8000 FQDNs, 256 profiles)
  • Displays conversion statistics

Key Features​

Policy Deduplication​

Security groups with identical rules share the same policies, reducing the total policy count:

Group1: Block [Abortion, Adult Content], Allow [LinkedIn]
Group2: Block [Abortion, Adult Content], Allow [LinkedIn]
→ Creates ONE Block policy and ONE Allow policy used by both groups

Mixed Policies​

Groups with both blocked and allowed items create TWO separate policies:

Finance Group: Block [Gambling], Allow [LinkedIn, example.com]
→ Creates:
- "Web Content Filtering 1-Block" (Gambling)
- "Web Content Filtering 2-Allow" (LinkedIn, example.com)

Unmapped Categories​

Categories without GSA mappings are flagged for review:

Input: "Custom Category" (not in mapping file)
Output: "Custom Category_Unmapped" with ReviewNeeded=Yes

Continue Action Handling​

Continue actions are converted to Block and flagged:

Input: "Continue" disposition
Output: Action=Block, ReviewNeeded=Yes, ReviewDetails="Continue action converted to Block"

DEFAULT Group​

Special handling for baseline policies:

  • Always receives priority 60000 (lowest priority)
  • EntraGroups set to "Replace_with_All_IA_Users_Group" placeholder
  • Must be replaced with actual Entra group name for all Internet Access users

Review Workflow​

Rules with ReviewNeeded=Yes require manual review before provisioning:

  1. Unmapped Categories: Verify category mappings are correct
  2. Continue Actions: Confirm Block action is appropriate (was originally a warning)
  3. Update Provision Flag: Change to "Yes" after review

Known Limitations​

GSA Service Limits​

  • Maximum 100 policies
  • Maximum 1000 rules
  • Maximum 8000 FQDNs
  • Maximum 256 security profiles

The function validates these limits and displays warnings if exceeded.

Technical Limitations​

  • Column headers must end with " Disposition" suffix
  • User-Defined detection relies on "User-Defined" parent category name
  • No FQDN validation performed
  • Group names must be compatible with Entra (special characters preserved)

Troubleshooting​

Common Issues​

"Invalid CSV structure: minimum 3 columns required"

  • Ensure CSV has Parent Category Name, Child Category Name, and at least one Disposition column

"No security group columns found"

  • Verify column headers end with " Disposition"
  • Check that there is at least a "DEFAULT Disposition" column

"Category mappings CSV is empty"

  • Verify the mapping file path is correct
  • Ensure file has header row and data rows

"Disposition column not found for group"

  • Group name must match column header (without " Disposition" suffix)
  • Column matching is case-insensitive

Debug Mode​

Enable debug logging for detailed processing information:

Convert-ForcepointWS2EIA ... -EnableDebugLogging

Debug output includes:

  • Group processing details
  • Policy definition hashes for deduplication
  • Category mapping lookups
  • Policy and security profile creation

Sample Files​

Sample files are provided in Samples/ForcepointWS2EIA/:

  • sample_forcepoint_policies.rename_to_csv: Example policy matrix
  • Forcepoint-to-GSA-CategoryMapping.rename_to_csv: Category mappings
  • README.md: Detailed explanation of sample data

Rename files to .csv extension before testing.

Next Steps​

After conversion:

  1. Review Output: Check policies and security profiles CSVs
  2. Verify Mappings: Confirm unmapped categories are addressed
  3. Update Placeholders: Replace DEFAULT group placeholder with actual Entra group
  4. Provision to EIA: Use Start-EntraInternetAccessProvisioning to deploy