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

このページでは、Virtual Private Cloud(VPC)ネットワークで静的内部 IPv4 または IPv6 アドレスの予約方法と管理方法について説明します。

静的内部 IP アドレスを使用すると、サブネットに構成された IP アドレス範囲から内部 IP アドレスを予約し、必要に応じてリソースに割り当てることができます。内部 IP アドレスを予約すると、そのアドレスが動的割り当てプールから取り出され、自動割り当てには使用されなくなります。静的内部 IP アドレスを予約するには特定の Identity and Access Management(IAM)権限が必要であり、許可されたユーザーだけが静的内部 IP アドレスを予約できます。

静的内部 IP アドレスの予約機能を使用することで、リソースを削除して作成し直す必要がある場合でも、また同じ IP アドレスを使用できます。

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

始める前に

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

    このページのサンプルをどのように使うかに応じて、タブを選択してください。

    コンソール

    Google Cloud コンソールを使用して Google Cloud サービスと API にアクセスする場合、認証を設定する必要はありません。

    gcloud

    Google Cloud CLI をインストールし、次のコマンドを実行して初期化します。

    gcloud init

    Terraform

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

    1. Google Cloud CLI をインストールします。
    2. gcloud CLI を初期化するには:

      gcloud init
    3. Google アカウントのローカル認証情報を作成します。

      gcloud auth application-default login

    詳細については、Google Cloud の認証に関するドキュメントのローカル開発環境の認証の設定をご覧ください。

    REST

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

      Google Cloud CLI をインストールし、次のコマンドを実行して初期化します。

      gcloud init

必要なロール

静的 IP アドレスの予約と管理に必要な権限を取得するには、プロジェクトで Compute ネットワーク管理者roles/compute.networkAdmin)の IAM ロールを付与するように管理者へ依頼してください。ロールの付与の詳細については、アクセスの管理をご覧ください。

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

必要な権限

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

  • IP アドレスに対する compute.addresses.create
  • IP アドレスに対する compute.addresses.createInternal
  • ネットワークに対する compute.networks.list
  • サブネットに対する compute.subnetworks.use
  • サブネットに対する compute.subnetworks.list

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

制限事項

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

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

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

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

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

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

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

新しい静的内部 IPv4 または IPv6 アドレスを予約する

新しい静的内部 IP アドレスを予約する前に、サブネットを持つ VPC ネットワークを作成する必要があります。

新しい静的内部 IPv6 アドレスを予約する場合は、VPC ネットワークで ULA の内部 IPv6 範囲が有効になっている必要があります。また、INTERNAL IPv6 アクセスタイプのデュアルスタック サブネットが必要です。

スタンドアロンの内部 IP アドレスを予約するには、次の手順を完了します。

コンソール

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

    [IP アドレス] に移動

  2. [内部静的 IP アドレスの予約] をクリックします。
  3. [名前] フィールドに IP アドレス名を入力します。
  4. [IP バージョン] リストで、必要な IP バージョンを選択します。
    • 静的内部 IPv4 アドレスを予約するには、[IPv4] を選択します。
    • 静的内部 IPv6 アドレスを予約するには、[IPv6] を選択します。
  5. [ネットワーク] リストと [サブネットワーク] リストで、VPC ネットワークとサブネットをそれぞれ選択します。
  6. IP アドレスの予約方法を指定します。
    • IPv4 アドレスの場合、予約する静的内部 IPv4 アドレスを指定するには、[静的 IP アドレス] で、[ユーザー指定] を選択し、カスタム IP アドレスを入力します。それ以外の場合、サブネットの静的内部 IPv4 アドレスはシステムによって自動的に割り当てられます。
    • IPv6 アドレスの場合、静的内部 IPv6 アドレスはサブネットの内部 IPv6 アドレス範囲から自動的に割り当てられます。
  7. 省略可: 異なるフロントエンドで静的内部 IPv4 アドレスを共有する場合は、[目的] リストで [共有] を選択します。デフォルトでは、[共有しない] が選択されています。

  8. [予約] をクリックします。

