静的内部 IP アドレスを構成する


このページでは、Compute Engine 仮想マシン(VM)インスタンスの静的内部 IPv4 または IPv6 アドレスを構成して管理する方法について説明します。

変更されない固定内部 IP アドレスが VM インスタンスに必要な場合、次のいずれかのオプションを使用して VM の静的内部 IP アドレスを取得できます。

セカンダリ内部 IP アドレスの管理方法については、エイリアス IP 範囲をご覧ください。

Compute Engine では、各 VM インスタンスが複数のネットワーク インターフェースを持つことができます。各インターフェースには、1 つの外部 IP アドレス、1 つのプライマリ内部 IP アドレス、および 1 つまたは複数のセカンダリ内部 IP アドレスを設定できます。IP アドレスの詳細については、IP アドレスのドキュメントをご覧ください。

静的内部 IP アドレスを使用すると、VM を削除して再作成する場合でも、VM に同じ IP アドレスを使用できます。

内部 IP アドレスではなく静的外部 IP アドレスを構成するには、静的外部 IP アドレスを構成するをご覧ください。

始める前に

  • IP アドレスの詳細をご覧ください。
  • まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. Terraform

      ローカル開発環境でこのページの Terraform サンプルを使用するには、gcloud CLI をインストールして初期化し、ユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定します。

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      詳細については Set up authentication for a local development environment をご覧ください。

      REST

      このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      詳細については、Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。

必要なロール

静的 IP アドレスの構成と管理に必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

これらの事前定義ロールには、静的 IP アドレスの構成と管理に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

静的 IP アドレスの構成と管理には、次の権限が必要です。

  • VM インスタンスに対する compute.instances.update
  • VM インスタンスに対する compute.instances.updateNetworkInterface
  • VM インスタンスに対する compute.instances.addAccessConfig
  • VM インスタンスに対する compute.instances.deleteAccessConfig
  • ネットワークに対する compute.networks.list
  • サブネットに対する compute.subnetworks.use
  • サブネットに対する compute.subnetworks.list
  • VM を作成する:
    • プロジェクトに対する compute.instances.create
    • カスタム イメージを使用して VM を作成する: イメージに対する compute.images.useReadOnly
    • スナップショットを使用して VM を作成する: スナップショットに対する compute.snapshots.useReadOnly
    • インスタンス テンプレートを使用して VM を作成する: インスタンス テンプレートに対する compute.instanceTemplates.useReadOnly
    • レガシー ネットワークを VM に割り当てる: プロジェクトに対する compute.networks.use
    • VM の静的 IP アドレスを指定する: プロジェクトに対する compute.addresses.use
    • レガシー ネットワークの使用時に VM に外部 IP アドレスを割り当てる: プロジェクトに対する compute.networks.useExternalIp
    • VM のサブネットを指定する: プロジェクトまたは選択したサブネットに対する compute.subnetworks.use
    • VPC ネットワークの使用時に VM に外部 IP アドレスを割り当てる: プロジェクトまたは選択したサブネットに対する compute.subnetworks.useExternalIp
    • VM の VM インスタンス メタデータを設定する: プロジェクトに対する compute.instances.setMetadata
    • VM にタグを設定する: VM に対する compute.instances.setTags
    • VM にラベルを設定する: VM に対する compute.instances.setLabels
    • VM が使用するサービス アカウントを設定する: VM に対する compute.instances.setServiceAccount
    • VM に新しいディスクを作成する: プロジェクトに対する compute.disks.create
    • 既存のディスクを読み取り専用モードまたは読み取り / 書き込みモードでアタッチする: ディスクに対する compute.disks.use
    • 既存のディスクを読み取り専用モードでアタッチする: ディスクに対する compute.disks.useReadOnly

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

制限事項

  • 既存のリソースの内部 IPv4 アドレスの割り当てを解除したり、変更することはできません。たとえば、実行中または停止している VM インスタンスに新しい静的内部 IP アドレスを割り当てることはできません。ただし、リソースのエフェメラル内部 IP アドレスを静的内部 IP に昇格させることは可能で、その場合はリソースが削除された後もアドレスの予約状態は継続されます。

  • 予約できる静的内部 IP アドレスの数は、プロジェクトの割り当てを超えることはできません。詳細は、VPC ドキュメントの、プロジェクトごとの割り当てをご覧ください。

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

  • 静的内部 IP アドレスの予約は VPC ネットワークでのみサポートされています。レガシーモードのネットワークではサポートされていません。

  • リソースを削除しても静的内部 IP アドレスは自動的に解放されません。静的内部 IP アドレスが不要になったら手動で解放する必要があります。

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

  • 静的内部 IP アドレスはリージョン アドレスであり、予約したリージョンに制限されます。たとえば、Region A に静的内部 IP アドレスが予約されている場合は、Region A の IP アドレスのみを使用できます。

