リソース ロケーションの制限

概要

このガイドでは、リソース ロケーションの制約を含む組織のポリシーの設定方法について説明します。

組織のポリシー サービスのリソース ロケーションの制約を使用して、新しいリソースの物理的な場所を制限できます。サービスがリソースを配置、維持する場所は、リソースのロケーション プロパティで特定できます。Google Cloud サービスによってはデータを含むリソースもありますが、そのデータの格納場所もこのプロパティで示されます。この制約を使用することで、階層内でサポートされるサービスのリソースを作成できる場所を Google Cloud 上に定義できます。

リソース ロケーションを定義すると、その制限は新しく作成されたリソースにのみ適用されます。リソース ロケーションの制約を設定する前に作成されたリソースは引き続き存在し、機能し続けます。

この制約を含むポリシーは、Cloud Storage や Dataproc などの特定のサービスのサブリソース作成には適用されません。

制限事項

リソース ロケーションの組織のポリシー サービスの制約により、リージョン リソースの作成の可否が制御されます。これは、グローバル リソースが作成される場所には影響しません。稼働中の既存のインフラストラクチャを破損を防ぐには、本番環境以外のプロジェクトとフォルダで新しいポリシーをテストしてから、組織内で段階的にポリシーを適用してください。

データ ストレージ コミットメントについては、Google Cloud 利用規約サービス固有の規約をご覧ください。リソース ロケーションの制約を含む組織のポリシーは、データ ストレージ コミットメントではありません。

この制約は、プロダクトとリソースタイプの特定のサブセットに適用されます。現在サポートされているサービスと各サービスの動作の詳細については、リソース ロケーションのサポート対象サービスページをご覧ください。

ロケーション タイプ

Google Cloud リソースは、さまざまなサイズ分類のロケーション タイプでデプロイできます。最も規模の大きなロケーション タイプは、複数の region を含む multi-region です。各 region はさらに zones に分けられます。リージョンとゾーンの詳細については、リージョンとゾーンの概要をご覧ください。

  • Multi-region ロケーションは、複数の region の物理リソースによって裏付けられ、通常は、ストレージ ベースのリソースによってのみ使用されます。たとえば、usasiaeuropeglobal などです。

  • Region ロケーションは、互いに地理的に離れた場所にあります。たとえば、us-west1(オレゴン)、asia-northeast1(東京)、europe-west1(ベルギー)などです。

  • Zone ロケーションは、リソースをデプロイするために使われる最も細かく分離されたロケーション タイプです。zone は、region 内の独立した障害発生ドメインです。たとえば、us-east1-aus-west1-basia-northeast1-a などです。

ロケーションを設定するときは、in: 接頭辞と値のグループを使用する必要があります。Google Cloud でキュレーションされた値グループを使用すると、現在または将来の Cloud のロケーションを指定せずに、地理的なロケーションを選択できます。

値グループの in: 接頭辞は、値グループ内に存在するすべての値がポリシーの一部と見なされるように指定します。接頭辞なしでグループ値または Google Cloud リージョンを入力すると、以下のルールに従って、in: 接頭辞が自動的に追加されます。

  • in: 接頭辞を使用するロケーションを入力し、そこに無効なグループが含まれている場合、ポリシーの変更は失敗します。
  • us-east1 などのリージョンであるロケーションを入力すると、この例では in:us-east1-locations の前に in: 接頭辞が付加されます。
  • us-locations などのリージョンまたはマルチリージョン値グループを入力すると、この例では in:us-locations の前に in: 接頭辞が付加されます。
  • us-east1-aus などのゾーンまたはマルチリージョンを入力した場合、値は変更されません。

組織ポリシーの設定

リソース ロケーションの制約は、リスト型制約の一種です。リソース ロケーション制約の allowed_values リストまたは denied_values リストに対して、ロケーションの追加または削除を行えます。新しいロケーションが使用可能リストに追加されたときに、組織のポリシーによってサービスの動作が予期せず制限されてしまうのを回避するには、値グループ、または定義する地理的境界全体を表す allowed_values のリストを使用してください。

リソース ロケーションの制約を含む組織のポリシーを設定するには:

Console

  1. Google Cloud Console で [組織のポリシー] ページに移動します。[組織のポリシー] ページに移動

  2. 画面上部の [プロジェクト選択ツール] で、ポリシーを設定する組織を選択します。

  3. [Google Cloud Platform] - [Define Resource Restriction] をクリックします。

  4. [編集] をクリックします。

  5. [対象] で、[カスタマイズ] を選択します。

  6. [ポリシーの値] で [カスタム] を選択します。

  7. [ポリシーの値] ボックスで、in 接頭辞と値グループ ロケーション文字列を入力してから、Enter キーを押します。たとえば、in:us-locations または in:us-west1-locations を入力します。ロケーション文字列は、複数入力できます。

    1. ロケーション文字列として特定のゾーン、リージョン、またはマルチリージョン ロケーションも入力できます。利用可能なロケーションの一覧については、リソース ロケーションのサポート対象サービスページをご覧ください。
  8. [保存] をクリックします。ポリシーの更新を確認するための通知が表示されます。

