In order to ensure the correct functioning of the Azure Virtual Desktop or Windows 365 machine when deploying the Netskope Agent on it we have to take care of some Steering Exceptions:
-
MANDATORY: Destination Location Steering Exceptions for Azure Virtual Desktop RDGateways IPs (Remote Desktop Gateways service tags related IPs)
-
OPTIONAL: Destination Location Steering Exceptions for Azure Virtual Desktop Monitoring IPs (Azure Monitor service tags related IPs)
-
OPTIONAL: Application/Process (Certificate Pinned Application) Steering Exceptions for Azure Virtual Desktop agents running on the Virtual Desktop
Destination Location Steering Exceptions
Microsoft provides a Json file with all the Azure destinations at the address: https://www.microsoft.com/en-us/download/details.aspx?id=56519
Unfortunately though this list contains all the destinations used by the Azure infrastructure, divided by βService Tagsβ (services). As we definitely donβt want to exclude all the Azure destination from the steering we must only take the destinations involved with the Virtual Desktop infrastructure.
The Service Tags we must consider for the steering exclusions are the following:
-
The IP addresses of the Virtual Desktop Gateways that can be found under the βWindowsVirtualDesktopβ Service Tag.
-
To the above we must additionally add the traffic destined to the IPs 169.254.169.254/32 and 168.63.129.16/32 (these 2 addresses are common for AVD and Windows 365 deployments)
-
The IP addresses of the monitoring traffic that can be found under the βAzureMonitorβ Service Tag.
All the above Service Tags (and IPs) are mentioned on the article: https://docs.microsoft.com/en-us/azure/virtual-desktop/safe-url-list
Manually extracting the IPs from the Microsoft Service Tag document can be challenging, hence weβve developed a Python script that will help in creating from the Microsoft Json file a simple CSV file that can be used to create the appropriate exceptions. Please find the python script attached to this blog.
To use the Python script:
-
Download the latest Json file from the Microsoft Website at the address: Azure IP Ranges and Service Tags β Public Cloud
-
Place the Json file and the Python script under the same folder, and rename the Json file as βAzureIPs.jsonβ
-
Run the Python script from a privileged command prompt (tested both on MAC and Windows machines)
-
Verify the content of the file βAzureWVD.csvβ that should have been created on the same folder. It be a 2-lines file where the first line starts with "AzureWVD" and the second with "AzureMonitor"
Once we have the CSV, in order to create the desired steering exceptions with it do the following:
-
On the Netskope UI select βPoliciesβ - βNetwork Locationsβ
-
Select βNew Network Locationβ - βMultiple Objectsβ
-
Upload the file βAzureWVD.csvβ
-
Verify the newly created βAzureWVDβ and βAzureMonitorβ network location to see if they contain the imported IPs
-
Apply the changes clicking on βApply changesβ
-
Open the Netskope Setting UI and navigate to βSecurity Cloud Platformβ - βSteering Configurationβ, select the Steering Configuration (by default the βDefault tenant configβ) and select the βEXCEPTIONSβ tab
-
Select βNew Exceptionβ - βDestination Locationβ
-
Select the βAzureWVDβ destination location.
-
OPTIONALLY, if you want to exclude from steering the Virtual Desktop Agent traffic for monitoring purposes select the βAzureMonitorβ destination location too. By default we donβt recommend to exclude this traffic to avoid excluding too many destinations that may be used or repurposed in the future for more activities that we would like to monitor.
-
Select βTreat like local IP addressβ and provide a description like βMicrosoft Azure VDIβ
-
Click βSaveβ
OPTIONAL - Application Steering Exceptions
Azure Virtual Desktops are installed with an Azure agent that runs several services performing many connections to different Azure services for different purposes. Excluding these agents from the traffic steering will ensure that the Azure communications performed by the agent wonβt flow through Netskope. That said excluding the Azure agents traffic may lead to some loss of visibility as there can be some activities performed by the Azure agents weβd like to monitor. Itβs not fully clear to us what potential activities the agents could perform, so we donβt recommend to exclude them from the steering, and we recommend to include the following exceptions only if the customer wants to send to Netskope the bare minimum of Azure traffic.
This optional second step is to configure a series of exclusions for specific Azure Virtual Desktop processes that run on the machine. Despite those are not properly Certificate Pinned Applications, as their traffic can technically be inspected, we can treat them as such to allow a bypass based on the service rather than sources/destinations.
The list of processes that we want optionally to exclude from steering is the following:
WindowsAzureGuestAgent.exe: Azure VM Agent serviceWaAppAgent.exe: Azure RD Agent serviceWindowsAzureNetAgent.exe: Azure Network Agent serviceWindowsAzureTelemetryService.exe: Azure Telemetry Servicemetricsextension.native.exe: Azure Monitor Agentrdagentbootloader.exe: Azure Agent Bootloader
In order to create the Steering Exceptions
- On the Netskope Settings UI navigate to βSecurity Cloud Platformβ - βSteering Configurationβ, select the Steering Configuration (by default the βDefault tenant configβ) and select the βEXCEPTIONSβ tab
- Click on βNew Exceptionβ and select βCertificate Pinned Applicationβ
- Click on the field βCertificate Pinned App = Noneβ and select the β+β button to add the Application
- On the βNew Certificate Pinned Applicationβ window select βWindowsβ as βPLATFORMβ and starting from the first application from the list above fill the βDEFINITIONβ field with the service name and the βAPPLICATION NAMEβ field on top with the description and click βSaveβ
- At this point select the newly created application on the βCertificate Pinned Appβ field and write β*β (star) as βCustom Apps Domainsβ to include all the traffic that the application would generate, then optionally provide a description like βMicrosoft Azure VDIβ, and lastly click βSaveβ
- Repeat the steps above for all the 6 processes listed above
Maintenance of the Network Destination lists
Microsoft will change/update the list of destinations in their Service Tags file and publish a new version of it. This update is quite frequent, in the other of weeks.Please also note that this procedure effectively removes the current steering bypass and a new one must be created !
In order to update the βAzureWVDβ and βAzureMonitorβ Network Destination lists do the following:
-
Download the latest Json file from the Microsoft Website at the address:Azure IP Ranges and Service Tags β Public Cloud
-
Place the Json file and the Python script under the same folder, and rename the Json file as βAzureIPs.jsonβ
-
Run the Python script from a privileged command prompt (tested both on MAC and Windows machines)
- Verify the content of the file βAzureWVD.csvβ that should have been created on the same folder. It be a 2-lines file where the first line starts with "AzureWVD" and the second with "AzureMonitor"
Once we have the CSV, in order to create the desired steering exceptions with it do the following:
-
In the Netskope UI select βPoliciesβ - βNetwork Locationsβ
-
Select βNew Network Locationβ - βMultiple Objectsβ
-
Upload the file βAzureWVD.csvβ. Youβll notice that the UI seems to indicate there are duplicated entries for βAzureVWDβ and βAzureMonitorβ. This is ok, the new ones will actually overwrite the old ones upon Applying the config !
-
Verify the newly created βAzureWVDβ and βAzureMonitorβ network location to see if they contain the newly imported IPs
-
Apply the changes clicking on βApply changesβ. You will notice that the duplicated entries will disappear as the new lists will overwrite the old ones
-
We must re-create the Steering Exceptions as the previous ones would be deleted upon the destination Location overwrite !
-
Open the Netskope Setting UI and navigate to βSecurity Cloud Platformβ - βSteering Configurationβ, select the Steering Configuration (by default the βDefault tenant configβ) and select the βEXCEPTIONSβ tab
-
Select βNew Exceptionβ - βDestination Locationβ
-
Select the βAzureWVDβ destination location.
-
OPTIONALLY, if you want to exclude from steering the Virtual Desktop Agent traffic for monitoring purposes select the βAzureMonitorβ destination location too. By default we donβt recommend to exclude this traffic to avoid excluding too many destinations that may be used or repurposed in the future for more activities that we would like to monitor.
-
Select βTreat like local IP addressβ and provide a description like βMicrosoft Azure VDIβ
-
Click βSaveβ