静的内部 IP アドレスを構成する方法

静的内部 IP アドレスを予約してから、VM の作成時に予約済みアドレスを指定できます。エフェメラル内部 IP アドレスを使用して VM を作成し、そのエフェメラル IP アドレスを静的内部 IP アドレスに昇格させることもできます。

静的内部 IP アドレスを使用するには、プロジェクトに VPC ネットワークが存在している必要があります。プロジェクトの VPC ネットワークを表示するには、VPC ネットワークを表示するをご覧ください。

静的内部 IPv4 アドレスまたは IPv6 アドレスを予約して特定の VM に関連付ける

このシナリオでは、静的内部 IP アドレスを予約してから VM に割り当てます。

  1. VPC ネットワークでサブネットを選択します。IPv6 アドレスの場合は、デュアルスタック サブネットであることを確認します。

  2. サブネットのプライマリ IP 範囲から内部 IP アドレスを予約します。このステップでは、特定の内部 IP アドレスを含む名前付き内部 IP アドレス リソースを作成します。IP アドレスを予約すると、Google Cloud がそのアドレスをエフェメラル アドレスとして自動的に割り振ることがなくなります。

  3. 予約済みの内部 IP アドレスは、VM リソースの作成時に VM インスタンスに関連付けて使用します。

VM のエフェメラル内部 IPv4 または IPv6 アドレスを指定して昇格させる

このシナリオでは、VM に接続されているエフェメラル内部 IPv4 アドレスまたは IPv6 アドレスを昇格させます。

  1. VPC ネットワークでサブネットを選択します。IPv6 アドレスの場合は、デュアルスタック サブネットであることを確認します。

  2. 自動的に割り振られたエフェメラル IPv4 アドレスまたは IPv6 アドレス、または特定の IPv4 アドレスを使用して VM インスタンスを作成します。

  3. エフェメラル内部 IP アドレスを静的アドレスに昇格します。

図 1 に、この 2 つの方法の概要を示します。

内部 IP アドレスの予約状態。
図 1. 内部 IP アドレスの予約状態(クリックして拡大)

使用可能な静的内部 IP アドレスを表示する

既存のすべての静的内部 IP アドレスを表示するには、次の手順を完了します。

コンソール

  1. Google Cloud コンソールで、[IP アドレス] ページに移動します。

    [IP アドレス] に移動

  2. [内部 IP アドレス] をクリックします。

gcloud

gcloud compute addresses list コマンドを実行します。

gcloud compute addresses list

API

addresses.list メソッドを使用します。

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

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

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

すべてのリージョンのすべてのアドレスを一覧取得するには、addresses.aggregatedList メソッドを使用します。

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

内部 IP アドレスの割り当て方法

VM のネットワーク インターフェースには、接続先のサブネットから IP アドレスが割り当てられます。各ネットワーク インターフェースには、サブネットのプライマリ IPv4 の範囲から割り当てられた 1 つのプライマリ内部 IPv4 アドレスがあります。VM が内部 IPv6 範囲を持つデュアルスタック サブネットに接続されている場合は、各ネットワーク インターフェースに内部 IPv6 アドレスを割り当てることができます。

内部 IPv4 アドレスは、次の方法で割り当てることができます。

  • Compute Engine は、プライマリ IPv4 サブネット範囲から単一の IPv4 アドレスを自動的に割り当てます。
  • VM インスタンスの作成時に特定の内部 IPv4 アドレスを割り当てることができます。または、プロジェクトに静的内部 IPv4 アドレスを予約し、そのアドレスを VM のネットワーク インターフェースに割り当てることもできます。

内部 IPv6 アドレスは、次の方法で割り当てることができます。

  • Compute Engine は、IPv6 サブネット範囲から単一の /96 範囲を自動的に割り当てます。
  • サブネットの内部 IPv6 範囲から静的内部 IPv6 アドレス範囲を予約して、VM ネットワーク インターフェースに割り当てることができます。

リソースの作成時に予約済みの静的内部 IP アドレスを使用する

