静的外部 IP アドレスの予約

このページでは、リソースの静的外部 IP アドレスを構成、管理する方法について説明します。これには次の項目が含まれます。

  • 静的外部 IP アドレスの予約と割り当て
  • エフェメラル外部 IP アドレスの静的外部 IP アドレスへの昇格

Compute Engine では、各 VM インスタンスが複数のネットワーク インターフェースを持つことができます。各インターフェースは、内部 IP アドレスと外部 IP アドレスの両方を持つことができます。転送ルールには、外部負荷分散のための外部 IP アドレスや、内部負荷分散のための内部アドレスを指定できます。IP アドレスについて詳しくは、IP アドレスのドキュメントをご覧ください。

このドキュメントでは、内部 IP アドレスの予約と管理方法については説明しません。静的内部 IP アドレスを予約するには、静的内部アドレスの予約をご覧ください。

始める前に

新しい静的外部 IP アドレスの予約

静的外部 IP アドレスはプロジェクト用に予約される外部 IP アドレスであり、解放するまで予約されたままになります。あなたのサービスにお客様やユーザーがアクセスする際に利用している IP アドレスがある場合、あなたのプロジェクトだけがその IP アドレスを使用できるようにするため、その IP アドレスを予約することができます。また、エフェメラル外部 IP アドレスを静的外部 IP アドレスに昇格させることもできます。

次の 2 種類の外部 IP アドレスを予約できます。

静的外部 IP アドレスを予約するには gcloud コマンドライン ツールまたは API を使用します。予約したアドレスは、インスタンスの作成時に割り当てるか、既存のインスタンスに割り当てます。

制限事項

  • 一度に複数のリソースが同じ静的外部 IP アドレスを使用することはできません。

  • IP アドレスをリソースに割り当てた後に静的アドレスかエフェメラル アドレスかを確認するには、そのプロジェクトに予約されている静的外部 IP アドレスのリストで調べる以外に方法はありません。プロジェクトで使用可能な静的外部 IP アドレスのリストを表示するには、addresses list サブコマンドを使用します。

  • 各 VM インスタンスは複数のネットワーク インターフェースを持つことができますが、各インターフェースはエフェメラルか静的である外部 IP アドレスを 1 つだけ持つことができます。

注: ネットワーク インターフェースは複数の転送ルールからトラフィックを受信できますが、ルールの中には他の外部 IP アドレスを対象とするものもあります。任意の数の外部 IP アドレスがこれらの転送ルールを介してネットワーク インターフェースを参照できますが、各ネットワーク インターフェースはパケットをインターフェースの内部 IP アドレスに変換する外部 IP アドレスを 1 つだけ持つことができます。

負荷分散と転送ルールの詳細については、負荷分散のドキュメントをご覧ください。

Console

  1. GCP Console の [静的アドレスの予約] ページに移動します。

    [静的アドレスの予約] ページに移動

  2. 新しいアドレスの名前を指定します。
  3. これが IPv4 アドレスか IPv6 アドレスかを指定します。IPv6 アドレスは、グローバルのみになり、グローバル HTTP(S)、SSL プロキシ、TCP プロキシのロードバランサでのみ使用できます。
  4. この IP アドレスがリージョン アドレスかグローバル アドレスかを選択します。インスタンスまたはネットワーク ロードバランサ用に静的 IP アドレスを予約する場合は、[リージョン] を選択します。HTTP(S)、SSL プロキシ、TCP プロキシのロードバランサ用に静的 IP アドレスを予約する場合は、[グローバル] を選択します。
  5. リージョン IP アドレスの場合は、アドレスを作成するリージョンを選択します。
  6. (省略可)IP アドレスを割り当てるリソースを選択します。
  7. [予約] をクリックして IP アドレスを予約します。

gcloud

gcloud compute を使用して新しい静的外部 IP アドレスを予約するには、addresses create サブコマンドを使用し、グローバルとリージョンのどちらの IP アドレスを予約するかを指定します。

gcloud compute addresses create [ADDRESS_NAME] \
    [--region [REGION] | --global ] \
    [--ip-version [IPV4 | IPV6]]

