静的外部 IP アドレスを予約する

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

仮想マシン(VM)インスタンス用に静的外部 IP アドレスを予約できます。VM の静的 IP アドレスを変更、一覧表示、解放することもできます。

外部 IP アドレスには、静的なものとエフェメラルなものがあります。変更されない固定外部 IP アドレスが VM に必要な場合、静的外部 IP アドレスを取得できます。新しい外部 IP アドレスを予約することも、既存のエフェメラル外部 IP アドレスを昇格させることもできます。

  • 次のいずれかの外部 IP アドレスを予約するには、静的外部 IP アドレスをご覧ください。

    • グローバル IPv4 または IPv6 アドレスは、グローバル ロードバランサで使用できます。

    • リージョン IPv4 アドレスは、1 つ以上のネットワーク インターフェースを備えた VM インスタンスまたはリージョン ロードバランサで使用できます。

      リージョン ロードバランサとグローバル ロードバランサの一覧については、Google Cloud ロードバランサの概要をご覧ください。

  • VM 用にリージョン外部 IPv6 アドレス(プレビュー)を予約するには、静的リージョン外部 IPv6 アドレスをご覧ください。

内部 Compute Engine ネットワーク上の静的 IP アドレスが必要な場合は、静的内部アドレスの予約をご覧ください。

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

始める前に

静的外部 IP アドレスの使用に関する仕様

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

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

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

  • 静的 IP アドレスの名前は変更できません。

  • 割り当てられた外部 IP アドレスは、VM インスタンスと同じ物理ホストに存在し、ルーティング、レイテンシ、料金を含むすべての目的で VM と同じリージョンに存在します。これは、インターネットの位置情報のルックアップ情報に関係なく当てはまります。

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

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

静的外部 IP アドレス

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

次の手順を行い、次のいずれかの外部 IP アドレスを予約します。

  • グローバル IPv4 または IPv6 アドレスは、グローバル ロードバランサで使用できます。

  • リージョン IPv4 アドレスは、1 つ以上のネットワーク インターフェースを備えた VM インスタンスまたはリージョン ロードバランサで使用できます。

    リージョン ロードバランサとグローバル ロードバランサの一覧については、Google Cloud ロードバランサの概要をご覧ください。

VM にリージョン外部 IPv6 アドレス(プレビュー)を予約するには、静的リージョン外部 IPv6 アドレスをご覧ください。

新しい静的外部 IP アドレスを予約する

アドレスを予約した後、そのアドレスを、作成中の新しいインスタンスに割り当てるか、既存のインスタンスに割り当てます。

Console

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

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

  2. 新しいアドレスの名前を指定します。

  3. このアドレスが IPv4IPv6 のどちらであるかを指定します。グローバル IPv6 アドレスは、グローバル ロードバランサでのみ使用できます。

  4. この IP アドレスがリージョン アドレスかグローバル アドレスかを指定します。インスタンスまたはリージョン ロードバランサに静的 IP アドレスを予約する場合は、[リージョン] を選択します。グローバル ロードバランサに静的 IP アドレスを予約する場合は、[グローバル] を選択します。

  5. リージョン IP アドレスの場合は、アドレスを作成するリージョンを選択します。

  6. (省略可)IP アドレスを割り当てるリソースを選択します。

  7. [予約] をクリックして IP アドレスを予約します。

gcloud

gcloud compute を使用して静的外部 IP アドレスを予約するには、compute addresses create コマンドを使用します。

グローバル IP アドレスを予約する場合は、--global フィールドと --ip-version フィールドを使用します。--ip-version フィールドには IPV4 または IPV6 を指定します。グローバル IPv6 アドレスは、グローバル ロードバランサでのみ使用できます。

ADDRESS_NAME は、このアドレスに付ける名前に置き換えます。

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

リージョン IP アドレスを予約する場合は、--region フィールドを使用します。

gcloud compute addresses create ADDRESS_NAME  \
    --region=REGION