gcloud

  • 内部 IPv4 アドレスを予約するには、compute addresses create コマンドを使用します。

    gcloud compute addresses create ADDRESS_NAMES \
        --region REGION --subnet SUBNETWORK \
        --addresses IP_ADDRESS
    

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

    • ADDRESS_NAMES: 作成する 1 つ以上の [--purpose=SHARED_LOADBALANCER_VIP] アドレスの名前。複数のアドレスの場合は、各アドレスをスペースで区切ったリストで指定します(例: example-address-1 example-address-2 example-address-3)。
    • REGION: このリクエストのリージョン。
    • SUBNETWORK: この内部 IP アドレスのサブネット。
    • IP_ADDRESS: 予約する IP アドレス。サブネットのプライマリ IP 範囲内になければなりません。指定しない場合、サブネットから IP アドレスが自動的に割り振られます。
  • 内部 IPv6 アドレスを予約するには、compute addresses create コマンドを使用します。--ip-version の値として IPV6 を指定します。

    gcloud compute addresses create ADDRESS_NAMES \
        --region REGION --subnet SUBNETWORK \
        --ip-version IPV6
    

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

    • ADDRESS_NAMES: 予約する 1 つ以上のアドレスの名前。複数のアドレスの場合は、各アドレスをスペースで区切ったリストで指定します(例: example-address-1 example-address-2 example-address-3)。
    • REGION: このリクエストのリージョン。
    • SUBNETWORK: この内部 IPv6 アドレスのサブネット。

    内部 IPv4 の予約とは異なり、内部 IPv6 の予約では、サブネットワークからの特定の IP アドレスの予約をサポートしていません。代わりに、/96 の内部 IPv6 アドレスは、サブネットの /64 の内部 IPv6 アドレス範囲から自動的に割り振られます。

  • サブネットから自動的に割り振られた内部 IPv4 アドレスを予約する場合:

    gcloud compute addresses create example-address-1 \
        --region us-central1 \
        --subnet subnet-1
    
  • サブネットから特定の内部 IPv4 アドレスを予約する場合:

    gcloud compute addresses create example-address-1 \
        --region us-central1 \
        --subnet subnet-1 \
        --addresses 10.128.0.12
    
  • サブネットから静的内部 IPv6 アドレスを予約する場合:

    gcloud compute addresses create example-address-1 \
        --region us-central1 \
        --subnet subnet-1 \
        --ip-version IPV6
    
  • 複数の IPv4 アドレス名を渡すことで、複数の IPv4 アドレスを作成し、すべてのアドレスが同じサブネットで予約されるようにする場合:

    gcloud compute addresses create example-address-1 example-address-2 \
        --region us-central1 \
        --subnet subnet-1 \
        --addresses 10.128.0.12,10.128.0.13
    

Terraform

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

次の例では、Terraform の引数に変更可能なサンプル値が含まれています。この例では、2 つの内部 IP アドレスを作成します。

module "address" {
  source     = "terraform-google-modules/address/google"
  version    = "~> 3.1"
  project_id = var.project_id # Replace this with your project ID in quotes
  region     = "asia-east1"
  subnetwork = "my-subnet"
  names      = ["internal-address1", "internal-address2"]
  addresses  = ["10.0.0.3", "10.0.0.4"]
}

次の例では、動的に割り振られる 2 つの内部 IP アドレスを作成します。

module "address" {
  source     = "terraform-google-modules/address/google"
  version    = "~> 3.1"
  project_id = var.project_id # Replace this with your project ID in quotes
  region     = "asia-east1"
  subnetwork = "my-subnet"
  names      = ["internal-address1", "internal-address2"]
}

API

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

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

IPv4 アドレスと IPv6 アドレスのいずれの場合でも、リクエストの本文には addressType フィールド(INTERNAL)、IP アドレスの namesubnetwork を含める必要があります。リクエストの本文には、必要に応じて内部 IP アドレスの purpose を含めることができます。

内部 IPv4 アドレスの場合は、システムによって IP アドレスが自動的に割り振られるようにすることも、address を使用して内部 IPv4 アドレスを指定することもできます。IPv4 アドレスは、サブネットのプライマリ IP 範囲内になければなりません。

{
  "addressType": "INTERNAL",
  "name": "IPV4_ADDRESS_NAME",
  "subnetwork": "regions/REGION/subnetworks/SUBNETWORK",
  "address": "IPV4_ADDRESS"
  "purpose": "GCE_ENDPOINT"
}

次に例を示します。

POST https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-central1/addresses
{
  "addressType": "INTERNAL",
  "name": "example-ipv4-address-1",
  "subnetwork": "regions/us-central1/subnetworks/my-custom-subnet",
  "address": "10.128.0.12"
  "purpose": "GCE_ENDPOINT"
}

内部 IPv6 アドレスの場合は、ipVersionIPV6 として指定する必要があります。サブネットの内部 IPv6 アドレス範囲から、静的内部 IPv6 アドレスが自動的に割り当てられます。

{
  "addressType": "INTERNAL",
  "name": "IPV6_ADDRESS_NAME",
  "ipVersion": "IPV6",
  "subnetwork": "regions/REGION/subnetworks/SUBNETWORK",
  "purpose": "GCE_ENDPOINT"
}

次に例を示します。

POST https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-central1/addresses
{
  "addressType": "INTERNAL",
  "name": "example-ipv6-address-1",
  "ipVersion": "IPV6"
  "subnetwork": "regions/us-central1/subnetworks/my-custom-subnet",
  "purpose": "GCE_ENDPOINT"
}