ここで:

  • [ADDRESS_NAME] はこのアドレスに付ける名前です。
  • リージョン IP アドレスを指定する場合は、リクエストの目的の [REGION] を指定します。このリージョンは、IP アドレスを割り当てるリソースと同じリージョンである必要があります。
  • グローバル IP アドレスの場合は、--global フラグを指定します。IPv6 アドレスが必要な場合は、--global--ip-version IPV6 の両方のフラグを指定します。 IPv6 アドレスは、グローバルのみになり、グローバル HTTP(S)、SSL プロキシ、TCP プロキシのロードバランサでのみ使用できます。

API

リージョン IPv4 アドレスに対するリクエストを直接 API に対して発行するには、次の URI に対して POST リクエストを発行します。

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/addresses

リクエスト本文は次のようにします。

{
  name: "[ADDRESS_NAME]"
}

ここで:

  • [ADDRESS_NAME] はこのアドレスに付ける名前です。
  • [REGION] はこのリクエストの対象リージョンの名前です。
  • [PROJECT_ID] はこのリクエストのプロジェクト ID です。

グローバル静的 IPv4 アドレスの場合は、次の URI に対してリクエストを発行します。

    https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/addresses

リクエスト本文は次のようにします。

{
  name: "[ADDRESS_NAME]"
}

グローバル静的 IPv6 アドレスの場合は、次の URI に対してリクエストを発行します。

    https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/addresses

リクエスト本文は次のようにします。

{
  "name": "[ADDRESS_NAME]",
  "ipVersion": "IPV6"
}

新しい VM インスタンスへの静的外部 IP アドレスの割り当て

VM インスタンスを作成するとき、エフェメラル外部 IP アドレスが自動的に割り当てられます。エフェメラル外部 IP アドレスを使用したくない場合は、明示的に静的外部 IP アドレスをインスタンスに割り当てることができます。

