Referring to Microsoft how to guides at:
TRv1:
TRv2:
In the above articles from Microsoft is a summary of headers to add to proxy devices to control Office 365 access using tenant restrictions. This article describes how to implement those headers on Edge Secure Web Gateway (formerly ProxySG) and Advanced Secure Gateway (ASG).
Note: Tenant control only works with the Protected Resources. A publicly shared resource can not be controlled using tenant restrictions.
Follow the steps below to modify request headers to restrict the tenant used for Office 365 access:
Microsoft has also provided further clarity regarding the following:
- For the header Restrict-Access-Context you cannot configure the tenant ID for multiple domains by design, this header is for reporting purposes and for stating which is the tenant that has enabled the policy.
- The tenant ID inserted here will be the tenant where you will be able to check the reports: “A second header, called Restrict-Access-Context, is used to enable reporting capabilities and help Microsoft support troubleshoot issues. Restrict-Access-Context needs to include the tenant which is configuring the policy. For example, the following header would indicate that Contoso configured the policy, and reporting would be enabled in the Contoso tenant: Restrict-Access-Context: contoso.onmicrosoft.com”
Optionally, if CPL is preferred over using the VPM the following CPL can be installed in a local policy file or CPL layer within the VPM that will accomplish the same goal:
; ------- Beginning of O365 Tenant Restriction CPL - TRv1 -----------
; References:
; https://docs.microsoft.com/en-us/azure/active-directory/active-directory-tenant-restrictions
; https://support.symantec.com/en_US/article.TECH247092.html
<Proxy>
condition=TenantRestrictionDestinations action.Restrict-Access-Context-Set-Header(yes) action.Restrict-Access-To-Tenants-Set-Header(yes)
define condition TenantRestrictionDestinations
url.domain="login.microsoft.com"
url.domain="login.microsoftonline.com"
url.domain="login.windows.net"
end condition TenantRestrictionDestinations
; Change directory ID below:
define action Restrict-Access-Context-Set-Header
set(request.x_header.Restrict-Access-Context, "456ff232-35l2-5h23-b3b3-3236w0826f3d")
end action Restrict-Access-Context-Set-Header
; Change tenant list below:
define action Restrict-Access-To-Tenants-Set-Header
set(request.x_header.Restrict-Access-To-Tenants, "contoso.onmicrosoft.com")
end action Restrict-Access-To-Tenants-Set-Header
; ------- End of O365 Tenant Restriction CPL -----------
Note: Below is an optional method which provides an 'AND', 'OR' policy in CPL. Please review this policy as this may be more suitable to your needs.; ------- Beginning of O365 Tenant Restriction CPL -----------; References:
; https://docs.microsoft.com/en-us/azure/active-directory/active-directory-tenant-restrictions
; https://support.symantec.com/en_US/article.TECH247092.html
<Proxy>condition=TenantRestrictionDestinations action.Restrict-Access-Context-Set-Header(yes) action.Restrict-Access-To-Tenants-Set-Header(yes)
define condition TenantRestrictionDestinations
url.domain="login.microsoft.com"
url.domain="login.microsoftonline.com"
url.domain="login.windows.net"
end condition TenantRestrictionDestinations; Set the Restrict-Access-Context to the tenantID
; of the administrator setting the restrictions
define action Restrict-Access-Context-Set-Header
set(request.x_header.Restrict-Access-Context, "58201163-08a8-4385-aac7-2fcb6ec95c20")
end action Restrict-Access-Context-Set-Header; Set the Restrict-Access-To-Tenants header
; ------- End of O365 Tenant Restriction CPL -----------
; to a comma separated list of tenants
define action Restrict-Access-To-Tenants-Set-Header
set(request.x_header.Restrict-Access-To-Tenants, "getnetcombr.onmicrosoft.com, getnetbr.onmicrosoft.com")
end action Restrict-Access-To-Tenants-Set-Header
Client HTTPS requests to hosts login.microsoftonline.com, login.microsoft.com, and login.windows.net will have the headers added to them if SSL interception is enabled on the proxy.
For Proxy to have visibility to the headers, SSL interception for O365 URLs is required.
Please note the Tenant ID is not strictly speaking needed for this policy to work, it is added here for completeness.
Tenant restrictions can also be used to block access to personal consumer applications, such as a personal OneDrive account.
To enforce this, the header sec-Restrict-Tenant-Access-Policy must be set with the value restrict-msa for requests to login.live.com
As the destination criteria and action differ from the policy used above for organizational tenants, this policy should be implemented in a separate rule.
Add the following CPL layer and definitions to your policy.
; ------- Beginning of Microsoft Consumer Apps Restriction CPL -----------
<Proxy>
url.domain=//login.live.com/ action.sec-Restrict-Tenant-Access-Policy(yes)
define action sec-Restrict-Tenant-Access-Policy
set( request.x_header.sec-Restrict-Tenant-Access-Policy, "restrict-msa" )
end
; ------- End of Microsoft Consumer Apps Restriction CPL -----------
************************************* ************************************* *************************************
The main changes to carry out in the SWG policies when moving from TRv1 to TRv2 are::
; ------- Beginning of O365 Tenant Restriction CPL - TRv2 -----------
; References:
; https://learn.microsoft.com/en-us/entra/external-id/tenant-restrictions-v2
define condition TenantRestrictionDestinations
url.domain="login.live.com"
url.domain="login.microsoft.com"
url.domain="login.microsoftonline.com"
url.domain="login.windows.net"
end condition TenantRestrictionDestinations
; Set the tenant that set the tenant restrictions policy
define action RestrictAccessContextSetHeader
set(request.x_header.Restrict-Access-Context, "456ff232-35l2-5h23-b3b3-3236w0826f3d")
end action RestrictAccessContextSetHeader
; define Tenant-Access-Policy header
define action TenantAccessPolicySetHeader
set(request.x_header.sec-Restrict-Tenant-Access-Policy, "12345678-1234-1234-1234-12345678912345:123456zy-1a2c-3d55-66aa-123fdfdfd")
end action TenantAccessPolicySetHeader
; inject Tenant-Access-Policy header
<Proxy>
condition=TenantRestrictionDestinations action.RestrictAccessContextSetHeader(yes) action.TenantAccessPolicySetHeader(yes)
; ------- End of O365 Tenant Restriction CPL - TRv2 -----------
Blocking Consumer account or Microsoft Account tenant: