Cloud Policy Details
Verified with Windows 11 25H2 — updated on July 30, 2026
Supported on: At least Windows 10 Version 1909
Path in the GPO console
Computer Configuration\Administrative Templates\Windows Components\Tenant Restrictions Description
This setting enables and configures the device-based tenant restrictions feature for Azure Active Directory. When you enable this setting, compliant applications will be prevented from accessing disallowed tenants, according to a policy set in your Azure AD tenant. Note: Creation of a policy in your home tenant is required, and additional security measures for managed devices are recommended for best protection. Refer to Azure AD Tenant Restrictions for more details. https://go.microsoft.com/fwlink/?linkid=2148762 Before enabling firewall protection, ensure that an App Control for Business policy that correctly tags applications has been applied to the target devices. Enabling firewall protection without a corresponding App Control for Business policy will prevent all applications from reaching Microsoft endpoints. This firewall setting is not supported on all versions of Windows - see the following link for more information. For details about setting up WDAC with tenant restrictions, see https://go.microsoft.com/fwlink/?linkid=2155230
Registry
SOFTWARE\Policies\Microsoft\Windows\TenantRestrictions\Payload MDM / Intune (CSP)
./Device/Vendor/MSFT/Policy/Config/TenantRestrictions/ConfigureTenantRestrictions Microsoft Learn documentation Mapping data: Microsoft Learn (CC BY 4.0)
Export Builder
BETAConfigure the state, scope and options, then generate .reg, PowerShell, Intune and SCCM outputs — or add the setting to a multi-setting collection.
These exports write the registry — this is not a managed GPO. ⓘ
.reg file
Windows Registry Editor Version 5.00
; Exported from gporais.com
; Policy: Cloud Policy Details
; State: Enabled
; Supported on: At least Windows 10 Version 1909
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\TenantRestrictions\Payload]
"cloudid"=""
"tenantid"=""
"policyid"=""
"enforceFirewall"=dword:00000000
"hostnames"=hex(7):00,00
; REG_MULTI_SZ: one string per input line; edit in regedit if you need richer formatting.
"subdomainSupportedHostnames"=hex(7):00,00
; REG_MULTI_SZ: one string per input line; edit in regedit if you need richer formatting.
"ipRanges"=hex(7):00,00
; REG_MULTI_SZ: one string per input line; edit in regedit if you need richer formatting. More formats (PowerShell, Intune, SCCM)
PowerShell
# Exported from gporais.com
# Policy: Cloud Policy Details
# State: Enabled
# Supported on: At least Windows 10 Version 1909
$path = 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\TenantRestrictions\Payload'
New-Item -Path $path -Force | Out-Null
Set-ItemProperty -Path $path -Name 'cloudid' -Value '' -Type String
Set-ItemProperty -Path $path -Name 'tenantid' -Value '' -Type String
Set-ItemProperty -Path $path -Name 'policyid' -Value '' -Type String
Set-ItemProperty -Path $path -Name 'enforceFirewall' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name 'hostnames' -Value @() -Type MultiString
# REG_MULTI_SZ: one string per input line; edit in regedit if you need richer formatting.
Set-ItemProperty -Path $path -Name 'subdomainSupportedHostnames' -Value @() -Type MultiString
# REG_MULTI_SZ: one string per input line; edit in regedit if you need richer formatting.
Set-ItemProperty -Path $path -Name 'ipRanges' -Value @() -Type MultiString
# REG_MULTI_SZ: one string per input line; edit in regedit if you need richer formatting. Intune XML
OMA-URI: ./Device/Vendor/MSFT/Policy/Config/TenantRestrictions/ConfigureTenantRestrictions
Data type: String
Value:
<enabled/>
<data id="PayloadCloudId" value=""/>
<data id="PayloadTenantId" value=""/>
<data id="PayloadPolicyId" value=""/>
<data id="EnforceFirewall" value="0"/>
<!-- PayloadHostnamesId: enter one value per line before copying this XML payload. -->
<!-- PayloadSubdomainSupportedHostnamesId: enter one value per line before copying this XML payload. -->
<!-- PayloadIpRangesId: enter one value per line before copying this XML payload. --> Intune Remediation
# === Detection script ===
# Exported from gporais.com
# Policy: Cloud Policy Details
# State: Enabled
# Supported on: At least Windows 10 Version 1909
function Test-RegistryValue {
param(
[Parameter(Mandatory = $true)][string]$Path,
[Parameter(Mandatory = $true)][string]$Name,
[object]$Expected,
[ValidateSet('String', 'DWord', 'MultiString')][string]$Kind = 'String',
[switch]$Absent
)
try {
$item = Get-ItemProperty -LiteralPath $Path -Name $Name -ErrorAction Stop
} catch {
return $Absent.IsPresent
}
if ($Absent.IsPresent) { return $false }
$actual = $item.$Name
if ($Kind -eq 'DWord') { return ([int64]$actual) -eq ([int64]$Expected) }
if ($Kind -eq 'MultiString') {
$actualValues = @($actual)
$expectedValues = @($Expected)
if ($actualValues.Count -ne $expectedValues.Count) { return $false }
for ($i = 0; $i -lt $expectedValues.Count; $i++) {
if ([string]$actualValues[$i] -ne [string]$expectedValues[$i]) { return $false }
}
return $true
}
return [string]$actual -eq [string]$Expected
}
$checks = @(
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\TenantRestrictions\Payload' -Name 'cloudid' -Expected '' -Kind String)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\TenantRestrictions\Payload' -Name 'tenantid' -Expected '' -Kind String)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\TenantRestrictions\Payload' -Name 'policyid' -Expected '' -Kind String)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\TenantRestrictions\Payload' -Name 'enforceFirewall' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\TenantRestrictions\Payload' -Name 'hostnames' -Expected @() -Kind MultiString)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\TenantRestrictions\Payload' -Name 'subdomainSupportedHostnames' -Expected @() -Kind MultiString)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\TenantRestrictions\Payload' -Name 'ipRanges' -Expected @() -Kind MultiString)
)
if ($checks -notcontains $false) {
Write-Output 'Compliant'
exit 0
}
Write-Output 'Non-compliant'
exit 1
# === Remediation script ===
# Exported from gporais.com
# Policy: Cloud Policy Details
# State: Enabled
# Supported on: At least Windows 10 Version 1909
$path = 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\TenantRestrictions\Payload'
New-Item -Path $path -Force | Out-Null
Set-ItemProperty -Path $path -Name 'cloudid' -Value '' -Type String
Set-ItemProperty -Path $path -Name 'tenantid' -Value '' -Type String
Set-ItemProperty -Path $path -Name 'policyid' -Value '' -Type String
Set-ItemProperty -Path $path -Name 'enforceFirewall' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name 'hostnames' -Value @() -Type MultiString
# REG_MULTI_SZ: one string per input line; edit in regedit if you need richer formatting.
Set-ItemProperty -Path $path -Name 'subdomainSupportedHostnames' -Value @() -Type MultiString
# REG_MULTI_SZ: one string per input line; edit in regedit if you need richer formatting.
Set-ItemProperty -Path $path -Name 'ipRanges' -Value @() -Type MultiString
# REG_MULTI_SZ: one string per input line; edit in regedit if you need richer formatting. SCCM scripts
# Exported from gporais.com
# Policy: Cloud Policy Details
# State: Enabled
# Supported on: At least Windows 10 Version 1909
# SCCM Configuration Item guidance:
# Create a Configuration Item of type "Setting: Script".
# Discovery script: use the Detection script below.
# Remediation script: use the Remediation script below.
# Compliance rule: the Discovery script output equals 'Compliant'.
# === Detection script ===
# Exported from gporais.com
# Policy: Cloud Policy Details
# State: Enabled
# Supported on: At least Windows 10 Version 1909
function Test-RegistryValue {
param(
[Parameter(Mandatory = $true)][string]$Path,
[Parameter(Mandatory = $true)][string]$Name,
[object]$Expected,
[ValidateSet('String', 'DWord', 'MultiString')][string]$Kind = 'String',
[switch]$Absent
)
try {
$item = Get-ItemProperty -LiteralPath $Path -Name $Name -ErrorAction Stop
} catch {
return $Absent.IsPresent
}
if ($Absent.IsPresent) { return $false }
$actual = $item.$Name
if ($Kind -eq 'DWord') { return ([int64]$actual) -eq ([int64]$Expected) }
if ($Kind -eq 'MultiString') {
$actualValues = @($actual)
$expectedValues = @($Expected)
if ($actualValues.Count -ne $expectedValues.Count) { return $false }
for ($i = 0; $i -lt $expectedValues.Count; $i++) {
if ([string]$actualValues[$i] -ne [string]$expectedValues[$i]) { return $false }
}
return $true
}
return [string]$actual -eq [string]$Expected
}
$checks = @(
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\TenantRestrictions\Payload' -Name 'cloudid' -Expected '' -Kind String)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\TenantRestrictions\Payload' -Name 'tenantid' -Expected '' -Kind String)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\TenantRestrictions\Payload' -Name 'policyid' -Expected '' -Kind String)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\TenantRestrictions\Payload' -Name 'enforceFirewall' -Expected 0 -Kind DWord)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\TenantRestrictions\Payload' -Name 'hostnames' -Expected @() -Kind MultiString)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\TenantRestrictions\Payload' -Name 'subdomainSupportedHostnames' -Expected @() -Kind MultiString)
(Test-RegistryValue -Path 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\TenantRestrictions\Payload' -Name 'ipRanges' -Expected @() -Kind MultiString)
)
if ($checks -notcontains $false) {
Write-Output 'Compliant'
exit 0
}
Write-Output 'Non-compliant'
exit 1
# === Remediation script ===
# Exported from gporais.com
# Policy: Cloud Policy Details
# State: Enabled
# Supported on: At least Windows 10 Version 1909
$path = 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\TenantRestrictions\Payload'
New-Item -Path $path -Force | Out-Null
Set-ItemProperty -Path $path -Name 'cloudid' -Value '' -Type String
Set-ItemProperty -Path $path -Name 'tenantid' -Value '' -Type String
Set-ItemProperty -Path $path -Name 'policyid' -Value '' -Type String
Set-ItemProperty -Path $path -Name 'enforceFirewall' -Value 0 -Type DWord
Set-ItemProperty -Path $path -Name 'hostnames' -Value @() -Type MultiString
# REG_MULTI_SZ: one string per input line; edit in regedit if you need richer formatting.
Set-ItemProperty -Path $path -Name 'subdomainSupportedHostnames' -Value @() -Type MultiString
# REG_MULTI_SZ: one string per input line; edit in regedit if you need richer formatting.
Set-ItemProperty -Path $path -Name 'ipRanges' -Value @() -Type MultiString
# REG_MULTI_SZ: one string per input line; edit in regedit if you need richer formatting. Building a multi-setting collection? Add this setting and generate combined .reg / PowerShell / GPO scripts.