次のように置き換えます。

  • ADDRESS_NAME: このアドレスに付ける名前。
  • REGION: このアドレスを予約するリージョン。IP アドレスを割り当てるリソースと同じリージョンにする必要があります。すべてのリージョン IP アドレスは IPv4 です。

結果を表示するには、compute addresses describe コマンドを使用します。

gcloud compute addresses describe ADDRESS_NAME

API

リージョン IPv4 アドレスを作成するには、リージョン addresses.insert メソッドを呼び出します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/addresses

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

{
  "name": "ADDRESS_NAME"
}

次のように置き換えます。

  • ADDRESS_NAME: アドレスに付ける名前
  • REGION: このリクエストのリージョン名
  • PROJECT_ID: このリクエストのプロジェクト ID

グローバル静的 IPv4 アドレスの場合は、globalAddresses.insert メソッドを呼び出します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/addresses

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

{
  "name": "ADDRESS_NAME"
}

グローバル静的 IPv6 アドレスの場合は、globalAddresses.insert メソッドを呼び出します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/addresses

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

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

addresses.get メソッドを使用して結果を確認します。

Terraform

Terraform モジュールを使用して外部 IP アドレスを作成できます。

次の例では、Terraform の引数に変更可能なサンプル値が含まれています。この例では、3 つのリージョン外部 IPv4 アドレスを作成します。

module "address" {
  source       = "terraform-google-modules/address/google"
  version      = "3.0.0"
  project_id   = var.project_id # Replace this with your service project ID in quotes
  region       = "europe-west1"
  address_type = "EXTERNAL"
  names = [
    "regional-external-ip-address-1",
    "regional-external-ip-address-2",
    "regional-external-ip-address-3"
  ]
}

次の例では、グローバル外部 IPv6 アドレスを作成します。

resource "google_compute_global_address" "default" {
  project      = var.project_id # Replace this with your service project ID in quotes
  name         = "ipv6-address"
  address_type = "EXTERNAL"
  ip_version   = "IPV6"
}

新しい VM へ静的外部 IP アドレスを割り当てる

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

Console

  1. [インスタンスの作成] ページに移動します。

    [インスタンスの作成] に移動

  2. VM の詳細を指定します。

  3. [ネットワーク、ディスク、セキュリティ、管理、単一テナンシー] セクションを開きます。

  4. [ネットワーキング] セクションを開いて、次の操作を行います。

    1. [ネットワーク インターフェース] セクションで、ネットワーク インターフェースを開いて編集します。
    2. [外部 IP] リストで、予約した静的外部 IP アドレスを選択します。
    3. ネットワーク インターフェースの変更を終了するには、[完了] をクリックします。
  5. VM 作成プロセスを続行します。

gcloud

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

gcloud compute instances create VM_NAME --address=IP_ADDRESS

次のように置き換えます。

  • VM_NAME: VM の名前。
  • IP_ADDRESS: インスタンスに割り当てる IP アドレス。アドレス名ではなく予約済みの静的外部 IP アドレスを使用してください。

API

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

