Overview
This guide describes how to set an organization policy that includes the resource locations constraint.
You can limit the physical location of a new resource with the Organization Policy Service resource locations constraint. You can use the location property of a resource to identify where it is deployed and maintained by the service. For data-containing resources of some Google Cloud services, this property also reflects the location where data is stored. This constraint lets you define the allowed Google Cloud locations where the resources for supported services in your hierarchy can be created.
After you define resource locations, this limitation will apply only to newly-created resources. Resources you created before setting the resource locations constraint will continue to exist and perform their function.
A policy that includes this constraint won't be enforced on sub-resource creation for certain services, such as Cloud Storage and Dataproc.
Limitations
The resource locations Organization Policy Service constraint controls the ability to create resources for which a location can be selected. This constraint does not affect where global resources, such as Compute Engine global addresses, or resources that don't support selecting a location are created.
To avoid breaking existing serving infrastructure, you should test any new policy on non-production projects and folders, then apply the policy gradually within your organization.
For data storage commitments, see the Google Cloud Terms of Service and the Service Specific Terms . Organization policies that contain the resource locations constraint aren't data storage commitments.
This constraint applies to a specific subset of products and resource types. For a list of supported services and details on the behavior of each service, see the Resource Locations Supported Services page.
Location types
You can deploy Google Cloud resources in location
types that represent different size categories.
The largest location type is the multi-region
, which includes more than one region
. Each region
is further subdivided into zones
. For more information
about regions and zones, see the Regions and Zones overview
.
-
Multi-regionlocations are backed by physical resources in more than oneregionand are typically only used by storage-based resources. Some examples includeus,asia,europe, andglobal. -
Regionlocations are geographically isolated from each other. Some examples includeus-west1(Oregon),asia-northeast1(Tokyo), andeurope-west1(Belgium). -
Zonelocations are the most granular and isolated location type used for deploying resources. Azoneis an independent failure domain within aregion. Some examples areus-east1-b,us-west1-b, andasia-northeast1-a. Google Cloud also offers specialized AI zones that are tailored for AI and ML workloads—for example,us-central1-ai1a.
When setting up locations, you should use the in:
prefix and a Value Group
. Using a Value Group curated by Google Cloud
lets you choose geographic location(s), without having to specify current or
future Cloud locations.
The in:
prefix to a Value Group specifies that all values that exist within
the value group are considered to be part of the policy. If you enter a group
value or a Google Cloud region without the prefix, the in:
prefix will
be automatically added, per these rules:
- If you enter a location that uses the
in:prefix, and it contains any invalid group, the policy change will fail. - If you enter a location that is a region, such as
us-east1, it will have thein:prefix prepended, toin:us-east1-locationsin this example. - If you enter a region or multi-region value group such as
us-locations, it will have thein:prefix prepended, toin:us-locationsin this example. - If you enter a zone or multi-region such as
us-east1-borus, the values won't be changed.
Setting the organization policy
The resource locations constraint is a type of legacy managed constraint with list rules
.
You can add and remove locations from the allowed_values
or denied_values
lists of a resource locations constraint. To prevent organization policies
from unexpectedly restricting service behavior as new locations are added to the
available list, use a value group
, or a list of allowed_values
that represents the entire geographic boundary you want to
define.
To set an organization policy including a resource locations constraint:
Console
-
In the Google Cloud console, go to the Organization policiespage.
-
From the project picker, select the organization, folder, or project for which you want to set the organization policy.
-
Select the Google Cloud Platform - Resource Location Restrictionconstraint to open its Policy detailspage.
-
Click Manage policy.
-
On the Edit policypage, select Override parent's policy.
-
Under Policy enforcement, select Replace.
-
Click Add rule.
-
Under Policy values, select Custom.
-
Under Policy type, select Allowto create a list of allowed locations, or select Denyto create a list of denied locations.
-
In the Policy valuebox, enter the
inprefix and a value group location string, then press Enter.For example,
in:us-locationsorin:us-west1-locations. You can enter multiple location strings by clicking New policy value.You can also enter specific zone, region, or multi-region locations as location strings. For a list of available locations, see the Resource Locations Supported Services page.
-
To enforce the policy, click Set policy.
gcloud
To create an organization policy that enforces the resource locations constraint, create a policy YAML file that references the constraint:
name
:
organizations/ ORGANIZATION_ID
/policies/gcp.resourceLocations
spec
:
rules
:
-
values
:
deniedValues
:
-
in:us-east1-locations
-
in:northamerica-northeast1-locations
To enforce the organization policy containing the constraint, run the following command:
gcloud
org-policies
set-policy
POLICY_PATH
Replace the following:
-
ORGANIZATION_ID: your organization ID, such as 01234567890. -
POLICY_PATH: the full path to the YAML file containing the organization policy.
A response will be returned with the results of the new organization policy:
name
:
organizations/01234567890/policies/gcp.resourceLocations
spec
:
rules
:
-
values
:
deniedValues
:
-
in:us-east1-locations
-
in:northamerica-northeast1-locations
You can also enter specific zone, region, or multi-region locations as location strings. For a list of available locations, see the Resource Locations Supported Services page.
API
You can use the Resource Manager API to set an organization policy on a resource. You will need an OAuth 2.0 bearer token for authentication and authorization.
To set an organization policy using the resource locations constraint:
curl
-X
POST
-H
"Content-Type: application/json"
-H
"Authorization: \
Bearer
${
bearer_token
}
"
-d
'{policy: {etag: "BwVtXec438Y=", constraint: \
"constraints/gcp.resourceLocations", list_policy: {denied_values: \
["in:europe-locations", "in:southamerica-locations"] }}}'
\
https://cloudresourcemanager.googleapis.com/v1/organizations/123456789:setOrgPolicy
A response will be returned with the results of the new organization policy:
name
:
organizations/01234567890/policies/gcp.resourceLocations
spec
:
rules
:
-
values
:
deniedValues
:
-
in:europe-locations
-
in:southamerica-locations
You can also enter specific zone, region, or multi-region locations as location strings. For a list of available locations, see the Resource Locations Supported Services page.
To learn about using constraints in organization policies, see Using Constraints .
Using inheritance in organization policy
You can refine your organization policy to inherit the organization policy from the resource's parent nodes. Inheritance gives you granular control over the organization policies used throughout your resource hierarchy.
To enable inheritance on a resource node, set inheritFromParent = true
in the
organization policy YAML file. For example:
name
:
organizations/01234567890/policies/gcp.resourceLocations
spec
:
inheritFromParent
:
true
rules
:
-
values
:
deniedValues
:
-
in:us-west1
Allow or deny VM creation in AI zones
You can allow or deny VMs from being created in AI zones by creating and enforcing a custom constraint in a custom organization policy.
An AI zone is identified with the string ai
in its name. For example, us-west4-ai2b
is an AI zone in the us-west4
region, and us-west4-b
is the
parent zone. When creating a custom constraint, use the string -ai
in your
condition. For more information about AI zones, see About AI zones
.
For permissions required to manage organization policies, see Required roles in the Creating and managing custom constraints page.
To set a custom organization policy to allow or deny VMs from being created in AI zones, complete the following steps:
-
Create a custom constraint for AI zones
Depending on whether you want to allow or deny VMs from being created in AI zones, create a YAML file with one of the following constraints.
-
To allow VMs to be created in AI zones only, use the following constraint:
name : organizations/ ORGANIZATION_ID /customConstraints/custom.allowOnlyAiZones resource_types : - compute.googleapis.com/Instance method_types : - CREATE - UPDATE actionType : ALLOW condition : "resource.zone.contains('-ai')" displayName : allowOnlyAiZones description : Allow VMs to be created in AI zones only. -
To deny VMs from being created in AI zones, use the following constraint:
name : organizations/ ORGANIZATION_ID /customConstraints/custom.denyAiZones resource_types : - compute.googleapis.com/Instance method_types : - CREATE - UPDATE actionType : DENY condition : "resource.zone.contains('-ai')" displayName : denyAiZones description : Deny VMs from being created in AI zones.Replace
ORGANIZATION_IDwith your organization ID—for example,01234567890.
-
-
Set the custom constraint
After you've created the YAML file for the custom constraint, you must set the custom constraint to make it available for organization policies.
To set the custom constraint, use the
gcloud org-policies set-custom-constraintcommand:gcloud org-policies set-custom-constraint CONSTRAINT_PATHReplace
CONSTRAINT_PATHwith the full path to your custom constraint YAML file—for example,/home/user/customconstraint.yaml. -
Create an organization policy
To create an organization policy that enforces the custom constraint, create a policy YAML file that references the constraint:
name : projects/ PROJECT_ID /policies/ CONSTRAINT_NAME spec : rules : - enforce : trueReplace the following:
-
PROJECT_ID: the project that you want to enforce your constraint on. -
CONSTRAINT_NAME: the name of your custom constraint—custom.allowOnlyAiZonesorcustom.denyAiZones.
-
-
Enforce the custom organization policy on your project
To enforce the organization policy containing the custom constraint, run the following command:
gcloud org-policies set-policy POLICY_PATHReplace
POLICY_PATHwith the full path to your organization policy YAML file. Changes to organization policies can take up to 15 minutes to be fully enforced.
For more information about custom constraints, see Creating and managing custom constraints . For troubleshooting, see Troubleshooting custom constraints .
Example error message
Services that support the resource location constraint are prevented from creating new resources in locations that would violate the constraint. If a service attempts to create a resource in a location that violates the constraint, the attempt will fail and an error message will be generated.
This error message will have this format: LOCATION_IN_REQUEST
violates constraint
constraints/gcp.resourceLocations on the resource RESOURCE_TESTED
.
In the following example, a Compute Engine resource fails to create a new instance due to policy enforcement:
Location ZONE:us-east1-b violates constraint constraints/gcp.resourceLocations
on the resource
projects/policy-violation-test/zones/us-east1-b/instances/instance-3.
Google Cloud Observability and Cloud Audit Logs log entry:
{
i
nsert
Id
:
"5u759gdngec"
logName
:
"projects/policy-violation-test/logs/cloudaudit.googleapis.com%2Factivity"
pro
t
oPayload
:
{
@
t
ype
:
"type.googleapis.com/google.cloud.audit.AuditLog"
au
t
he
nt
ica
t
io
n
I
nf
o
:
{
…
}
au
t
horiza
t
io
n
I
nf
o
:
[
6
]
me
t
hodName
:
"beta.compute.instances.insert"
reques
t
:
{
…
}
reques
t
Me
ta
da
ta
:
{
…
}
resourceLoca
t
io
n
:
{
…
}
resourceName
:
"projects/policy-violation-test/zones/us-east1-b/instances/instance-3"
respo
nse
:
{
@
t
ype
:
"type.googleapis.com/error"
error
:
{
code
:
412
errors
:
[
0
:
{
domai
n
:
"global"
loca
t
io
n
:
"If-Match"
loca
t
io
n
Type
:
"header"
message
:
"Location ZONE:us-east1-b violates constraint constraints/gcp.resourceLocations on the resource projects/policy-violation-test/zones/us-east1-b/instances/instance-3."
reaso
n
:
"conditionNotMet"
}
]
message
:
"Location ZONE:us-east1-b violates constraint constraints/gcp.resourceLocations on the resource projects/policy-violation-test/zones/us-east1-b/instances/instance-3."
}
}
serviceName
:
"compute.googleapis.com"
s
tatus
:
{
code
:
3
message
:
"INVALID_ARGUMENT"
}
}
receiveTimes
ta
mp
:
"2019-06-14T03:04:23.660988360Z"
resource
:
{
labels
:
{
…
}
t
ype
:
"gce_instance"
}
severi
t
y
:
"ERROR"
t
imes
ta
mp
:
"2019-06-14T03:04:22.783Z"
}
Vulnerability findings and remediation
The resource location constraint restricts the creation of resources at runtime. This feature helps to prevent location violations from occurring, but does not identify or remediate existing violations. You can use Security Health Analytics, a built-in service of Security Command Center, to discover location violations in your resource hierarchy. For more information, see Organization Policy vulnerability findings .
If there are Security Health Analytics findings of location violations, see Remediating Security Health Analytics findings for steps to remediate those findings.
Value groups
Value groups are collections of groups and locations that are curated by Google to provide a simple way to define your resource locations. Value groups include many related locations and are expanded over time by Google without needing to change your organization policy to accommodate the new locations.
To use value groups in your organization policy, prefix your entries with the
string in:
. For more information on using value prefixes, see Using Constraints
.
Group names are validated on the call to set the organization policy. Using an
invalid group name will cause the policy setting to fail.
The following table contains the current list of available groups:
in:africa-south1-locations
-
africa-south1 -
africa-south1-a -
africa-south1-b -
africa-south1-c
in:asia-locations
-
asia-east2-locations -
id-locations -
il-locations -
in-locations -
jp-locations -
kr-locations -
me-central1-locations -
sa-locations -
sg-locations -
tw-locations
Values:
-
asia -
asia1 -
aws-ap-northeast-2
in:asia-east2-locations
-
asia-east2 -
asia-east2-a -
asia-east2-b -
asia-east2-c
in:id-locations
-
asia-southeast2-locations
Values:
-
id
in:asia-southeast2-locations
-
asia-southeast2 -
asia-southeast2-a -
asia-southeast2-b -
asia-southeast2-c
in:il-locations
-
me-west1-locations
Values:
-
il
in:me-west1-locations
-
me-west1 -
me-west1-a -
me-west1-b -
me-west1-c
in:in-locations
-
asia-south1-locations -
asia-south2-locations
Values:
-
in
in:asia-south1-locations
-
asia-south1 -
asia-south1-a -
asia-south1-b -
asia-south1-c
in:asia-south2-locations
-
asia-south2 -
asia-south2-a -
asia-south2-b -
asia-south2-c
in:jp-locations
-
asia-northeast1-locations -
asia-northeast2-locations
Values:
-
jp
in:asia-northeast1-locations
-
asia-northeast1 -
asia-northeast1-a -
asia-northeast1-b -
asia-northeast1-c
in:asia-northeast2-locations
-
asia-northeast2 -
asia-northeast2-a -
asia-northeast2-b -
asia-northeast2-c
in:kr-locations
-
asia-northeast3-locations
Values:
-
kr
in:asia-northeast3-locations
-
asia-northeast3 -
asia-northeast3-a -
asia-northeast3-b -
asia-northeast3-c
in:me-central1-locations
-
me-central1 -
me-central1-a -
me-central1-b -
me-central1-c
in:sa-locations
-
me-central2-locations
Values:
-
sa
in:me-central2-locations
-
me-central2 -
me-central2-a -
me-central2-b -
me-central2-c
in:sg-locations
-
asia-southeast1-locations
Values:
-
sg
in:asia-southeast1-locations
-
asia-southeast1 -
asia-southeast1-a -
asia-southeast1-b -
asia-southeast1-c
in:tw-locations
-
asia-east1-locations
Values:
-
tw
in:asia-east1-locations
-
asia-east1 -
asia-east1-a -
asia-east1-b -
asia-east1-c
in:australia-locations
-
australia-southeast1-locations -
australia-southeast2-locations
Values:
-
au
in:australia-southeast1-locations
-
australia-southeast1 -
australia-southeast1-a -
australia-southeast1-b -
australia-southeast1-c
in:australia-southeast2-locations
-
australia-southeast2 -
australia-southeast2-a -
australia-southeast2-b -
australia-southeast2-c
in:aws-locations
-
aws-ap-northeast-2 -
aws-ap-southeast-2 -
aws-eu-central-1 -
aws-us-east-1
in:azure-locations
-
azure-eastus2 -
azure-westus2
in:eu-locations
-
de-locations -
europe-central2-locations -
europe-north1-locations -
europe-north2-locations -
europe-southwest1-locations -
europe-west1-locations -
europe-west4-locations -
europe-west9-locations -
it-locations
Values:
-
EU -
eu -
eur3 -
eur4 -
eur8 -
europe-west
in:de-locations
-
europe-west10-locations -
europe-west3-locations
Values:
-
de
in:europe-west10-locations
-
europe-west10 -
europe-west10-a -
europe-west10-b -
europe-west10-c
in:europe-west3-locations
-
europe-west3 -
europe-west3-a -
europe-west3-b -
europe-west3-c
in:europe-central2-locations
-
europe-central2 -
europe-central2-a -
europe-central2-b -
europe-central2-c
in:europe-north1-locations
-
europe-north1 -
europe-north1-a -
europe-north1-b -
europe-north1-c
in:europe-north2-locations
-
europe-north2 -
europe-north2-a -
europe-north2-b -
europe-north2-c
in:europe-southwest1-locations
-
europe-southwest1 -
europe-southwest1-a -
europe-southwest1-b -
europe-southwest1-c
in:europe-west1-locations
-
europe-west1 -
europe-west1-b -
europe-west1-c -
europe-west1-d
in:europe-west4-locations
-
europe-west4 -
europe-west4-a -
europe-west4-b -
europe-west4-c
in:europe-west9-locations
-
europe-west9 -
europe-west9-a -
europe-west9-b -
europe-west9-c
in:it-locations
-
europe-west12-locations -
europe-west8-locations
Values:
-
it
in:europe-west12-locations
-
europe-west12 -
europe-west12-a -
europe-west12-b -
europe-west12-c
in:europe-west8-locations
-
europe-west8 -
europe-west8-a -
europe-west8-b -
europe-west8-c
in:europe-locations
-
ch-locations -
de-locations -
europe-central2-locations -
europe-north1-locations -
europe-north2-locations -
europe-southwest1-locations -
europe-west1-locations -
europe-west4-locations -
europe-west9-locations -
gb-locations -
it-locations
Values:
-
EU -
eu -
eur3 -
eur4 -
eur5 -
eur7 -
eur8 -
europe -
europe-west
in:ch-locations
-
europe-west6-locations
Values:
-
ch
in:europe-west6-locations
-
europe-west6 -
europe-west6-a -
europe-west6-b -
europe-west6-c
in:gb-locations
-
europe-west2-locations
Values:
-
gb
in:europe-west2-locations
-
europe-west2 -
europe-west2-a -
europe-west2-b -
europe-west2-c
in:low-carbon-locations
-
canada-low-carbon-locations -
eu-low-carbon-locations -
europe-low-carbon-locations -
northamerica-low-carbon-locations -
southamerica-low-carbon-locations -
us-low-carbon-locations
in:canada-low-carbon-locations
-
northamerica-northeast1-locations -
northamerica-northeast2-locations
in:northamerica-northeast1-locations
-
northamerica-northeast1 -
northamerica-northeast1-a -
northamerica-northeast1-b -
northamerica-northeast1-c
in:northamerica-northeast2-locations
-
northamerica-northeast2 -
northamerica-northeast2-a -
northamerica-northeast2-b -
northamerica-northeast2-c
in:eu-low-carbon-locations
-
europe-north1-locations -
europe-southwest1-locations -
europe-west1-locations -
europe-west9-locations
in:europe-low-carbon-locations
-
europe-north1-locations -
europe-southwest1-locations -
europe-west1-locations -
europe-west6-locations -
europe-west9-locations
in:northamerica-low-carbon-locations
-
northamerica-northeast1-locations -
northamerica-northeast2-locations -
us-central1-locations -
us-west1-locations
in:us-central1-locations
-
us-central1 -
us-central1-a -
us-central1-b -
us-central1-c -
us-central1-f
in:us-west1-locations
-
us-west1 -
us-west1-a -
us-west1-b -
us-west1-c
in:southamerica-low-carbon-locations
-
southamerica-east1-locations
in:southamerica-east1-locations
-
southamerica-east1 -
southamerica-east1-a -
southamerica-east1-b -
southamerica-east1-c
in:us-low-carbon-locations
-
us-central1-locations -
us-west1-locations
in:northamerica-locations
-
canada-locations -
northamerica-south1-locations -
us-locations
Values:
-
nam14
in:canada-locations
-
northamerica-northeast1-locations -
northamerica-northeast2-locations
Values:
-
ca
in:northamerica-south1-locations
-
northamerica-south1 -
northamerica-south1-a -
northamerica-south1-b -
northamerica-south1-c
in:us-locations
-
us-central1-locations -
us-central2-locations -
us-east1-locations -
us-east4-locations -
us-east5-locations -
us-south1-locations -
us-west1-locations -
us-west2-locations -
us-west3-locations -
us-west4-locations
Values:
-
US -
aws-us-east-1 -
azure-eastus2 -
nam10 -
nam11 -
nam12 -
nam13 -
nam15 -
nam3 -
nam4 -
nam5 -
nam6 -
nam7 -
nam8 -
nam9 -
us -
us-central
in:us-central2-locations
-
us-central2 -
us-central2-a -
us-central2-b -
us-central2-c -
us-central2-d
in:us-east1-locations
-
us-east1 -
us-east1-a -
us-east1-b -
us-east1-c -
us-east1-d
in:us-east4-locations
-
us-east4 -
us-east4-a -
us-east4-b -
us-east4-c
in:us-east5-locations
-
us-east5 -
us-east5-a -
us-east5-b -
us-east5-c
in:us-south1-locations
-
us-south1 -
us-south1-a -
us-south1-b -
us-south1-c
in:us-west2-locations
-
us-west2 -
us-west2-a -
us-west2-b -
us-west2-c
in:us-west3-locations
-
us-west3 -
us-west3-a -
us-west3-b -
us-west3-c
in:us-west4-locations
-
us-west4 -
us-west4-a -
us-west4-b -
us-west4-c
in:southamerica-locations
-
br-locations -
cl-locations
in:br-locations
-
southamerica-east1-locations
Values:
-
br
in:cl-locations
-
southamerica-west1-locations
Values:
-
cl
in:southamerica-west1-locations
-
southamerica-west1 -
southamerica-west1-a -
southamerica-west1-b -
southamerica-west1-c
in:th-locations
-
asia-southeast3-locations
Values:
-
th
in:asia-southeast3-locations
-
asia-southeast3 -
asia-southeast3-a -
asia-southeast3-b -
asia-southeast3-c
Authentication
Organization Policy Service uses OAuth 2.0 for API authentication and authorization. To get an OAuth 2.0 bearer token:
-
Go to the OAuth 2.0 Playground page .
-
In the Step 1list of scopes, select the Cloud Resource Manager API v2> https://www.googleapis.com/auth/cloud-platform, and then click Authorize APIs.
-
On the Sign in with Googlepage that appears, select your account and sign in.
-
To provide access to Google OAuth 2.0 Playground, click Allowon the prompt that appears.
-
In Step 2, click Exchange authorization code for tokens.
-
At the bottom of the Request / Responsepane on the right, your access token string is displayed:
{ "access_token" : " ACCESS_TOKEN " , "token_type" : "Bearer" , "expires_in" : 3600 }Where ACCESS_TOKEN is the OAuth 2.0 bearer token string that you can use for API authorization.