Console

  1. GCP Console の [VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. [インスタンスを作成] をクリックします。
  3. [新しいインスタンスの作成] ページで、インスタンス向けに希望するプロパティを入力します。
  4. [管理、ディスク、ネットワーキング、SSH 認証鍵] セクションを展開します。
  5. [ネットワーキング] をクリックします。
  6. [外部 IP] で静的外部 IP アドレスを選択します。
  7. [作成] をクリックしてインスタンスを作成します。

gcloud

静的外部 IP アドレスを割り当てるには、インスタンスを作成するときに --address フラグで静的外部 IP アドレスを指定します。

gcloud compute instances create [INSTANCE_NAME] --address [IP_ADDRESS]

ここで:

  • [INSTANCE_NAME] はインスタンスの名前です。
  • [IP_ADDRESS] はインスタンスに割り当てる IP アドレスです。アドレス名ではなく IP アドレスを使用してください。

API

新しいインスタンスを作成するリクエストで、networkInterfaces[].accessConfigs[].natIP プロパティと、使用する外部 IP を明示的に指定します。次に例を示します。

{
  "name": "[INSTANCE_NAME]",
  "machineType": "zones/[ZONE]/machineTypes/[MACHINE_TYPE]"
  "networkInterfaces": [{
    "accessConfigs": [{
      "type": "ONE_TO_ONE_NAT",
      "name": "External NAT",
      "natIP": "[IP_ADDRESS]"
     }],
    "network": "global/networks/default"
  }],
  "disks": [{
     "autoDelete": "true",
     "boot": "true",
     "type": "PERSISTENT",
     "initializeParams": {
        "sourceImage": "projects/debian-cloud/global/images/v20150818"
     }
   }]
 }

既存のインスタンスへの外部 IP アドレスの割り当てまたは変更

既存のインスタンスに外部 IP アドレス(エフェメラルまたは静的のいずれか)を割り当てる、またはそれを変更するには、インスタンスのアクセス構成を変更します。

インスタンスに付与できる外部 IP アドレスは 1 つだけです。インスタンスにすでに外部 IP アドレスが与えられている場合は、最初に古いアクセス構成を削除してアドレスを除去する必要があります。その後、新しい外部 IP アドレスを含む新しいアクセス構成を追加します。

Console

  1. GCP Console の [VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. 外部 IP アドレスを割り当てるインスタンスの名前をクリックします。
  3. ページの上部にある [編集] ボタンをクリックします。
  4. [外部 IP] で、インスタンスに割り当てるエフェメラルまたは静的な外部 IP アドレスを選択します。
  5. [保存] ボタンをクリックして変更を保存します。

gcloud

  1. (省略可)静的外部 IP アドレスを予約します。

    静的外部 IP アドレスを割り当てる場合は、他のリソースで使用されていないアドレスを取得するため、アドレスを予約する必要があります。必要であれば、手順に沿って新しい静的外部 IP アドレスを予約するか、静的外部 IP アドレスの割り当てを解除します。

    エフェメラル外部 IP アドレスを使用する場合は、この手順をスキップします。エフェメラル外部 IP アドレスは Compute Engine によってランダムに割り当てられます。

  2. 既存のアクセス構成を削除します。

    1 つのインスタンスに割り当てることができるアクセス構成は 1 つだけです。新しいアクセス構成をインスタンスに割り当てる前に、gcloud compute instances describe リクエストを発行してインスタンスにアクセス構成が存在するかどうかを確認します。

    gcloud compute instances describe [INSTANCE_NAME]
    

    既存のアクセス構成がある場合は、次の形式で表示されます。

    networkInterfaces:
    - accessConfigs:
      - kind: compute#accessConfig
        name: external-nat
        natIP: 130.211.181.55
        type: ONE_TO_ONE_NAT

    新しいアクセス構成を追加する前に、instances delete-access-config サブコマンドを使用して既存のアクセス構成を削除する必要があります。

    gcloud compute instances delete-access-config [INSTANCE_NAME] \
        --access-config-name "[ACCESS_CONFIG_NAME]"
    

    ここで:

    • [INSTANCE_NAME] はインスタンスの名前です。
    • [ACCESS_CONFIG_NAME] は削除するアクセス構成です。引用符の中に完全な名前を指定してください。
  3. 新しい外部 IP アドレスを追加します。

    instances add-access-config サブコマンドを使用して新しい外部 IP アドレスを追加します。

    注: [IP_ADDRESS] を静的 IP の名前に置き換えないでください。実際の IP アドレスを指定する必要があります。

    gcloud compute instances add-access-config [INSTANCE_NAME] \
        --access-config-name "[ACCESS_CONFIG_NAME]" --address [IP_ADDRESS]
    

    ここで:

    • [INSTANCE_NAME] はインスタンスの名前です。
    • [ACCESS_CONFIG_NAME] はこのアクセス構成に付ける名前です。引用符の中に完全な名前を指定してください。
    • [IP_ADDRESS] は追加する IP アドレスです。

    静的外部 IP アドレスを使用する代わりに、エフェメラル外部 IP アドレスが自動的に割り当てられるようにする場合は、--address [IP_ADDRESS] プロパティを省略します。

    gcloud compute instances add-access-config [INSTANCE_NAME] \
        --access-config-name "[ACCESS_CONFIG_NAME]"
    

エフェメラル外部 IP アドレスの昇格

インスタンスにエフェメラル外部 IP アドレスが割り当てられており、その IP アドレスを永続的にプロジェクトに割り当てたい場合は、エフェメラル外部 IP アドレスを静的外部 IP アドレスに昇格させます。

Console

  1. GCP Console の [外部 IP アドレス] ページに移動します。

    [外部 IP アドレス] ページに移動

  2. 昇格する IP アドレスの [タイプ] 列で、アドレスタイプを [静的] に変更します。
  3. 新しい静的 IP アドレスの名前を指定して [予約] をクリックします。

gcloud

エフェメラル外部 IP アドレスを静的外部 IP アドレスに昇格させるには、--addresses フラグにエフェメラル外部 IP アドレスを指定して新しいアドレスを作成します。

gcloud compute addresses create [ADDRESS_NAME] \
    --addresses [IP_ADDRESS] --region [REGION]

ここで:

  • [ADDRESS_NAME] はこのアドレスに付ける名前です。
  • [IP_ADDRESS] は昇格させる IP アドレスです。
  • [REGION] は IP アドレスが属するリージョンです。

API

API にリクエストを直接発行するには、次の URI に PUT リクエストを送ります。

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/addresses

リクエスト本文は次のようにします。

{
  name: "[ADDRESS_NAME]",
  address: "[IP_ADDRESS]"
}

ここで:

  • [ADDRESS_NAME] はこのアドレスに付ける名前です。
  • [IP_ADDRESS] は昇格させる IP アドレスです。
  • [REGION] は IP アドレスが属するリージョンです。
  • [PROJECT_ID] はこのリクエストのプロジェクト ID です。

静的外部 IP アドレスに昇格した外部 IP アドレスは、その後も同じインスタンスにとどまります。新しく昇格した静的外部 IP アドレスを別のリソースに割り当てる場合は、既存のインスタンスから静的外部 IP アドレスを割り当て解除します。

静的外部 IP アドレスの一覧表示

プロジェクトに予約されている静的外部 IP アドレスを一覧表示するには、addresses list を実行するか、API に GET リクエストを発行します。

Console

GCP Console の [外部 IP アドレス] ページに移動すると、プロジェクトの IP アドレスが一覧表示されます。

[外部 IP アドレス] ページに移動

gcloud

gcloud コマンドライン ツールを次のように使用します。

gcloud compute addresses list

API

API にリクエストを直接発行するには、次の URI に空のリクエスト本文で GET リクエストを送ります。

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/addresses

ここで:

  • [REGION] はこのリクエストの対象リージョンの名前です。
  • [PROJECT_ID] はこのリクエストのプロジェクト ID です。

すべてのリージョンの全アドレスを一覧表示するには、次の URI にリクエストを発行します。

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/aggregated/addresses

静的外部 IP アドレスの詳細情報の取得

静的外部 IP アドレスに関する情報を取得するには、gcloud compute addresses describe コマンドを使用してアドレス名を指定するか、API への GET リクエストを発行します。

Console

  1. GCP Console の [外部 IP アドレス] ページに移動します。

    [外部 IP アドレス] ページに移動

  2. 詳細情報を取得する IP アドレスをクリックします。

gcloud

gcloud compute addresses describe を使用します。

gcloud compute addresses describe [ADDRESS_NAME]

ここで、[ADDRESS_NAME] は情報を取得する外部 IP アドレスの名前です。

API

API にリクエストを直接発行するには、次の URI に空のリクエスト本文で GET リクエストを送ります。

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/addresses/[ADDRESS_NAME]

ここで:

  • [ADDRESS_NAME] は IP アドレスの名前です。
  • [REGION] はこのリクエストの対象リージョンの名前です。
  • [PROJECT_ID] はこのリクエストのプロジェクト ID です。

静的外部 IP アドレスの割り当て解除

静的外部 IP アドレスの割り当てを解除するには、インスタンスを削除するか、そのアドレスを使用しているインスタンスに関連付けられたアクセス構成を削除します。静的外部 IP アドレスの割り当てを解除すると、その静的外部 IP アドレスを別のリソースに再割り当てできます。

IP アドレスの割り当てを解除すると、その IP アドレスはリソースから削除されますが、引き続きプロジェクトに予約されたままになります。静的 IP アドレスが使用中かどうかを確認するには、gcloud compute addresses list リクエストを実行します。

gcloud compute addresses list
NAME                 REGION      ADDRESS            STATUS
example-address      [REGION]    130.211.160.207    RESERVED
example-address-new  [REGION]    130.211.114.137    IN_USE

この例では、example-address-new は現在使用中です。

インスタンスのアクセス構成を削除して静的外部 IP アドレスの割り当てを解除する手順は次のとおりです。

  1. 削除するアクセス構成の名前を取得します。

    名前を取得するには、gcloud compute instances describe を実行します。

    gcloud compute instances describe [INSTANCE_NAME]
    

    ここで、[INSTANCE_NAME] はインスタンスの名前です。

    アクセス構成は次の形式で表示されます。

    networkInterfaces:
    - accessConfigs:
      - kind: compute#accessConfig
        name: external-nat
        natIP: 130.211.181.55
        type: ONE_TO_ONE_NAT

    注: アクセス構成の nameexternal-nat でない場合があります。必ずご使用のアクセス構成の名前を確認してください。場合によっては、古いバージョンのアクセス構成名(External NAT)が使用されていることがあります。

  2. アクセス構成を削除します。

    instances delete-access-config サブコマンドを使用します。

    gcloud compute instances delete-access-config [INSTANCE_NAME] \
        --access-config-name "[ACCESS_CONFIG_NAME]"
    

    ここで:

    • [INSTANCE_NAME] はインスタンスの名前です。
    • [ACCESS_CONFIG_NAME] は削除するアクセス構成の名前です。引用符の中に完全な名前を指定してください。
  3. 静的外部 IP アドレスのステータスが IN_USE から RESERVED に変わり、使用可能になったことを確認します。

    gcloud compute addresses list
    

    NAME                 REGION      ADDRESS            STATUS
    example-address      [REGION]    130.211.160.207    RESERVED
    example-address-new  [REGION]    130.211.114.137    RESERVED

これで指定の静的外部 IP アドレスが使用可能になったので、別のインスタンスに割り当てることができます。

静的外部 IP アドレスの解放

静的外部 IP アドレスが不要になったら、そのアドレスを解放できます。解放するとその IP アドレスは一般 IP プールに戻され、Compute Engine の他のユーザーが使用できるようになります。

Console

  1. GCP Console の [外部 IP アドレス] ページに移動します。

    [外部 IP アドレス] ページに移動

  2. 解放する IP アドレスの横のチェックボックスをオンにします。
  3. [IP アドレスを解放] をクリックします。

gcloud

gcloud コマンドライン ツールを次のように使用します。

gcloud compute addresses delete [ADDRESS_NAME]

ここで、[ADDRESS_NAME] は IP アドレスの名前です。

API

API にリクエストを直接発行するには、次の URI に空のリクエスト本文で DELETE リクエストを送ります。

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/addresses/[ADDRESS_NAME]

ここで:

  • [ADDRESS_NAME] は IP アドレスの名前です。
  • [REGION] はこのリクエストの対象リージョンの名前です。
  • [PROJECT_ID] はこのリクエストのプロジェクト ID です。

インスタンス作成時の内部 IP アドレスの選択

オプションで、インスタンス作成時に特定の内部 IP アドレスを選択してインスタンスに割り当てることができます。インスタンスが属するサブネットの有効な IP アドレスを指定する必要があります。すでに使用中の IP アドレスは指定できません。指定した IP アドレスは、インスタンスを削除するまでインスタンスに関連付けられます。インスタンスを削除すると IP アドレスは解放され、プールに戻されます。インスタンスを停止して再起動しても、そのインスタンスは同じ内部 IP アドレスを保持します。

IP アドレスを指定しない場合は、サブネットまたはネットワークから任意の IP アドレスが自動的に割り当てられます。gcloud コマンドライン ツールまたは API で内部 IP アドレスを指定できます。

gcloud

gcloud compute instances create [INSTANCE_NAME]
     --private-network-ip [IP_ADDRESS]

ここで:

  • [INSTANCE_NAME] は作成するインスタンスの名前です。
  • [IP_ADDRESS] は割り当てる IP アドレスです。

カスタム サブネット モードのネットワークを使用している場合は、--subnet [SUBNET] パラメータを使用してサブネットも指定する必要があります。

API

静的内部 IP アドレスを持つインスタンスを作成するには、Compute Engine API を使用します。新しいインスタンスを作成するためのリクエストを通常どおりに発行しますが、使用する内部 IP を明示的に networkInterfaces[].networkIP プロパティで指定します。次に例を示します。

{
  "name": "[INSTANCE_NAME]",
  "machineType": "zones/us-central1-f/machineTypes/f1-micro"
  "networkInterfaces": [{
    "accessConfigs": [{
      "type": "ONE_TO_ONE_NAT",
      "name": "External NAT",
     }],
    "network": "global/networks/default",
    "networkIP": [IP_ADDRESS]
  }],
  "disks": [{
     "autoDelete": "true",
     "boot": "true",
     "type": "PERSISTENT",
     "initializeParams": {
        "sourceImage": "projects/debian-cloud/global/images/v20150818"
     }
   }]
 }

ここで:

  • [INSTANCE_NAME] はインスタンスの名前です。
  • [IP_ADDRESS] はインスタンスに割り当てる IP アドレスです。

指定した IP アドレスを持つインスタンスを削除すると、その IP アドレスは未割り当てアドレスプールに戻ります。インスタンスの存続期間を超えてその内部 IP アドレスを保持する必要がある場合は、静的内部 IP アドレスを予約できます。

VM インスタンスの外部 IP アクセスの無効化

特定のワークロードでは、セキュリティやネットワークに関する制限など、基本的な要件が必要になることがあります。たとえば、データの不正取得を防止したり、ネットワーク隔離を維持したりするために、VM インスタンスへの外部 IP アドレスによるアクセスを制限したい場合があります。こうした制限は、多くのお客様で一般的であり、必要とされているものです。組織ポリシーを使用し、ポリシー制約を指定することにより、外部 IP のアクセスを無効にすることができます。ポリシー制約を使用すると、組織内またはプロジェクト内の VM インスタンスに対する外部 IP アドレスのアクセスを簡単かつ便利に制御することができます。

VM インスタンスの外部 IP アドレスを制御するための制約は次のとおりです。

constraints/compute.vmExternalIpAccess

制約を使用するには、外部 IP アドレスを持つことのできる VM インスタンスが allowedList に設定されたポリシーを指定します。ポリシーを指定しない場合、すべての VM インスタンスで、すべての外部 IP アドレスが許可されます。ポリシーを指定すると、allowedValues リストに含まれる VM インスタンスのみに対して外部 IP アドレス(エフェメラルまたは静的のいずれか)が割り当てられます。ポリシー内で明示的に定義されていない、組織内またはプロジェクト内の他の Compute Engine の VM インスタンスは、外部 IP アドレスの使用が禁止されます。

許可リストと拒否リストでは、次のようなインスタンスの URL を使用して VM を指定します。

projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]

仕様

  • このリスト型制約は VM インスタンスのみに適用できます。
  • 過去にさかのぼって制約を適用することはできません。ポリシーが有効になる前に外部 IP アドレスを持っていたすべての VM インスタンスは、そのまま外部 IP アドレスを保持します。
  • この制約には、allowedList または deniedList のいずれか一方を指定できます。これら両方を 1 つのポリシーに指定することはできません。
  • インスタンスのライフサイクルと整合性の管理と維持は、適切な権限を持つユーザーまたは管理者の責任です。制約ではインスタンスの URL のみが検証され、ホワイトリストに指定された VM の変更、削除、再作成を防ぐことはできません。

権限

制約をプロジェクトまたは組織のレベルで設定するには、組織での orgpolicy.policyAdmin 役割が付与されている必要があります。

組織レベルでのポリシー制約の設定

外部 IP アクセスの制約を設定するには、組織 ID が必要です。

自分の組織 ID を確認する

Console

ID は Google Cloud Platform Console でも次の方法で確認できます。

  1. Google Cloud Platform Console にログインします。
  2. プロジェクト セレクタをクリックします。

    組織とプロジェクト セレクタのスクリーンショット

  3. 組織を選択し、組織 ID を探します。

    組織 ID のスクリーンショット

gcloud

数値の n を見つけるには、次の gcloud コマンドを実行して ID を探します。

gcloud organizations list

DISPLAY_NAME           ID
example-organization   29252605212

ポリシーの制約を設定する

Console

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

    [組織のポリシー] ページに移動

  2. 必要に応じて、組織をプロジェクト プルダウン メニューから選択します。
  3. [VM インスタンスに対して許可されている外部 IP を定義する] をクリックします。
  4. [編集] をクリックして外部 IP ポリシーを編集します。[編集] ツールにアクセスできない場合は、正しい権限がありません。
  5. 特定の VM インスタンスに対する組織ポリシーを設定するために [カスタマイズ] を選択します。

    組織ポリシーのカスタマイズのスクリーンショット

  6. [ポリシーの適用] と [ポリシータイプ] で目的の値を選択します。

  7. [ポリシーの値] で [カスタム] を選択します。
  8. VM インスタンスの URL の一部分を入力して Enter キーを押します。必要に応じて VM インスタンスの入力を続けます。

    組織ポリシーへの VM インスタンス追加のスクリーンショット

  9. [保存] をクリックして、変更を保存します。

gcloud

ポリシーを設定するには、gcloud resource-manager org-policies set-policy コマンドを使用します。JSON ファイルでポリシーを指定する必要があります。次のような JSON ファイルを作成します。

{
"constraint": "constraints/compute.vmExternalIpAccess",
"listPolicy": {
  "allowedValues": [
     "projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]",
     "projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]",
     "projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]"
  ]
 }
}

ここで:

  • [PROJECT_ID] はこのリクエストのプロジェクト ID で、たとえば example-project となります。これは、組織のポリシーを設定するときとは異なります。組織のポリシーの場合は組織の数値 ID が必要です。
  • [ZONE] はインスタンスのゾーンです。
  • [INSTANCE_NAME] はインスタンス名です。

また、deniedValues リストを使用して、外部 IP アドレスの保持を禁止する VM インスタンスを明示的に指定することもできます。このリストに含まれないすべてのインスタンスは、外部 IP アドレスを持つことが暗黙的に許可されます。allowedValues または deniedValues のいずれか一方を指定できます。両方を指定することはできません。

次に、gcloud のリクエストでこのファイルを渡します。

gcloud beta resource-manager org-policies set-policy my-policy.json --organization [ORGANIZATION_ID]

[ORGANIZATION_ID] は組織の数値 ID です。

どのインスタンスにも外部 IP アクセスを行わないようにするには、ポリシーを設定して allValuesDENY に設定します。

{
"constraint": "constraints/compute.vmExternalIpAccess",
"listPolicy": {
  "allValues": "DENY"
 }
}

API

setOrgPolicy() API を使用して制約を定義します。allowedValue リストに指定した VM は外部 IP アドレスを持つことが許可されます。また、deniedValues リストを使用して、外部 IP アドレスの保持を禁止する VM インスタンスを明示的に指定することもできます。このリストに含まれないすべてのインスタンスは、外部 IP アドレスを持つことが暗黙的に許可されます。allowedValues または deniedValues のいずれか一方を指定できます。両方を指定することはできません。

たとえば、次のリクエストは、組織に compute.vmExternalIpAccess 制約を設定して、組織内の特定のプロジェクトの VM インスタンスに対して外部 IP アドレスを持つことを許可します。

POST https://cloudresourcemanager.googleapis.com/v1/organizations/[ORGANIZATION_ID]:setOrgPolicy

[ORGANIZATION_ID] は組織の数値 ID です。

次に、リクエスト本文の中で、この制約に必要なポリシーを指定します。

{
  "policy": {
    "constraint": "constraints/compute.vmExternalIpAccess",
    "listPolicy": {
      "allowedValues": [
        "projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]",
        "projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]",
        "projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]"
        ]
      }
    }
 }

どのインスタンスにも外部 IP アクセスを行わないようにするには、ポリシーを設定して allValuesDENY に設定します。

{
  "policy": {
    "constraint": "constraints/compute.vmExternalIpAccess",
    "listPolicy": {
      "allValues": DENY
      }
    }
 }

プロジェクト レベルでのポリシーの設定

プロジェクト レベルでポリシーを設定すると、そのポリシーは組織レベルのポリシーよりも優先されます。たとえば、組織レベルでは allowedValues リストに example-vm-1 が含まれており、プロジェクト レベルでは deniedValues リストにこの VM が含まれている場合、この VM インスタンスは外部 IP アドレスを持つことが許可されません。

Console

組織レベルでのポリシー制約の設定と同じ手順を行いますが、プロジェクト セレクタで組織ではなくプロジェクトを選択してください。

プロジェクト セレクタのスクリーンショット

gcloud

ポリシーを設定するには、gcloud beta resource-manager org-policies set-policy コマンドを使用します。JSON ファイルでポリシーを指定する必要があります。次のような JSON ファイルを作成します。

{
 "constraint": "constraints/compute.vmExternalIpAccess",
 "listPolicy": {
  "allowedValues": [
   "projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]"
  ]
 }
}

ここで:

  • [PROJECT_ID] はこのリクエストのプロジェクト ID で、たとえば example-project となります。これは、組織のポリシーを設定するときとは異なります。組織のポリシーの場合は組織の数値 ID が必要です。
  • [ZONE] はインスタンスのゾーンです。
  • [INSTANCE_NAME] はインスタンス名です。

また、deniedValues リストを使用して、外部 IP アドレスの保持を禁止する VM インスタンスを明示的に指定することもできます。このリストに含まれないすべてのインスタンスは、外部 IP アドレスを持つことが暗黙的に許可されます。allowedValues または deniedValues のいずれか一方を指定できます。両方を指定することはできません。

次に、gcloud のリクエストでこのファイルを渡します。

gcloud beta resource-manager org-policies set-policy my-policy.json --project example-project

API

setOrgPolicy() API を使用して制約を定義します。allowedValue リストに指定した VM は外部 IP アドレスを持つことが許可されます。また、deniedValues リストを使用して、外部 IP アドレスの保持を禁止する VM インスタンスを明示的に指定することもできます。このリストに含まれないすべてのインスタンスは、外部 IP アドレスを持つことが暗黙的に許可されます。allowedValues または deniedValues のいずれか一方を指定できます。両方を指定することはできません。

たとえば、次のリクエストは、プロジェクトに compute.vmExternalIpAccess 制約を設定して、特定の VM インスタンスに対して外部 IP アドレスを持つことを許可します。

POST https://cloudresourcemanager.googleapis.com/v1/projects/[PROJECT_ID]:setOrgPolicy

ここで、[PROJECT_ID] はこのリクエストのプロジェクト ID です。

リクエストの本文にはこの制約のポリシーを格納します。

{
 "policy": {
  "constraint": "constraints/compute.vmExternalIpAccess",
  "listPolicy": {
   "allowedValues": [
    "projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]"
   ]
  }
 }
}

おすすめの方法

  • この制約では deniedValues リストの使用を避けることをおすすめします。deniedValues リストに値を定義するということは、deniedValues リストに含まれる VM インスタンスのみに対して外部 IP アドレスの使用を制限するということを意味します。外部 IP アドレスを持つことのできるインスタンスを厳密に制御したい場合、これはセキュリティ上問題になる可能性があります。allowedValues リストから特定のインスタンスを削除する場合、低い階層の deniedValues リストにインスタンスを追加するのではなく、既存のポリシーを更新して allowedList からインスタンスを削除してください。

  • あるポリシーをリソース階層の大部分に適用するが、特定のプロジェクトを除外する場合は、setOrgPolicy メソッドを使用してデフォルトのポリシーを復元します。restoreDefault オブジェクトを指定すると、そのプロジェクト内のすべての VM に外部 IP アドレスとの関連付けが許可されます。プロジェクトに現在適用されているポリシーは、このデフォルトの設定によって影響を受けることはありません。

  • この組織ポリシーと IAM の役割を組み合わせて使用することにより、環境をより適切に管理できます。このポリシーは VM インスタンスにのみ適用されます。ネットワーク デバイスの外部 IP アドレスをより適切に制御、制限するには、該当する部門に対して compute.networkAdmin の役割を付与します。

  • 組織またはプロジェクト内の Compute Engine 上で実行されており、ポリシーが有効になっているすべてのサービスとプロダクトは、この組織ポリシーによって影響を受ける可能性があります。特に、Container Engine、Dataflow、Dataproc、Cloud SQL などのサービスはこのポリシーによって影響を受けます。これによって問題が生じる場合は、組織ポリシーが適用されない別のプロジェクト内に別のサービスやプロダクトをセットアップし、必要に応じてクロスプロジェクト ネットワークを使用することをおすすめします。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Compute Engine ドキュメント