{
  "name": "VM_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 アドレスを持つことができます。インスタンスにすでに外部 IP アドレスが与えられている場合は、最初に古いアクセス構成を削除してアドレスを除去する必要があります。その後、新しい外部 IP アドレスを含む新しいアクセス構成を追加します。

Console

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

    [VM インスタンス] に移動

  2. 外部 IP アドレスを割り当てるインスタンスの名前をクリックします。インスタンスの詳細ページが表示されます。
  3. インスタンスの詳細ページで、次の手順を実行します。

    1. [編集] をクリックします。
    2. [ネットワーク インターフェース] で [編集] ボタンをクリックします。

      [編集] ボタンがハイライト表示されたネットワーク インターフェース セクション。

    3. [外部 IP] で、インスタンスに割り当てるエフェメラルまたは静的な外部 IP アドレスを選択します。

      外部 IP オプションがハイライト表示された拡張ネットワーク インターフェースセクション。

    4. [完了] をクリックします。

  4. [保存] をクリックします。

gcloud

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

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

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

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

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

    gcloud compute instances describe VM_NAME
    

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

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

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

    gcloud compute instances delete-access-config VM_NAME \
        --access-config-name="ACCESS_CONFIG_NAME"
    

    次のように置き換えます。

    • VM_NAME: VM の名前。
    • ACCESS_CONFIG_NAME: 削除するアクセス構成ファイル。引用符の中に完全な名前を指定してください。
  3. 新しい外部 IP アドレスを追加します。

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

    注: IP_ADDRESS を静的 IP の名前に置き換えないでください。実際の IP アドレスを指定する必要があります。
    gcloud compute instances add-access-config VM_NAME \
       --access-config-name="ACCESS_CONFIG_NAME" --address=IP_ADDRESS
    

    次のように置き換えます。

    • VM_NAME: VM の名前。
    • ACCESS_CONFIG_NAME: このアクセス構成ファイルの名前。引用符の中に完全な名前を指定してください。
    • IP_ADDRESS: 追加する IP アドレス。

    Compute Engine で静的外部 IP アドレスを使用せずにエフェメラル外部 IP アドレスを割り当てる場合は、--address IP_ADDRESS プロパティを省略します。

    gcloud compute instances add-access-config VM_NAME \
        --access-config-name="ACCESS_CONFIG_NAME"
    

API

You can change the external IP address of a VM by adding a new access
configuration for that VM.
  1. VM に既存のアクセス構成があるかどうかを確認します。VM の詳細を確認するには、instances.get メソッドGET リクエストを行います。

     GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
     

    次のように置き換えます。

    • PROJECT_ID: このリクエストのプロジェクト ID
    • ZONE: VM を配置するゾーン。
    • VM_NAME: VM の名前。既存のアクセス構成がある場合、レスポンスは次のようになります。
    "networkInterfaces": [
      {
        "network":
        ...
        "networkIP": "192.0.2.1",
        "name": "nic0",
        "accessConfigs": [
          {
            "type": "ONE_TO_ONE_NAT",
            "name": "External NAT",
            "natIP": "203.0.113.1",
            "networkTier": "PREMIUM",
            "kind": "compute#accessConfig"
          }
        ],
        ...
      }
    ]
    

    networkInterfaces[].accessConfigs[].natIP フィールドに、VM の静的外部 IP アドレスが返されます。

  2. 既存のアクセス構成を削除するには、instances.deleteAccessConfig メソッドPOST リクエストを発行します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/deleteAccessConfig
    
  3. instances.addAccessConfig メソッドPOST リクエストを発行し、VM インスタンスのネットワーク インターフェースに新しいアクセス構成を追加します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/addAccessConfig
    {
    "natIP": "IP_ADDRESS",
    "name": "ACCESS_CONFIG_NAME"
    }
    

    次のように置き換えます。

    • IP_ADDRESS: インスタンスに関連付ける外部 IP アドレス。プロジェクトで使用可能な、未使用の予約済み静的外部 IP アドレスを指定します。
    • ACCESS_CONFIG_NAME: アクセス構成の名前。デフォルトかつ推奨される名前は external-nat です。

エフェメラル外部 IP アドレスを昇格させる

インスタンスにエフェメラル外部 IP アドレスがあり、その IP アドレスを永続的にプロジェクトに割り当てたい場合は、エフェメラル外部 IP アドレスを静的外部 IP アドレスに昇格させます。エフェメラル外部 IP アドレスを予約済みに昇格しても、Google Cloud ではインスタンスに送信されたパケットは破棄されません。これは、インスタンスに直接送信されたパケットとロードバランサによって送信されたパケットの両方に当てはまります。

Console

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

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

  2. 静的に昇格させる IP アドレスと同じ行で [予約] をクリックします。
  3. 新しい静的 IP アドレスの名前を指定して [予約] をクリックします。

gcloud

エフェメラル外部 IP アドレスを静的外部 IP アドレスに昇格させるには、--addresses フラグにエフェメラル外部 IP アドレスを指定して compute addresses create コマンドを実行します。エフェメラル リージョン IP アドレスを昇格させる場合は region フラグ、エフェメラル グローバル IP アドレスを昇格させる場合は global フラグを使用します。

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

次のように置き換えます。

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

API

エフェメラル リージョン IP アドレスを昇格させるには、addresses.insert メソッドを呼び出します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/addresses

エフェメラル グローバル IP アドレスを昇格させるには、次の URI に POST リクエストを送信します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/addresses

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

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

次のように置き換えます。

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

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

静的外部 IP アドレスを一覧表示する

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

Console

プロジェクトの IP アドレスのリストを表示するには、[外部 IP アドレス] ページに移動します。

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

gcloud

compute addresses list コマンドを使用します。

gcloud compute addresses list

API

addresses.list メソッドを呼び出します。

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/addresses

次のように置き換えます。

  • REGION: このリクエストのリージョン名
  • PROJECT_ID: このリクエストのプロジェクト ID

すべてのリージョンのアドレスを一覧表示するには、aggregatedList メソッドを呼び出します。

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/aggregated/addresses

静的外部 IP アドレスを取得する

静的外部 IP アドレスに関する情報を取得するには、Console、gcloud CLI、または API を使用します。

Console

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

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

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

gcloud

addresses describe コマンドを使用します。ADDRESS_NAME は、指定する外部 IP アドレスの名前に置き換えます。

gcloud compute addresses describe ADDRESS_NAME

API

addresses.get メソッドを呼び出します。

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/addresses/ADDRESS_NAME

次のように置き換えます。

  • ADDRESS_NAME: IP アドレスの名前
  • REGION: このリクエストのリージョン名
  • PROJECT_ID: リクエストのプロジェクト ID

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

静的外部 IP アドレスの割り当てを解除するには、Google Cloud コンソール を使用して IP アドレスの割り当てを変更するか、そのアドレスを使用している VM のアクセス構成を削除します。インスタンスを削除して、IP アドレスの割り当てを解除することもできます。 静的外部 IP アドレスの割り当てを解除すると、その静的外部 IP アドレスを別のリソースに再割り当てできます。

IP アドレスの割り当てを解除すると、その IP アドレスはリソースから削除されますが、引き続きプロジェクトに予約されたままになります。

Console

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

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

  2. 割り当てを解除する静的 IP アドレスを選択します。
  3. [変更] をクリックして [IP アドレスの接続] ダイアログを開きます。
  4. [接続先] プルダウン リストから [なし] を選択します。
  5. [OK] をクリックします。

gcloud

静的 IP アドレスが使用中かどうかを確認するには、gcloud compute addresses list コマンドを実行します。

gcloud compute addresses list

出力は次のようになります。

NAME                 REGION    ADDRESS            STATUS
example-address      REGION    198.51.100.1       RESERVED
example-address-new  REGION    203.0.113.1        IN_USE

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

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

  1. 削除するアクセス構成の名前を取得します。名前を取得するには、gcloud compute instances describe コマンドを使用します。 VM_NAME は VM の名前で置き換えます。

    gcloud compute instances describe VM_NAME
    

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

    networkInterfaces:
       - accessConfigs:
         - kind: compute#accessConfig
           name: external-nat
           natIP: 203.0.113.1
           type: ONE_TO_ONE_NAT
    
  2. アクセス構成を削除します。

    gcloud compute instances delete-access-config コマンドを実行します。

    gcloud compute instances delete-access-config VM_NAME \
    --access-config-name="ACCESS_CONFIG_NAME"
    

    次のように置き換えます。

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

    gcloud compute addresses list
    

    例:

    NAME                 REGION      ADDRESS           STATUS
    example-address      REGION      198.51.100.1      RESERVED
    example-address-new  REGION      203.0.113.1       RESERVED
    

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

API

静的外部 IP アドレスの割り当てを解除するには、そのアドレスを使用している VM のアクセス構成を削除します。

  1. VM のアクセス構成の詳細を確認するには、instances.get メソッドGET リクエストを発行します。

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
    
  2. 既存のアクセス構成を削除するには、instances.deleteAccessConfig メソッドPOST リクエストを発行します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/deleteAccessConfig
    

    次のように置き換えます。

    • PROJECT_ID: このリクエストのプロジェクト ID
    • ZONE: VM を配置するゾーン。
    • VM_NAME: VM の名前

静的外部 IP アドレスを解放する

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

コンソール

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

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

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

gcloud

compute addresses delete コマンドを使用します。

gcloud compute addresses delete ADDRESS_NAME

ADDRESS_NAME は、解放する IP アドレスの名前に置き換えます。

API

addresses.delete メソッドを呼び出します。

DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/addresses/ADDRESS_NAME

次のように置き換えます。

  • ADDRESS_NAME: IP アドレスの名前
  • REGION: このリクエストのリージョン名
  • PROJECT_ID: このリクエストのプロジェクト ID

静的リージョン外部 IPv6 アドレス

IPv6 外部範囲のあるデュアルスタック サブネットがある場合、そのサブネットから静的 IPv6 アドレスを予約できます。

リージョン外部 IPv6 アドレスを予約すると、指定したサブネットから /96 IPv6 アドレス範囲が割り当てられます。予約したアドレスを使用すると、静的リージョン IPv6 アドレスを使用してデュアルスタック VM を構成できます。静的 IPv6 アドレスの構成は nic0 でのみサポートされています。

静的 IPv6 アドレスを使用する VM を構成する場合は、以下の内容に該当します。

  • VM インターフェースは、割り当てられた /96 範囲の最初の IPv6 アドレス(/128)で構成されます。

  • VM は、fe80::/10 範囲から割り当てられたリンク ローカル IP アドレスで構成されますが、このアドレスはネイバー検出にのみ使用されます。

  • VM のネットワーク インターフェースの MTU 構成は、IPv4 と IPv6 の両方のパケットに適用されます。

静的リージョン外部 IPv6 アドレスを構成して管理するには、次の手順を行います。

制限事項

VPC ネットワークが共有 VPC サービス プロジェクトにある場合、ホスト プロジェクトの共有サブネットから静的リージョン外部 IPv6 アドレスを予約することはできません。静的リージョン外部 IPv6 アドレスは、独自の VPC ネットワーク内のサブネットからのみ予約できます。

新しい静的リージョン外部 IPv6 アドレスを予約する

リージョン外部 IPv6 アドレスを予約すると、指定したサブネットから /96 範囲が割り当てられます。

gcloud alpha compute addresses create ADDRESS_NAME  \
    --region=REGION \
    --subnet=SUBNET \
    --ip-version=IPV6 \
    --endpoint-type=VM

以下を置き換えます。

  • ADDRESS_NAME: アドレスの名前。
  • REGION: アドレスのリージョン。
  • SUBNET: 静的リージョン IPv6 アドレスの割り当て元のサブネット。サブネットには、割り当てられた外部 IPv6 アドレス範囲が必要です。

静的リージョン外部 IPv6 アドレスを一覧表示する

静的リージョン外部 IPv6 アドレスは、Google Cloud コンソール には予約済みアドレスとして表示されません。アドレスを表示するには、Google Cloud CLI を使用します。

gcloud compute addresses list \
    --regions=REGION

REGION は、アドレスを一覧表示するリージョンに置き換えます。

静的リージョン外部 IPv6 アドレスを記述する

静的リージョン外部 IPv6 アドレスは、Google Cloud コンソール には予約済みアドレスとして表示されません。割り当てられた /96 IPv6 アドレス範囲を表示するには、Google Cloud CLI を使用します。

gcloud compute addresses describe ADDRESS_NAME \
    --region=REGION

以下を置き換えます。

  • ADDRESS_NAME: アドレスの名前。
  • REGION: アドレスのリージョン。

静的リージョン外部 IPv6 アドレスを新しい VM に割り当てる

VM を作成し、既に予約した静的リージョン外部 IPv6 アドレスを割り当てることができます。VM は、予約した IPv6 アドレスと同じリージョンとサブネットを使用して構成する必要があります。

gcloud alpha compute instances create VM_NAME \
    --subnet=SUBNET \
    --stack-type=IPV4_IPV6 \
    --ipv6-address=IPV6_ADDRESS \
    --ipv6-prefix-length=96 \
    --ipv6-network-tier=PREMIUM \
    --zone=ZONE

次のように置き換えます。

  • VM_NAME: VM の名前。
  • SUBNET: 予約したアドレスを含むサブネット。
  • IPV6_ADDRESS: VM に割り当てる IPv6 アドレス。/96 範囲に存在する最初の IPv6 アドレスを指定します。
  • ZONE: VM のゾーン。

エフェメラル リージョン外部 IPv6 アドレスを昇格させる

エフェメラル リージョン外部 IPv6 アドレスを静的リージョン外部 IPv6 アドレスに昇格させるには、compute addresses create コマンド--addresses フラグを使用してエフェメラル外部 IP アドレスを指定します。

gcloud alpha compute addresses create ADDRESS_NAME \
    --region=REGION \
    --addresses=IPV6_ADDRESS \
    --prefix-length=96

次のように置き換えます。

  • ADDRESS_NAME: IP アドレス リソースの名前
  • REGION: IPv6 アドレス リソースのリージョン
  • IPV6_ADDRESS: 昇格させる IPv6 アドレス

既存のインスタンスの外部 IPv6 アドレス構成を変更する

既存の VM を変更して、外部 IPv6 アドレス構成を追加または削除できます。

  • 現在の IPv6 の構成を表示するには、VM を確認します。

    gcloud compute instances describe リクエストを行い、インスタンスに IPv6 構成が存在するかどうかを確認します。

    gcloud compute instances describe VM_NAME \
        --region=REGION
    

    次のように置き換えます。

    • VM_NAME: VM の名前
    • ZONE: VM のゾーン

    外部 IPv6 アドレスが nic0 にすでに割り当てられている場合は、次のフォーマットに構成が表示されます。

    networkInterfaces:
      ...
      ipv6AccessConfigs:
      - externalIpv6: 2001:db8:4000:15:0:0:0:0
        externalIpv6PrefixLength: 96
        kind: compute#accessConfig
        name: external-ipv6
        networkTier: PREMIUM
        type: DIRECT_IPV6
      ipv6AccessType: EXTERNAL
      kind: compute#networkInterface
      name: nic0
    
  • 外部 IPv6 の構成を削除するには、スタック タイプをデュアルスタックからシングルスタックに変更します。

    instance network-interfaces update サブコマンドを使用して、既存の IPv6 アドレスの構成を削除します。

    gcloud alpha compute instances network-interfaces update VM_NAME \
        --network-interface=nic0 \
        --stack-type=IPV4_ONLY \
        --zone=ZONE
    

    次のように置き換えます。

    • VM_NAME: VM の名前
    • ZONE: VM のゾーン
  • 静的リージョン外部 IPv6 アドレスを割り当てるには、スタック型をシングル スタックからデュアルスタックに変更します。アドレスを割り当てる前に、VM にまだ外部 IPv6 構成がないことを確認してください。

    1. 静的外部 IPv6 アドレスを予約します。

      静的リージョン外部 IPv6 アドレスを割り当てる場合は、他のリソースで使用されていないアドレスを取得して、アドレスを予約する必要があります。予約する IPv6 アドレスは、VM と同じリージョンとサブネットに存在する必要があります。

    2. 静的リージョン IPv6 アドレスを追加するには、次のようにします。

      instance network-interfaces update サブコマンドを使用して新しい外部 IP アドレスを追加します。

      gcloud alpha compute instances network-interfaces update VM_NAME \
        --network-interface=nic0 \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV4_IPV6 \
        --ipv6-address=IPV6_ADDRESS \
        --ipv6-prefix-length=96 \
        --zone=ZONE
      

      次のように置き換えます。

      • VM_NAME: VM の名前
      • IPV6_ADDRESS: VM に割り当てる IPv6 アドレス。/96 範囲に存在する最初の IPv6 アドレスを指定します。
      • ZONE: VM のゾーン

静的リージョン外部 IPv6 アドレスの割り当てを解除する

静的リージョン外部 IPv6 アドレスの割り当てを解除するには、インスタンスを削除するか、インスタンスのスタック型を IPv4 のみに変更します。静的 IP アドレスの割り当てを解除すると、アドレスはリソースから削除されますが、IP アドレスは予約されたままになります。

予約を削除したい場合は、静的リージョン外部 IPv6 アドレスを解放します。

  1. compute addresses describe コマンドを使用して、IP アドレス リソースのステータスを確認します。

    gcloud compute addresses describe ADDRESS_NAME \
        --region=REGION
    

    次のように置き換えます。

    • ADDRESS_NAME: IPv6 アドレス リソースの名前
    • REGION: IPv6 アドレス リソースのリージョン

    出力は次のようになります。

    address: IPV6_ADDRESS
    addressType: EXTERNAL
    creationTimestamp: 'TIMESTAMP'
    description: 'DESCRIPTION'
    id: ID
    ipVersion: IPV6
    kind: compute#address
    name: ADDRESS_NAME
    networkTier: PREMIUM
    prefixLength: 96
    region: https://www.googleapis.com/compute/v1/projects/PROJECT/regions/REGION
    selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/addresses/ADDRESS_NAME
    status: IN_USE
    subnetwork: https://www.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/subnetworks/SUBNET
    users:
    - https://www.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/instances/VM_NAME
    
    • IP アドレスが使用されていない場合、statusRESERVED です。
    • IP アドレスが使用されている場合、statusIN_USE であり、users フィールドに IP アドレスを使用している VM が表示されます。
  2. IP アドレスが使用されている場合、instance network-interfaces update コマンドを使用して、VM から静的リージョン外部 IPv6 アドレスの割り当てを解除します。

    gcloud alpha compute instances network-interfaces update VM_NAME \
        --network-interface=nic0 \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV4_ONLY \
        --zone=ZONE
    

    次のように置き換えます。

    • VM_NAME: IP アドレスを使用している仮想マシン インスタンスの名前
    • ZONE: インスタンスのゾーン
  3. 静的外部 IPv6 アドレスのステータスが IN_USE から RESERVED に変わり、使用可能になったことを確認します。

    gcloud compute addresses list \
        --filter="ADDRESS_NAME AND region=REGION"
    

    以下を置き換えます。

    • ADDRESS_NAME: IPv6 アドレス リソースの名前。
    • REGION: IPv6 アドレス リソースのリージョン。

静的リージョン外部 IPv6 アドレスを解放する

予約した IPv6 アドレスがそれ以上必要ない場合は、解放できます。解放されたアドレスは、サブネット内のエフェメラル アドレスのプールに戻され、その他のリソースで使用できます。

compute addresses delete コマンドを使用します。

gcloud compute addresses delete ADDRESS_NAME

ADDRESS_NAME は、解放する IPv6 アドレスの名前に置き換えます。

外部 IP アドレスを特定の VM に制限する

特定のワークロードでは、セキュリティやネットワークに関する制限など、基本的な要件が必要になることがあります。たとえば、特定の VM のみが使用できるように外部 IP アドレスを制限できます。このオプションは、データの引き出しの防止や、ネットワーク分離の維持に役立ちます。組織ポリシーを使用すると、外部 IP アドレスを特定の VM に制限し、組織内またはプロジェクト内の VM インスタンスに対する外部 IP アドレスのアクセスを制御できます。

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

constraints/compute.vmExternalIpAccess

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

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

projects/PROJECT_ID/zones/ZONE/instances/VM_NAME

外部 IP アドレスを制限するための仕様

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

外部 IP アドレスを制限するために必要な権限

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

組織レベルでポリシー制約を設定する

コンソール

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

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

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

    組織のポリシーの編集ページのカスタマイズ オプション。

  6. 必要な [ポリシーの適用] と [ポリシーの種類] を選択します。

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

  8. VM の URI を入力し、Enter キーを押します。URI は、次の形式にする必要があります。

    projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
    
  9. [新しいポリシーの値] をクリックし、必要に応じて VM の URI を入力します。

  10. [保存] をクリックして、制約を適用します。

gcloud

外部 IP アクセスの制約を設定するには、組織 ID が必要です。組織 ID を確認するには、organizations list コマンドを実行して、そのレスポンスで数値 ID を探します。

gcloud organizations list

gcloud CLI は、組織のリストを次の形式で返します。

DISPLAY_NAME               ID
example-organization1      29252605212
example-organization2      1234567890

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

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

次のように置き換えます。

  • PROJECT_ID。このリクエストのプロジェクト ID(example-project など)。これは、組織のポリシーを設定するときとは異なります。組織のポリシーの場合は組織の数値 ID が必要です。
  • ZONE: インスタンスのゾーン
  • VM_NAME: 仮想マシン インスタンスの名前

また、外部 IP アドレスの取得を明示的に禁止する VM インスタンスを示す deniedValues リストを指定できます。このリストに含まれないすべてのインスタンスは、外部 IP アドレスを持つことが暗黙的に許可されます。allowedValues または deniedValues のどちらか一方だけ指定できます。

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

gcloud resource-manager org-policies set-policy MY_POLICY.JSON --organization=ORGANIZATION_ID

ORGANIZATION_ID は、組織の数値 ID に置き換えます。

外部 IP アクセスを必要としない VM の場合は、allValues 設定のポリシーを DENY に設定できます。

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

API

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

たとえば、以下は、組織内の特定のプロジェクトの VM インスタンスが外部 IP アドレスを持つことができるように、compute.vmExternalIpAccess 制約を組織に適用するリクエストです。

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/VM_NAME",
        "projects/PROJECT_ID/zones/ZONE/instances/VM_NAME",
        "projects/PROJECT_ID/zones/ZONE/instances/VM_NAME"
        ]
      }
    }
 }