gcloud

gcloud コマンドライン ツールを使用して、ポリシーを設定できます。リソース ロケーションの制約を含むポリシーを作成するには、まず、ポリシーファイルを作成します。

cat POLICY.YAML
etag: BwVUSr8Q7Ng=
constraint: constraints/gcp.resourceLocations
listPolicy:
  deniedValues:

  • in:us-east1-locations
  • in:northamerica-northeast1-locations

次に、set-policy コマンドを実行します。

gcloud beta resource-manager org-policies set-policy \
    --organization 'ORGANIZATION_ID' \
    POLICY.YAML

ここで

  • ORGANIZATION_ID は、このポリシーを設定する組織ノードの ID です。
  • POLICY.YAML は、必要な組織ポリシーを含む .yaml ファイルです。

新しい組織ポリシーの結果を含むレスポンスが返されます。

constraint: constraints/gcp.resourceLocations
etag: BwVUSr8Q7Ng=
listPolicy:
  deniedValues:
  - in:us-east1-locations
  - in:northamerica-northeast1-locations
updateTime: '2018-01-01T00:00:00.000Z'

ロケーション文字列として特定のゾーン、リージョン、またはマルチリージョン ロケーションも入力できます。利用可能なロケーションの一覧については、リソース ロケーションのサポート対象サービスページをご覧ください。

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

新しい組織ポリシーの結果を含むレスポンスが返されます。

{
  "constraint": "constraints/gcp.resourceLocations",
  "etag": "BwVtXec438Y=",
  "updateTime": "2018-01-01T00:00:00.000Z",
  "listPolicy": {
    "deniedValues": [
      "europe-locations",
      "southamerica-locations",
    ]
  }
}

ロケーション文字列として特定のゾーン、リージョン、またはマルチリージョン ロケーションも入力できます。利用可能なロケーションの一覧については、リソース ロケーションのサポート対象サービスページをご覧ください。

組織ポリシーで制約を使用する方法については、制約の使用をご覧ください。

組織のポリシーでの継承の使用

リソースの親ノードから組織のポリシーを継承するように、組織のポリシーを調整できます。継承を使用すると、リソース階層全体で使われる組織のポリシーをきめ細かく制御できます。

リソースノードで継承を有効にするには、組織のポリシー .yaml ファイルで inheritFromParent = true を設定します。例:

etag: BwVtXec438Y=
constraint: constraints/gcp.resourceLocations
listPolicy:
  deniedValues:
    "us-west1"
  inheritFromParent: true

エラー メッセージの例

リソース ロケーションの制約をサポートするサービスでは、制約に違反する場所に新しいリソースを作成することはできません。サービスが、制約に違反する場所にリソースを作成しようとすると、エラーが発生し、エラー メッセージが生成されます。

このエラー メッセージの形式は次のようになります。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 のオペレーション スイートと Cloud 監査ログのログエントリ:

{
 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"
}

値グループ

値グループは、リソース ロケーションを簡単に定義できるようにするために Google によってキュレートされた、グループとロケーションからなるコレクションです。値グループには多数の関連ロケーションが含まれ、時間の経過とともに Google によって拡張されるので、新しいロケーションに対応するように組織ポリシーを変更しなくて済みます。

組織のポリシーで値グループを使用するには、エントリの先頭に文字列 in: を付加します。値接頭辞の使用方法については、制約の使用をご覧ください。組織ポリシーを設定するための呼び出しでは、グループ名が検証されません。指定されたグループ名が存在しない場合、そのグループ名が後で Google によって作成されない限り、新しい値は有効な組織ポリシーに追加されません。

次の表に、現時点で使用可能なグループのリストを示します。

グループ 詳細 直接メンバー
アジア アジア内のすべてのロケーション:
in:asia-locations
グループ:
  • asia-east1-locations
  • asia-east2-locations
  • asia-northeast1-locations
  • asia-northeast2-locations
  • asia-northeast3-locations
  • asia-south1-locations
  • asia-southeast1-locations

値:
  • asia
台湾 台湾内のすべてのロケーション:
in:asia-east1-locations
値:
  • asia-east1
  • asia-east1-a
  • asia-east1-b
  • asia-east1-c
香港 香港のすべてのロケーション:
in:asia-east2-locations
値:
  • asia-east2
  • asia-east2-a
  • asia-east2-b
  • asia-east2-c
