概览
本指南介绍如何设置包含资源位置限制条件的组织政策。
您可以使用组织政策服务资源的位置限制条件来限制新资源的物理位置,还可以使用资源的位置属性来标识服务部署和维护该资源的位置。对于某些 Google Cloud 服务的包含数据的资源,此属性还反映了数据的存储位置。通过此限制条件,您可以定义允许为层次结构中受支持的服务创建资源的 Google Cloud 位置。
定义资源位置后,此限制将仅应用于新创建的资源。您在设置资源位置限制条件之前创建的资源将继续存在并执行其功能。
对于 Cloud Storage 和 Dataproc 等某些服务,系统不会在创建子资源时强制执行包含此限制条件的政策。
限制
组织政策服务的资源位置限制条件旨在控制创建可选择位置的资源的能力。此限制不会影响创建全局资源(例如 Compute Engine 全局地址)或不支持选择位置的资源的位置。
为了避免破坏现有的服务基础架构,您应该先在非生产项目和文件夹中测试任何新政策,然后再将该政策逐步应用于整个组织。
如需了解数据存储承诺,请参阅 Google Cloud 服务条款和服务专用条款。包含资源位置限制条件的组织政策不是数据存储承诺。
此限制条件适用于一部分特定的产品和资源类型。如需获取支持的服务列表以及每项服务的行为详细信息,请参阅支持资源位置的服务页面。
位置类型
您可以在代表不同大小类别的位置类型中部署 Google Cloud 资源。最大的位置类型是 multi-region
,其中包括多个 region
。每个 region
可进一步划分为多个 zones
。如需详细了解区域和地区,请参阅区域和地区概览。
Multi-region
位置以多个region
中的物理资源为支持,通常仅由存储资源使用。一些示例包括us
、asia
、europe
和global
。Region
位置在地理上彼此隔离。一些示例包括us-west1
(俄勒冈)、asia-northeast1
(东京)和europe-west1
(比利时)。Zone
位置是用于部署资源的最精细独立位置类型。zone
是region
内的独立故障网域。一些示例包括us-east1-b
、us-west1-b
和asia-northeast1-a
。
设置位置时,应使用 in:
前缀和值组。使用 Google Cloud 精心挑选的值组,您可以选择地理位置,而无需指定当前或未来的 Cloud 位置。
值组的前缀 in:
指定该值组内存在的所有值均被视为政策的一部分。如果您输入组值或不带前缀的 Google Cloud 区域,则系统会按照以下规则自动添加 in:
前缀:
- 如果输入的是使用前缀
in:
的位置,并且该位置包含任何无效的组,则政策更改将失败。 - 如果输入的位置是一个区域(例如
us-east1
),则该位置的前缀为in:
,在此示例中为in:us-east1-locations
。 - 如果输入单区域或多区域值组(例如
us-locations
),则该值组将带有in:
前缀,在此示例中为in:us-locations
。 - 如果输入单地区或多区域,例如
us-east1-b
或us
,则这些值将不会更改。
设置组织政策
资源位置限制条件是一种列表限制条件。
您可以通过资源位置限制条件的 allowed_values
或 denied_values
列表添加和移除位置。将新位置添加到可用列表时,为防止组织政策意外限制服务行为,请使用值组,或表示要定义的整个地理边界的 allowed_values
列表。
如需设置包含资源位置限制条件的组织政策,请执行以下操作:
控制台
在 Google Cloud 控制台中,转到组织政策页面。
在项目选择器中,选择要为其设置组织政策的组织、文件夹或项目。
选择 Google Cloud Platform - 资源位置限制限制条件,以打开其政策详细信息页面。
点击管理政策。
在修改政策页面,选择覆盖父资源的政策。
在强制执行政策下,选择替换。
点击添加规则。
在政策值下方,选择自定义。
在政策类型下,选择允许以创建允许位置的列表,或者选择拒绝以创建拒绝位置列表。
在政策值框中,输入
in
前缀和值组位置字符串,然后按 Enter 键。例如
in:us-locations
或in:us-west1-locations
。 您可以通过点击新建政策值输入多个位置字符串。您还可以位置字符串形式输入特定地区、区域或多区域位置。如需查看可用位置的列表,请参阅支持资源位置的服务页面。
如需强制执行政策,请点击设置政策。
gcloud
如需创建强制执行资源位置限制条件的组织政策,请创建引用该限制条件的 YAML 政策文件:
name: organizations/ORGANIZATION_ID/policies/gcp.resourceLocations
spec:
rules:
- values:
deniedValues:
- in:us-east1-locations
- in:northamerica-northeast1-locations
如需强制执行包含限制条件的组织政策,请运行以下命令:
gcloud org-policies set-policy POLICY_PATH
替换以下内容:
ORGANIZATION_ID
:您的组织 ID,例如 01234567890。POLICY_PATH
:包含组织政策的 YAML 文件的完整路径。
系统返回的响应将包含新组织政策的结果:
name: organizations/01234567890/policies/gcp.resourceLocations
spec:
rules:
- values:
allowedValues:
- in:us-east1-locations
- in:northamerica-northeast1-locations
您还可以位置字符串形式输入特定地区、区域或多区域位置。如需查看可用位置的列表,请参阅支持资源位置的服务页面。
API
您可以使用 Resource Manager API 在资源上设置组织政策。您将需要使用 OAuth 2.0 不记名令牌进行身份验证和授权。
使用资源位置限制条件设置组织政策的方法如下:
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
系统返回的响应将包含新组织政策的结果:
name: organizations/01234567890/policies/gcp.resourceLocations
spec:
rules:
- values:
deniedValues:
- in:europe-locations
- in:southamerica-locations
您还可以位置字符串形式输入特定地区、区域或多区域位置。如需查看可用位置的列表,请参阅支持资源位置的服务页面。
如需了解如何在组织政策中使用限制条件,请参阅使用限制条件。
在组织政策中使用继承机制
您可以优化组织政策,以便从资源的父节点继承组织政策。 通过继承机制,您可以精确控制整个资源层次结构中使用的组织政策。
如需在资源节点上启用继承功能,请在组织政策 YAML 文件中设置 inheritFromParent = true
。例如:
name: organizations/01234567890/policies/gcp.resourceLocations
spec:
inheritFromParent: true
rules:
- values:
deniedValues:
- in:us-west1
错误消息示例
支持资源位置限制条件的服务无法在违反该限制条件的位置创建新资源。如果某服务尝试在违反相应限制条件的位置创建资源,则尝试操作将失败并产生错误消息。
此错误讯息的格式为 LOCATION_IN_REQUEST violates constraint
constraints/gcp.resourceLocations on the resource RESOURCE_TESTED.
在以下示例中,Compute Engine 资源由于违反政策而无法创建新的实例:
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 和 Cloud Audit Logs 日志条目:
{
insertId: "5u759gdngec"
logName: "projects/policy-violation-test/logs/cloudaudit.googleapis.com%2Factivity"
protoPayload: {
@type: "type.googleapis.com/google.cloud.audit.AuditLog"
authenticationInfo: {…}
authorizationInfo: [6]
methodName: "beta.compute.instances.insert"
request: {…}
requestMetadata: {…}
resourceLocation: {…}
resourceName: "projects/policy-violation-test/zones/us-east1-b/instances/instance-3"
response: {
@type: "type.googleapis.com/error"
error: {
code: 412
errors: [
0: {
domain: "global"
location: "If-Match"
locationType: "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."
reason: "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"
status: {
code: 3
message: "INVALID_ARGUMENT"
}
}
receiveTimestamp: "2019-06-14T03:04:23.660988360Z"
resource: {
labels: {…}
type: "gce_instance"
}
severity: "ERROR"
timestamp: "2019-06-14T03:04:22.783Z"
}
漏洞发现结果和补救
资源位置限制条件会在运行时限制资源的创建。此功能有助于防止发生位置违规,但不会识别或补救现有违规。您可以使用 Security Command Center(Security Health Analytics 的一项内置服务)来发现资源层次结构中的位置违规。如需了解详情,请参阅组织政策漏洞和发现结果。
如果存在 Security Health Analytics 针对位置违规的发现结果,请参阅针对 Security Health Analytics 的发现结果进行补救,了解针对这些发现结果进行补救的步骤。
值组
值组是由 Google 精心挑选的组和位置的集合,可让您轻松定义资源位置。值组包含许多相关位置。Google 会不断扩充值组,您无需更改组织政策即可适应新的位置。
如需在组织政策中使用值组,请在您的条目前面添加 in:
字符串作为前缀。如需详细了解如何使用值前缀,请参阅使用限制条件。调用以设置组织政策时,系统会验证组名称。使用无效的群组名称会导致政策设置失败。
下表包含最新的可用组列表:
组 | 详情 | 直接成员 |
---|---|---|
约翰内斯堡 | 约翰内斯堡境内的所有位置:in:africa-south1-locations |
值:
|
亚洲 | 亚洲境内的所有位置:in:asia-locations |
组:
值:
|
香港 | 香港境内的所有位置:in:asia-east2-locations |
值:
|
印度尼西亚 | 印度尼西亚境内的所有位置:in:id-locations |
组:
值:
|
雅加达 | 雅加达境内的所有位置:in:asia-southeast2-locations |
值:
|
以色列 | 以色列境内的所有位置:in:il-locations |
组:
值:
|
以色列 | 以色列境内的所有位置:in:me-west1-locations |
值:
|
印度 | 印度境内的所有位置:in:in-locations |
组:
值:
|
孟买 | 孟买境内的所有位置:in:asia-south1-locations |
值:
|
德里 | 德里境内的所有位置:in:asia-south2-locations |
值:
|
日本 | 日本境内的所有位置:in:jp-locations |
组:
值:
|
东京 | 东京境内的所有位置:in:asia-northeast1-locations |
值:
|
大阪 | 大阪境内的所有位置:in:asia-northeast2-locations |
值:
|
韩国 | 韩国境内的所有位置:in:kr-locations |
组:
值:
|
首尔 | 首尔境内的所有位置:in:asia-northeast3-locations |
值:
|
多哈 | 多哈境内的所有位置:in:me-central1-locations |
值:
|
沙特阿拉伯 | 沙特阿拉伯境内的所有位置:in:sa-locations |
组:
值:
|
Dammam | 达曼境内的所有位置:in:me-central2-locations |
值:
|
新加坡 | 新加坡境内的所有位置:in:sg-locations |
组:
值:
|
新加坡 | 新加坡境内的所有位置:in:asia-southeast1-locations |
值:
|
台湾 | 台湾境内的所有位置:in:tw-locations |
组:
值:
|
台湾 | 台湾境内的所有位置:in:asia-east1-locations |
值:
|
澳大利亚 | 澳大利亚境内的所有位置:in:australia-locations |
组:
值:
|
悉尼 | 悉尼境内的所有位置:in:australia-southeast1-locations |
值:
|
墨尔本 | 墨尔本境内的所有位置:in:australia-southeast2-locations |
值:
|
AWS | 所有 AWS 位置:in:aws-locations |
值:
|
Azure | 所有 Azure 位置:in:azure-locations |
值:
|
欧盟 | 欧盟境内的所有位置:in:eu-locations |
组:
值:
|
德国 | 德国境内的所有位置:in:de-locations |
组:
值:
|
Berlin | 柏林境内的所有位置:in:europe-west10-locations |
值:
|
法兰克福 | 法兰克福境内的所有位置:in:europe-west3-locations |
值:
|
华沙 | 华沙境内的所有位置:in:europe-central2-locations |
值:
|
芬兰 | 芬兰境内的所有位置:in:europe-north1-locations |
值:
|
马德里 | 马德里境内的所有位置:in:europe-southwest1-locations |
值:
|
比利时 | 比利时境内的所有位置:in:europe-west1-locations |
值:
|
荷兰 | 荷兰境内的所有位置:in:europe-west4-locations |
值:
|
Paris | 巴黎境内的所有位置:in:europe-west9-locations |
值:
|
意大利 | 意大利境内的所有位置:in:it-locations |
组:
值:
|
都灵 | 都灵境内的所有位置:in:europe-west12-locations |
值:
|
米兰 | 米兰境内的所有位置:in:europe-west8-locations |
值:
|
欧洲 | 欧洲境内的所有位置:in:europe-locations |
组:
值:
|
瑞士 | 瑞士境内的所有位置:in:ch-locations |
组:
值:
|
苏黎世 | 苏黎世境内的所有位置:in:europe-west6-locations |
值:
|
英国 | 英国境内的所有位置:in:gb-locations |
组:
值:
|
伦敦 | 伦敦境内的所有位置:in:europe-west2-locations |
值:
|
低碳地点 | 碳排放量较低的所有位置:in:low-carbon-locations |
组:
|
低碳加拿大 | 碳排放量较低的加拿大境内所有位置:in:canada-low-carbon-locations |
组:
|
蒙特利尔 | 蒙特利尔境内的所有位置:in:northamerica-northeast1-locations |
值:
|
多伦多 | 多伦多境内的所有位置:in:northamerica-northeast2-locations |
值:
|
低碳欧盟 | 碳排放量较低的欧盟境内的所有位置:in:eu-low-carbon-locations |
组:
|
低碳欧洲 | 碳排放量较低的欧洲境内所有位置:in:europe-low-carbon-locations |
组:
|
低碳北美 | 北美洲境内碳排放量较低的所有位置:in:northamerica-low-carbon-locations |
组:
|
爱荷华州 | 爱荷华境内的所有位置:in:us-central1-locations |
值:
|
俄勒冈 | 俄勒冈境内的所有位置:in:us-west1-locations |
值:
|
低碳南美洲 | 南美洲境内碳排放量较低的所有位置:in:southamerica-low-carbon-locations |
组:
|
圣保罗 | 圣保罗境内的所有位置:in:southamerica-east1-locations |
值:
|
低碳美国 | 美国境内碳排放量较低的所有位置:in:us-low-carbon-locations |
组:
|
北美洲 | 北美洲境内的所有位置:in:northamerica-locations |
组:
值:
|
加拿大 | 加拿大境内的所有位置。in:canada-locations |
组:
值:
|
墨西哥 | 墨西哥境内的所有位置:in:northamerica-south1-locations |
值:
|
美国 | 美国境内的所有位置:in:us-locations |
组:
值:
|
俄克拉荷马 | 俄克拉荷马境内的所有位置:in:us-central2-locations |
值:
|
南卡罗莱纳 | 南卡罗莱纳境内的所有地区:in:us-east1-locations |
值:
|
北弗吉尼亚 | 北弗吉尼亚境内的所有位置:in:us-east4-locations |
值:
|
Columbus | 哥伦布境内的所有位置:in:us-east5-locations |
值:
|
达拉斯 | 达拉斯境内的所有位置:in:us-south1-locations |
值:
|
洛杉矶 | 洛杉矶境内的所有位置:in:us-west2-locations |
值:
|
盐湖城 | 盐湖城境内的所有位置:in:us-west3-locations |
值:
|
拉斯维加斯 | 拉斯维加斯境内的所有位置:in:us-west4-locations |
值:
|
南美洲 | 南美洲境内的所有位置:in:southamerica-locations |
组:
|
巴西 | 巴西境内的所有位置:in:br-locations |
组:
值:
|
智利 | 智利境内的所有位置:in:cl-locations |
组:
值:
|
圣地亚哥 | 圣地亚哥境内的所有位置:in:southamerica-west1-locations |
值:
|
身份验证
组织政策服务使用 OAuth 2.0 进行 API 身份验证和授权。要获取 OAuth 2.0 不记名令牌,请执行以下操作:
在第 1 步范围列表中,选择 Cloud Resource Manager API v2 > https://www.googleapis.com/auth/cloud-platform,然后点击授权 API (Authorize APIs)。
在显示的使用 Google 账号登录页面上,选择您的账号并登录。
如需提供对 Google Oauth 2.0 Playground 的访问权限,请在出现的提示上点击允许。
在第 2 步中,点击以授权代码交换令牌 (Exchange authorization code for tokens)。
在右侧的请求/响应窗格底部,将显示您的访问令牌字符串:
{ "access_token": "ACCESS_TOKEN", "token_type": "Bearer", "expires_in": 3600 }
其中,ACCESS_TOKEN 是可用于 API 授权的 OAuth 2.0 不记名令牌字符串。