Cloud Interconnect を介した HA VPN 用に静的内部 IP アドレス範囲を予約する

Cloud Interconnect を介した HA VPN で使用する静的内部 IP アドレス範囲を予約できます。

静的内部 IP アドレスを作成するときに、フラグ --purpose=IPSEC_INTERCONNECT とプレフィックス長(--prefix-length)を 26~29 の間で指定する必要があります。

予約したリージョン内部 IPv4 アドレスは、Cloud Interconnect で使用される HA VPN ゲートウェイに適用されます。

詳細については、HA VPN ゲートウェイに内部 IP アドレス範囲を割り当てるをご覧ください。

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

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

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

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

    [IP アドレス] に移動

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

使用中のエフェメラル内部 IPv4 アドレスまたは IPv6 アドレスを静的アドレスに昇格させる

使用中のエフェメラル内部 IP アドレスがある場合、それを静的内部 IP アドレスに昇格させると、削除するまでプロジェクトで使用し続けることができます。

エフェメラル内部 IP アドレスを静的内部 IP アドレスに昇格させるには、次の手順を完了します。

コンソール

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

    [IP アドレス] に移動

  2. [内部 IP アドレス] をクリックします。
  3. (省略可)[フィルタ] フィールドで、昇格させるエフェメラル IP アドレスを検索します。
  4. 昇格させる IP アドレスの [その他の操作] メニュー()で、[静的 IP アドレスに昇格] を選択します。
  5. 新しい静的 IP アドレスの名前を入力し、[予約] をクリックします。

gcloud

  1. 既存のエフェメラル内部 IPv6 アドレスを昇格させる前に、その IP アドレスの値を確認する必要があります。Google Cloud CLI を使用してリソースに describe リクエストを行い、IP アドレス値を取得します。

    • IPv4 アドレスを持つ VM の場合は、次のコマンドを使用します。

      gcloud compute instances describe INSTANCE_NAME --zone ZONE | grep "networkIP"
      
    • IPv6 アドレスを持つ VM の場合は、次のコマンドを使用します。

      gcloud compute instances describe INSTANCE_NAME --zone ZONE | grep "ipv6Address"
      
    • リージョン転送ルールの場合は、次のコマンドを使用します。

      gcloud compute forwarding-rules describe FORWARDING_RULE_NAME --region REGION | grep "IPAddress"
      

      グローバル転送ルールの場合は、代わりに --global フラグを使用します。

  2. アドレスを昇格させます。

    • 1 つまたは複数の既存の内部 IPv4 アドレスを昇格させるには、compute addresses create コマンドを使用し、昇格させる明示的な内部 IP アドレスを --addresses フラグに指定します。

      gcloud compute addresses create IPV4_ADDRESS_NAMES \
        --addresses IPV4_ADDRESSES \
        --region REGION \
        --prefix-length PREFIX_LENGTH \
        --subnet SUBNETWORK
      

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

      • IPV4_ADDRESS_NAMES: IPv4 アドレスの名前。複数のアドレスを指定する場合は、アドレス名をスペースで区切ったリストで指定します(例: example-address-name-1 example-address-name-2 example-address-name-3)。IP アドレスの宣言と同じ順序で名前を宣言します。たとえば、アドレス名を example-address-name-1 example-address-name-2 example-address-name-3、IPv4 アドレスを 192.0.2.0 192.0.2.1 192.0.2.2 として指定したとします。このシナリオでは、Compute Engine は次の方法で名前とアドレスをマッピングします。

        • example-address-name-1: 192.0.2.0
        • example-address-name-2: 192.0.2.1
        • example-address-name-3: 192.0.2.2
      • IPV4_ADDRESSES: 昇格させる IPv4 アドレス。複数のアドレスの場合は、各アドレスをスペースで区切ったリストで指定します(例: 192.0.2.0 192.0.2.1 192.0.2.2)。

      • REGION: このアドレスを予約するリージョン。

      • PREFIX_LENGTH: 省略可。IPv4 アドレス範囲のプレフィックスの長さ。値には 7~31 の整数を指定してください。このフィールドは、アドレス範囲を指定する場合にのみ指定します。指定された IPv4 アドレスが単一の IP アドレスの場合は、このフィールドを除外します。

      • SUBNETWORK: このリクエストのサブネットワーク。

    • 1 つ以上の既存の内部 IPv6 アドレスを昇格させるには、compute addresses create コマンドを使用し、昇格させる内部 IPv6 アドレスを --addresses フラグに明示的に指定します。

      gcloud compute addresses create IPV6_ADDRESS_NAMES \
       --addresses IPV6_ADDRESSES \
       --region REGION \
       --prefix-length PREFIX_LENGTH \
       --subnet SUBNETWORK
      

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

      • IPV6_ADDRESS_NAMES: アドレスの名前。IPv6 アドレスの宣言と同じ順序で名前を宣言します。この場合、IPV6_ADDRESS_NAME_1IPV6_ADDRESS_1 に対応し、IPV6_ADDRESS_NAME_2IPV6_ADDRESS_2 に対応します。
      • IPV6_ADDRESS_1,[IPV6_ADDRESS_2,...]: 昇格させる IPv6 アドレス(CIDR 形式)。
      • PREFIX_LENGTH_1,[PREFIX_LENGTH_2,...]: IPv6 アドレスのプレフィックス長。
      • REGION: このアドレスを予約するリージョン。
      • SUBNETWORK: このリクエストのサブネットワーク。

      内部 IPv6 アドレスは、静的内部 IPv6 アドレスに昇格した後も、既存のインスタンスに割り振られたままになります。新しく昇格した静的内部 IPv6 アドレスを別のリソースに割り振る必要がある場合は、まず既存のインスタンスから静的内部 IPv6 アドレスの割り振りを解除します。