東京 東京内のすべてのロケーション:
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:asia-northeast3-locations
値:
  • asia-northeast3
  • asia-northeast3-a
  • asia-northeast3-b
  • asia-northeast3-c
ムンバイ ムンバイ内のすべてのロケーション:
in:asia-south1-locations
値:
  • asia-south1
  • asia-south1-a
  • asia-south1-b
  • asia-south1-c
シンガポール シンガポール内のすべてのロケーション:
in:asia-southeast1-locations
値:
  • asia-southeast1
  • asia-southeast1-a
  • asia-southeast1-b
  • asia-southeast1-c
オーストラリア オーストラリア内のすべてのロケーション:
in:australia-locations
グループ:
  • australia-southeast1-locations
シドニー シドニー内のすべてのロケーション:
in:australia-southeast1-locations
値:
  • australia-southeast1
  • australia-southeast1-a
  • australia-southeast1-b
  • australia-southeast1-c
ヨーロッパ ヨーロッパ内のすべてのロケーション:
in:europe-locations
グループ:
  • europe-north1-locations
  • europe-west1-locations
  • europe-west2-locations
  • europe-west3-locations
  • europe-west4-locations
  • europe-west6-locations

値:
  • EU
  • eu
  • eur4
  • europe
  • europe-west
フィンランド フィンランド内のすべてのロケーション:
in:europe-north1-locations
値:
  • europe-north1
  • europe-north1-a
  • europe-north1-b
  • europe-north1-c
ベルギー ベルギー内のすべてのロケーション:
in:europe-west1-locations
値:
  • europe-west1
  • europe-west1-b
  • europe-west1-c
  • europe-west1-d
ロンドン ロンドン内のすべてのロケーション:
in:europe-west2-locations
値:
  • europe-west2
  • europe-west2-a
  • europe-west2-b
  • europe-west2-c
フランクフルト フランクフルト内のすべてのロケーション:
in:europe-west3-locations
値:
  • europe-west3
  • europe-west3-a
  • europe-west3-b
  • europe-west3-c
オランダ オランダ内のすべてのロケーション:
in:europe-west4-locations
値:
  • europe-west4
  • europe-west4-a
  • europe-west4-b
  • europe-west4-c
チューリッヒ チューリッヒ内のすべてのロケーション:
in:europe-west6-locations
値:
  • europe-west6
  • europe-west6-a
  • europe-west6-b
  • europe-west6-c
北アメリカ 北アメリカ内のすべてのロケーション:
in:northamerica-locations
グループ:
  • northamerica-northeast1-locations
  • us-locations
モントリオール モントリオール内のすべてのロケーション:
in:northamerica-northeast1-locations
値:
  • northamerica-northeast1
  • northamerica-northeast1-a
  • northamerica-northeast1-b
  • northamerica-northeast1-c
米国 米国内のすべてのロケーション:
in:us-locations
グループ:
  • us-central1-locations
  • us-central2-locations
  • us-east1-locations
  • us-east4-locations
  • us-west1-locations
  • us-west2-locations
  • us-west3-locations

値:
  • US
  • nam3
  • nam4
  • nam5
  • nam6
  • us
  • us-central
アイオワ アイオワ州内のすべてのロケーション:
in:us-central1-locations
値:
  • us-central1
  • us-central1-a
  • us-central1-b
  • us-central1-c
  • us-central1-f
オクラホマ オクラホマ州内のすべてのロケーション:
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-west1-locations
値:
  • us-west1
  • us-west1-a
  • us-west1-b
  • us-west1-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:southamerica-locations
グループ:
  • southamerica-east1-locations
サンパウロ サンパウロ内のすべてのロケーション:
in:southamerica-east1-locations
値:
  • southamerica-east1
  • southamerica-east1-a
  • southamerica-east1-b
  • southamerica-east1-c

認証

組織のポリシー サービスは、API の認証と承認に OAuth 2.0 を使用します。OAuth 2.0 署名なしトークンを取得するには、次のようにします。

  1. OAuth 2.0 Playground ページに移動します。

  2. スコープのステップ 1 リストで、[Cloud Resource Manager API v2] > [https://www.googleapis.com/auth/cloud-platform] を選択し、[Authorize APIs] をクリックします。

  3. 表示された [Google でログイン] ページで、アカウントを選択してログインします。

  4. Google Oauth 2.0 Playground にアクセス権を与えるには、表示されたプロンプトで [許可] をクリックします。

  5. ステップ 2 で、[Exchange authorization code for tokens] をクリックします。

  6. 右側にある [Request / Response] ペインの下部に、アクセス トークン文字列が表示されます。

     {
       "access_token": "ACCESS_TOKEN",
       "token_type": "Bearer",
       "expires_in": 3600
     }
    

    ACCESS_TOKEN は、API の承認に使用できる OAuth 2.0 Bearer トークンの文字列です。