静的内部 IP アドレスを予約した後、VM または内部ロードバランサの作成時に予約済みアドレスを割り振ることができます。

次の手順では、リソースの作成時に静的内部 IP アドレスを使用する方法について説明します。

予約済みの内部 IPv4 または IPv6 アドレスを使用して VM インスタンスを作成する

予約済みの静的内部 IPv6 アドレスを指定せずに内部 IPv6 の範囲を持つデュアルスタック サブネットに接続された VM を作成すると、Compute Engine は、サブネットの IPv6 範囲からエフェメラル内部 IPv6 アドレスを VM に自動的に割り当てます。

コンソール

  1. Google Cloud コンソールで、[VM インスタンスを作成] ページに移動します。

    [VM インスタンスを作成] に移動

  2. [詳細オプション] セクションを開きます。

  3. [ネットワーキング] セクションを開きます。

  4. IPv4 アドレスを割り当てるには、次の操作を行います。

    1. ネットワークとサブネットワークを選択します。
    2. [プライマリ内部 IPv4 アドレス] リストから予約済みの内部 IPv4 アドレスを選択します。

    または、[静的内部 IP アドレスを予約] を選択して、新しい静的内部 IPv4 アドレスを予約します。

  5. IPv6 アドレスを割り当てるには、次の操作を行います。

    1. IPv6 サブネットを含むネットワークを選択します。
    2. [サブネットワーク] リストからデュアルスタック サブネットを選択します。サブネットには INTERNAL IPv6 アクセスタイプが必要です。
    3. [IP スタックタイプ] には、[IPv4 と IPv6(デュアルスタック)] を選択します。
    4. [プライマリ内部 IPv6 アドレス] リストから予約済みの内部 IPv6 アドレスを選択します。

    または、[静的内部 IPv6 アドレスを予約] を選択して、新しい静的内部 IPv6 アドレスを予約します。

  6. ネットワーク インターフェースの変更を終了するには、[完了] をクリックします。

  7. VM 作成プロセスを続行します。

  8. [作成] をクリックします。

gcloud

  • instances create コマンドを使用して、予約済みの内部 IPv4 アドレスを持つ VM インスタンスを作成し、--private-network-ip フラグを使用して IP アドレスを指定します。

    gcloud compute instances create VM_NAME
        --private-network-ip IP_ADDRESS
    

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

    • VM_NAME: 作成する VM の名前。
    • IP_ADDRESS: 割り当てる IP アドレス。

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

  • 予約済みの内部 IPv6 アドレスを持つインスタンスを作成するには、--internal-ipv6-address フラグを使用して IP アドレスを指定します。

    gcloud compute instances create VM_NAME
        --subnet SUBNETWORK
        --stack-type IPV4_IPV6
        --internal-ipv6-address INTERNAL_IPV6_ADDRESS
        --zone ZONE
    

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

    • VM_NAME: 作成する VM の名前。
    • SUBNETWORK: 内部 IPv6 アドレスのサブネット。
    • INTERNAL_IPV6_ADDRESS: /96 IPv6 アドレス、IP アドレス名、またはアドレス リソースの URI のいずれか。この IP アドレスは、使用する前に予約する必要があります。
    • ZONE: VM のゾーン。

REST