外部 IP アクセスを必要としないインスタンスの場合は、allValues 設定のポリシーを DENY に設定できます。

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

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

プロジェクト レベルでポリシーを設定すると、そのポリシーは組織レベルのポリシーよりも優先されます。たとえば、組織レベルでは allowedValues リストに example-vm-1 があり、プロジェクト レベルのポリシーで同じ VM が deniedValues リストにある場合、VM に外部 IP アドレスを割り当てることはできません。

コンソール

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

プロジェクト セレクタ。

gcloud

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

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

次のように置き換えます。

  • PROJECT_ID。このリクエストのプロジェクト ID(example-project など)。これは、組織のポリシーを設定するときとは異なります。組織のポリシーの場合は組織の数値 ID が必要です。
  • ZONE: インスタンスのゾーン。
  • VM_NAME: 仮想マシン インスタンスの名前。

また、外部 IP アドレスの取得を明示的に禁止する VM の deniedValues リストを指定できます。このリストに含まれないすべてのインスタンスは、外部 IP アドレスを持つことが暗黙的に許可されます。allowedValues または deniedValues のどちらか一方だけ指定できます。

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

gcloud resource-manager org-policies set-policy MY_POLICY.JSON --project=example-project

API

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

次の例は、特定の VM が外部 IP アドレスを持つことを許可するように compute.vmExternalIpAccess 制約をプロジェクトに設定するリクエストです。

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/VM_NAME"
      ]
    }
  }
}

外部 IP アドレスを制限するためのベスト プラクティス

  • この制約では deniedValues リストを使用しないでください。deniedValues リストで値を定義した場合、deniedValues リストにある VM は、外部 IP アドレスの使用が制限されます。外部 IP アドレスの使用が許可される VM を正確に制御したい場合、これはセキュリティ上の問題になる可能性があります。特定の VM を allowedValues リストから削除する場合は、deniedValues リストに VM を配置するのではなく、allowedList から VM を削除するように既存のポリシーを更新します。

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

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

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

次のステップ