API

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

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

IPv4 アドレスと IPv6 アドレスのいずれの場合でも、リクエストの本文には、addressTypeINTERNAL)、アドレスの name、昇格させる address、IP アドレスが属する subnetwork を含める必要があります。IPv6 アドレスの場合は、さらに、リクエストの本文で値として 96 を持つ prefixLength を含める必要があります。

  • 内部 IPv4 アドレスを昇格させるリクエストの本文:

    {
    "name": "ADDRESS_NAME",
    "addressType": "INTERNAL",
    "address": "IP_ADDRESS",
    "subnetwork": "regions/REGION/subnetworks/SUBNETWORK"
    }
    

    次に例を示します。

    POST https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-central1/addresses
    {
    "name": "example-IPv4-address-1",
    "addressType": "INTERNAL",
    "address": "10.128.0.2",
    "subnetwork": "regions/us-central1/subnetworks/my-custom-subnet"
    }
    
  • 内部 IPv6 アドレスを昇格させるリクエストの本文:

    {
    "name": "ADDRESS_NAME",
    "addressType": "INTERNAL",
    "address": "IP_ADDRESS",
    "subnetwork": "regions/REGION/subnetworks/SUBNETWORK"
    "prefixLength": 96
    }
    

    次に例を示します。

    POST https://compute.googleapis.com/compute/v1/projects/example-project/regions/us-central1/addresses
    {
    "name": "example-IPv6-address-1",
    "addressType": "INTERNAL",
    "address": "fd20:0:0::",
    "subnetwork": "regions/us-central1/subnetworks/my-custom-subnet"
    "prefixLength": 96
    }
    

共有 VPC で静的内部 IPv4 または IPv6 アドレスを使用する

共有 VPC ネットワークの共有サブネットに予約済み静的内部 IP アドレスを作成できます。IP アドレス オブジェクトの値が共有 VPC ネットワークで選択された共有サブネットの IP アドレスの範囲から使用されている場合でも、IP アドレス オブジェクト自体は、このオブジェクトを使用するリソースと同じサービス プロジェクトで作成されます。このユースケースの詳細については、次のリソースをご覧ください。

静的内部 IPv4 アドレスまたは IPv6 アドレスを一覧表示する

既存のすべての静的内部 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

新しい静的内部 IPv4 または IPv6 アドレスを解放する

静的内部 IP アドレスが不要になったら、IP アドレス リソースを削除することで IP アドレスを解放できます。

Google Cloud コンソールを使用している場合は、静的 IP アドレスを解放できるのは、別のリソースで使用されていない場合に限られます。

gcloud CLI または API を使用している場合は、別のリソースで使用されているかどうかにかかわらず、IP アドレスを解放できます。

  • IP アドレスがリソースで使用されていない場合、その IP アドレスは使用可能な内部 IP アドレスのプールに返却されます。

  • リソースで使用されている IP アドレスは、削除されるまでそのリソースに割り振られたままになります。

静的内部 IPv4 または IPv6 アドレスを解放するには、次の手順を完了します。

コンソール

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

    [IP アドレス] に移動

  2. [内部 IP アドレス] をクリックします。
  3. 解放する静的内部 IP アドレスを選択します。
  4. [静的アドレスを解放] をクリックし、ダイアログの [解放] をクリックしてこの操作を確認します。

gcloud

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

gcloud compute addresses delete ADDRESS_NAME \
    --region REGION

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

  • ADDRESS_NAME: 削除するアドレスの名前。
  • REGION: アドレスが属しているリージョン。

次に例を示します。

gcloud compute addresses delete example-address-to-delete \
    --region us-west1

API

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

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

次の例では、us-west1 リージョンのアドレスを削除します。

DELETE https://compute.googleapis.com/compute/v1/projects/myproject/regions/us-west1/addresses/example-address-to-delete

次のステップ