静的内部 IP アドレスを持つ VM インスタンスを作成するには、instances.insert メソッドを使用します。

  • 内部 IPv4 アドレスの場合は、VM に割り当てる内部 IPv4 アドレスを networkInterfaces[].networkIP プロパティに明示的に指定します。

    次に例を示します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    
    {
    "name": "VM_NAME",
    "machineType": "zones/us-central1-f/machineTypes/e2-micro",
    "networkInterfaces": [{
      "accessConfigs": [{
        "type": "ONE_TO_ONE_NAT",
        "name": "External NAT",
      }],
      "network": "global/networks/default",
      "networkIP": "IPV4_ADDRESS"
    }],
    "disks": [{
      "autoDelete": "true",
      "boot": "true",
      "type": "PERSISTENT",
      "initializeParams": {
          "sourceImage": "projects/debian-cloud/global/images/v20150818"
      }
    }]
    }

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

    • PROJECT_ID: VM を作成するプロジェクトの ID。
    • ZONE: VM を作成するゾーン。
    • VM_NAME: 仮想マシンの名前。
    • IPV4_ADDRESS: VM に割り当てる IPv4 アドレス。
  • 内部 IPv6 アドレスの場合は、次のプロパティの値を明示的に指定します。

    • networkInterfaces[].stackType
    • networkInterfaces[].ipv6Address
    • networkInterfaces[].internalIpv6PrefixLength
    • networkInterfaces[].ipv6AccessType

    次に例を示します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    {
    "name": "VM_NAME",
    "machineType": "zones/us-central1-f/machineTypes/e2-micro",
    "networkInterfaces": [{
      "accessConfigs": [{
        "type": "ONE_TO_ONE_NAT",
        "name": "External NAT",
      }],
      "network": "global/networks/default",
      "stackType": "IPV4_IPV6"
      "ipv6Address": ""IPV6_ADDRESS"",
      "internalIpv6PrefixLength": 96
      "ipv6AccessType": INTERNAL,
    }],
    "disks": [{
      "autoDelete": "true",
      "boot": "true",
      "type": "PERSISTENT",
      "initializeParams": {
          "sourceImage": "projects/debian-cloud/global/images/v20150818"
      }
    }]
    }

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

    • PROJECT_ID: VM を作成するプロジェクトの ID。
    • ZONE: VM を作成するゾーン。
    • VM_NAME: VM の名前。
    • IPV6_ADDRESS: VM に割り当てる内部 IPv6 アドレス。

エフェメラル IP アドレスを持つ VM インスタンスを削除すると、対象のアドレスは未割り振りのアドレスプールに戻されます。インスタンスの存続期間を超えてその内部 IP アドレスを保持する必要がある場合は、静的内部 IP アドレスを予約できます。

VM のセカンダリ ネットワーク インターフェースに静的内部アドレスを割り当てる

複数のネットワーク インターフェースを持つ VM インスタンスを作成する場合は、プライマリ ネットワーク インターフェースとセカンダリ ネットワーク インターフェースの両方に予約済みの静的内部 IPv4 または IPv6 アドレスを使用できます。

セカンダリ ネットワーク インターフェースに静的内部 IPv4 または IPv6 アドレスを使用するには、複数のネットワーク インターフェースを持つ VM インスタンスを作成するをご覧ください。

既存の VM に対して内部 IPv6 アドレスの変更または割り当てを行う

内部 IPv6 アドレスを変更する、または既存の VM インスタンスに割り当てることができます。

インスタンスにすでに内部 IPv6 アドレスが割り当てられている場合は、まずそのアドレスの割り当てを解除する必要があります。次に、インスタンスのネットワーク インターフェースを使用して、インスタンスに新しいアドレスを割り当てます。

既存の VM インスタンスに静的内部 IPv6 アドレスを変更または割り当てるには、次の手順を完了します。

コンソール

  1. 静的内部 IPv6 アドレスを予約します
  2. Google Cloud コンソールで [VM インスタンス] ページに移動します。

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

  3. 内部 IPv6 アドレスを変更するインスタンスの名前をクリックします。
  4. [インスタンスの詳細] ページで、次の手順を完了します。

    1. [編集] をクリックします。
    2. [ネットワーク インターフェース] を開きます。
    3. [プライマリ内部 IPv6 アドレス] リストで、[自動割り当て(/96)] または予約済みの静的内部 IPv6 アドレスを選択します。
    4. [完了] をクリックします。
  5. [保存] をクリックします。

gcloud

compute instances network-interfaces update コマンドを使用します。

gcloud compute instances network-interfaces update VM_NAME \
    --network-interface NIC \
    --ipv6-network-tier PREMIUM \
    --stack-type IPV4_IPV6 \
    --internal-ipv6-address INTERNAL_IPV6_ADDRESS \
    --zone ZONE

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

  • VM_NAME: 作成する VM の名前。
  • NIC: 更新するネットワーク インターフェースの名前。
  • INTERNAL_IPV6_ADDRESS: インターフェースに割り当てる /96 内部 IPv6 アドレス、IP アドレス名、またはアドレス リソースの URI。
  • ZONE: VM のゾーン。

REST

instances.update メソッドを使用します。割り当てる内部 IPv6 アドレスで networkInterfaces[].ipv6Address プロパティを更新します。

例:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
  {
    ...
    "networkInterfaces": [{
      "accessConfigs": [{
        "type": "ONE_TO_ONE_NAT",
        "name": "External NAT",
      }],
      "stackType": "IPV4_IPV6"
      "ipv6Address": "IPV6_ADDRESS",
      "internalIpv6PrefixLength": 96
      "subnetwork": "regions/REGION/subnetworks/SUBNETWORK",
    }],
    "disks": [{
      "autoDelete": "true",
      "boot": "true",
      "type": "PERSISTENT",
      "initializeParams": {
          "sourceImage": "projects/debian-cloud/global/images/v20150818"
      }
    }]
  }
 

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

  • PROJECT_ID: VM が含まれているプロジェクトの ID。
  • ZONE: VM を作成するゾーン。
  • VM_NAME: VM の名前。
  • IPV6_ADDRESS: VM に割り当てる内部 IPv6 アドレス。

    IPV6_ADDRESS の値として内部 IPv6 アドレス リソースの URI または IPv6 アドレス範囲を指定する場合は、internalIpv6PrefixLength の値を空白のままにする必要があります。

静的内部 IP アドレスを管理する

VM の静的内部 IP アドレスを管理するには、次の手順で操作します。

内部 IPv4 アドレスまたは IPv6 アドレスがエフェメラルか静的かを判別する

静的内部 IP アドレスとエフェメラル内部 IP アドレスは、ほとんどのコンテキストで同じように動作します。ただし、静的内部 IP アドレスを使用すると、リソースを削除して再作成した場合でも、同じリソースには同じ IP アドレスを使用できます。通常、特定のリソースを停止または削除すると、エフェメラル IP アドレスが 1 つ解放されます。

アドレスが静的かエフェメラルかを判別するには、次のようにします。

  1. Google Cloud コンソールで、[IP アドレス] ページに移動します。

    [IP アドレス] に移動

  2. リストからアドレスを探し、[タイプ] 列で IP アドレスのタイプを確認します。

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

デュアルスタック VM インスタンスから静的内部 IPv6 アドレスの割り当てを解除するには、インスタンスのネットワーク インターフェースのスタックタイプを更新するか、アドレスが割り当てられているインスタンスを削除します。

内部 IPv6 アドレスの割り当てを解除すると、対象のアドレスはリソースから削除されますが、プロジェクト用に予約されたアドレスは保持されます。このアドレスは、後で別のリソースに再割り当てできます。

VM インスタンスから静的内部 IPv6 アドレスの割り当てを解除するには、次の手順を完了します。

コンソール

  1. Google Cloud コンソールで [VM インスタンス] ページに移動します。

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

  2. 内部 IPv6 アドレスの割り当てを解除するインスタンスの名前をクリックします。
  3. [インスタンスの詳細] ページで、次の手順を完了します。

    1. [編集] をクリックします。
    2. [ネットワーク インターフェース] を開きます。
    3. [IP スタックタイプ] で [IPv4(シングルスタック)] を選択します。
    4. [完了] をクリックします。
  4. [保存] をクリックします。

gcloud

--stack-type フラグを IPV4_ONLY に設定して compute instances network-interfaces update コマンドを使用します。

gcloud compute instances network-interfaces update VM_NAME \
    --network-interface NIC \
    --stack-type IPV4_ONLY \
    --zone ZONE

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

  • VM_NAME: ネットワーク インターフェースを更新する VM の名前。
  • NIC: 更新するネットワーク インターフェースの名前。
  • ZONE: VM のゾーン。

静的内部 IPv6 アドレスのステータスが IN_USE から RESERVED に変わり、使用可能になったことを確認します。

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

REST

内部 IPv6 アドレスが割り振られているネットワーク インターフェースのインスタンス スタックタイプを更新します。

  1. instances.updateNetworkInterface メソッドPATCH リクエストを送信します。
  2. リクエストの本文で、stackType フィールドの値を IPV4_ONLY に更新します。

    次に例を示します。

    PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/updateNetworkInterface
    {
      "networkInterfaces": [{
        ...
        "stackType" : "IPV4_ONLY"
        ...
        }]
    }
    

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

    • PROJECT_ID: VM が含まれているプロジェクトの ID。
    • ZONE: VM を作成するゾーン。
    • VM_NAME: VM の名前。

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

静的内部 IPv4 または IPv6 アドレスが不要になったら、IP アドレス リソースを削除して IP アドレスを解放できます。VM を削除しても、静的外部 IP アドレスは自動的に解放されません。静的外部 IP アドレスが不要になったら手動で解放する必要があります。

静的内部 IP アドレスを解放するには、VPC ドキュメントの静的内部 IPv4 または IPv6 アドレスを解放するをご覧ください。

次のステップ