Private Service Connect インターフェースの作成と管理

このページでは、プロデューサー ネットワーク管理者が Private Service Connect インターフェースを作成して管理する方法について説明します。Private Service Connect インターフェースを使用すると、サービス プロデューサーの Virtual Private Cloud(VPC)ネットワークからコンシューマー VPC ネットワークへの接続を開始できます。

始める前に

ロール

Private Service Connect インターフェースの作成に必要な権限を取得するには、プロジェクトに対して次の IAM ロールを付与するよう管理者に依頼してください。

ロールの付与の詳細については、アクセス権の管理をご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

Compute インスタンス管理者(v1)ロールには、Private Service Connect インターフェースを作成するために必要な compute.instances.pscInterfaceCreate 権限が含まれています。

Private Service Connect インターフェースの作成と構成

Private Service Connect インターフェースを持つ仮想マシン(VM)インスタンスを作成して構成するには、次の手順を完了します。

Private Service Connect インターフェースを持つ VM を作成する

Private Service Connect インターフェースを作成する場合、2 つ以上のネットワーク インターフェースを持つ VM を作成します。最初のインターフェースはプロデューサー サブネットに接続します。2 番目のインターフェースは、コンシューマー ネットワークのネットワーク アタッチメントへの接続をリクエストする Private Service Connect インターフェースです。

接続が受け入れられると、ネットワーク アタッチメントで指定されたサブネットから内部 IP アドレスが Private Service Connect インターフェースに割り振られます。

手動で接続を受け入れるネットワーク アタッチメントを参照する Private Service Connect インターフェースを作成した場合、インターフェースのプロジェクトがネットワーク アタッチメントの承認リストに含まれていないと、Private Service Connect インターフェースの VM の作成に失敗します。その場合は、コンシューマー組織と協力してプロジェクトを承認リストに追加してから、Private Service Connect インターフェースを作成します。

Private Service Connect インターフェースを作成するときに、1 つ以上の内部エイリアス IP 範囲を割り当てることができます。エイリアス IP 範囲を割り当てる場合は、コンシューマー組織に連絡して、適切な IP アドレス範囲を決めてください。

エイリアス IP 範囲を割り当てるには、範囲のプレフィックス長を CIDR 表記で指定します。Private Service Connect インターフェースに 1 つ以上のエイリアス IP 範囲を割り当てると、Google Cloud はネットワーク アタッチメントに関連付けられているサブネットのプライマリ IP アドレス範囲からエイリアス IP 範囲を割り振ります。Private Service Connect インターフェースのプライマリ IP アドレスは、エイリアス IP 範囲の外部から割り振られます。ネットワーク アタッチメントのサブネットで、プライマリ IP アドレスとエイリアス IP 範囲の割り振りに十分な IP アドレスがない場合、Private Service Connect インターフェースの VM の作成は失敗します。割り当てられた特定の IP アドレスは、インターフェースの VM の説明を取得することで確認できます。

コンソール

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

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

  2. [インスタンスを作成] をクリックします。

  3. 名前を入力します。

  4. 接続するネットワーク アタッチメントのリージョンと一致するリージョンを選択します。

  5. ゾーンを選択します。

  6. [詳細オプション] をクリックします。

  7. [ネットワーキング] をクリックします。

  8. [ネットワーク インターフェース] セクションで、最初のネットワーク インターフェース(プライマリ ネットワーク インターフェース)をクリックして、次の操作を行います。

    1. プライマリ ネットワーク インターフェースのネットワークを選択します。
    2. プライマリ ネットワーク インターフェースのサブネットを選択します。このサブネットは、Private Service Connect インターフェースのネットワーク アタッチメントと同じリージョンに存在する必要があります。
  9. [ネットワーク インターフェースを追加] をクリックします。

  10. [インターフェース タイプ] で [Private Service Connect] を選択します。

  11. ネットワーク アタッチメントの URL を入力します。

  12. IP スタックタイプを選択します。デュアルスタック Private Service Connect インターフェースを作成するには、ネットワーク アタッチメントのサブネットがデュアルスタックである必要があります。

  13. 省略可: エイリアス IP 範囲を追加するには、[プレフィックス長] ボックスにプレフィックス長を入力します(例: /30)。複数のエイリアス IP 範囲を追加するには、[IP の範囲を追加] をクリックして、追加するエイリアス IP 範囲ごとにプレフィックス長を入力します。

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

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

gcloud

IPv4 専用の Private Service Connect インターフェースを持つ VM を作成するには、instances create コマンドを使用します。

gcloud compute instances create INSTANCE_NAME \
    --zone=ZONE \
    --machine-type=MACHINE_TYPE \
    --image-project=IMAGE_PROJECT \
    --image=IMAGE \
    --network-interface='network=PRODUCER_NETWORK,subnet=PRODUCER_SUBNET,no-address' \
    --network-interface='network-attachment=projects/CONSUMER_PROJECT_ID/regions/REGION/networkAttachments/ATTACHMENT_NAME'

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

  • INSTANCE_NAME: 新しいインスタンスの名前
  • ZONE: 新しいインスタンスのゾーン
  • MACHINE_TYPE: インスタンスのマシンタイプ(事前定義またはカスタム
  • IMAGE_PROJECT: イメージのプロジェクト。たとえば、イメージとして debian-10-buster-v20230809 を指定する場合は、イメージ プロジェクトとして debian-cloud を指定します。使用可能なイメージ、イメージ プロジェクト、イメージ ファミリーのリストを表示するには、gcloud compute images list コマンドを使用します。
  • IMAGE: 公開イメージの特定のバージョン。例: debian-10-buster-v20230809
  • PRODUCER_NETWORK: インスタンスのネットワーク。
  • PRODUCER_SUBNET: VM のプライマリ ネットワーク インターフェースのサブネット。このサブネットは、Private Service Connect インターフェースのネットワーク アタッチメントと同じリージョンに存在する必要があります。
  • CONSUMER_PROJECT_ID: 接続するコンシューマーの ID。
  • ATTACHMENT_NAME: 接続をリクエストするネットワーク アタッチメントの名前。

Private Service Connect インターフェースに IPv4 アドレスと IPv6 アドレスの両方を割り当てるには、stack-type='IPV4_IPv6' を指定します。インターフェースが参照するネットワーク アタッチメントは、デュアルスタック サブネットに関連付けられている必要があります。

gcloud compute instances create INSTANCE_NAME \
    --zone=ZONE \
    --machine-type=MACHINE_TYPE \
    --image-project=IMAGE_PROJECT \
    --image=IMAGE \
    --network-interface='network=PRODUCER_NETWORK,subnet=PRODUCER_SUBNET,no-address' \
    --network-interface='network-attachment=projects/CONSUMER_PROJECT_ID/regions/REGION/networkAttachments/ATTACHMENT_NAME,stack-type='IPV4_IPV6''

Private Service Connect インターフェースに 1 つ以上のエイリアス IP 範囲を割り当てるには、割り当てる各エイリアス IP 範囲のプレフィックス長を指定します。

gcloud compute instances create INSTANCE_NAME \
    --zone=ZONE \
    --machine-type=MACHINE_TYPE \
    --image-project=IMAGE_PROJECT \
    --image=IMAGE \
    --network-interface='network=PRODUCER_NETWORK,subnet=PRODUCER_SUBNET,no-address' \
    --network-interface='network-attachment=projects/CONSUMER_PROJECT_ID/regions/REGION/networkAttachments/ATTACHMENT_NAME,aliases=ALIAS_IP_RANGE'

ALIAS_IP_RANGE は、CIDR 表記の 1 つ以上のプレフィックス長に置き換えます。複数のプレフィックス長を指定する場合は、セミコロンで区切ったリストを使用します(例: /24;/28)。

API

IPv4 専用の Private Service Connect インターフェースを持つ VM を作成するには、POST リクエストを instances.insert メソッドに送信します。

POST https://compute.googleapis.com/compute/v1/projects/PRODUCER_PROJECT_ID/zones/INSTANCE_ZONE/instances
{
  "machineType": "zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE",
  "name": "VM_NAME",
  "disks": [
    {
      "initializeParams": {
        "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
      },
      "boot": true
    }
  ],
  "networkInterfaces": [
    {
      "network": "https://compute.googleapis.com/compute/v1/projects/PRODUCER_PROJECT_ID/global/networks/PRODUCER_NETWORK",
      "subnetwork": "https://compute.googleapis.com/compute/v1/projects/PRODUCER_PROJECT_ID/regions/SUBNET_REGION/subnetworks/SUBNET"
    },
    {
      "networkAttachment": "projects/CONSUMER_PROJECT_ID/regions/ATTACHMENT_REGION/networkAttachments/ATTACHMENT_NAME"
    }
  ]
}

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

  • PRODUCER_PROJECT_ID: プロデューサー プロジェクトの ID。
  • INSTANCE_ZONE: 新しいインスタンスのゾーン。
  • MACHINE_TYPE_ZONE: マシンタイプのゾーン。
  • MACHINE_TYPE: 新しい VM のマシンタイプ(事前定義またはカスタム)。
  • VM_NAME: 新しい VM の名前。
  • IMAGE_PROJECT: イメージを含むプロジェクト。たとえば、イメージとして debian-10-buster-v20200309 を指定する場合は、イメージ プロジェクトとして debian-cloud を指定します。
  • IMAGE: 公開イメージの特定のバージョン。例: debian-10-buster-v20200309
  • PRODUCER_PROJECT_ID: インターフェースのプロジェクトのプロジェクト ID。
  • PRODUCER_NETWORK: プロデューサーの VPC ネットワークの名前。
  • SUBNET_REGION: プライマリ ネットワーク インターフェースのサブネットのリージョン。このサブネットは、Private Service Connect インターフェースのネットワーク アタッチメントと同じリージョンに存在する必要があります。
  • SUBNET: プライマリ ネットワーク インターフェースのサブネットの名前。
  • CONSUMER_PROJECT_ID: コンシューマー プロジェクトの ID。
  • ATTACHMENT_REGION: ネットワーク アタッチメントのリージョン。
  • ATTACHMENT_NAME: ネットワーク アタッチメントの名前。

Private Service Connect インターフェースに IPv4 アドレスと IPv6 アドレスの両方を割り当てるには、"stack-type": "IPV4_IPv6" を指定します。インターフェースが参照するネットワーク アタッチメントは、デュアルスタック サブネットに関連付けられている必要があります。

POST https://compute.googleapis.com/compute/v1/projects/PRODUCER_PROJECT_ID/zones/INSTANCE_ZONE/instances
{
  "machineType": "zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE",
  "name": "VM_NAME",
  "disks": [
    {
      "initializeParams": {
        "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
      },
      "boot": true
    }
  ],
  "networkInterfaces": [
    {
      "network": "https://compute.googleapis.com/compute/v1/projects/PRODUCER_PROJECT_ID/global/networks/PRODUCER_NETWORK",
      "subnetwork": "https://compute.googleapis.com/compute/v1/projects/PRODUCER_PROJECT_ID/regions/SUBNET_REGION/subnetworks/SUBNET"
    },
    {
      "networkAttachment": "projects/CONSUMER_PROJECT_ID/regions/ATTACHMENT_REGION/networkAttachments/ATTACHMENT_NAME",
      "stackType": "IPV4_IPV6"
    }
  ]
}

Private Service Connect インターフェースに 1 つ以上のエイリアス IP 範囲を割り当てるには、割り当てる各エイリアス IP 範囲のプレフィックス長を指定します。

POST https://compute.googleapis.com/compute/v1/projects/PRODUCER_PROJECT_ID/zones/INSTANCE_ZONE/instances
{
  "machineType": "zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE",
  "name": "VM_NAME",
  "disks": [
    {
      "initializeParams": {
        "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
      },
      "boot": true
    }
  ],
  "networkInterfaces": [
    {
      "network": "https://compute.googleapis.com/compute/v1/projects/PRODUCER_PROJECT_ID/global/networks/PRODUCER_NETWORK",
      "subnetwork": "https://compute.googleapis.com/compute/v1/projects/PRODUCER_PROJECT_ID/regions/SUBNET_REGION/subnetworks/SUBNET"
    },
    {
      "aliasIpRanges": [
        {
          "ipCidrRange": "ALIAS_IP_RANGE"
        }
      ],
      "networkAttachment": "projects/CONSUMER_PROJECT_ID/regions/ATTACHMENT_REGION/networkAttachments/ATTACHMENT_NAME"
    }
  ]
}

ALIAS_IP_RANGE は、CIDR 表記のプレフィックス長に置き換えます(例: /28)。次の形式の aliasIpRanges リストで、複数のエイリアス IP 範囲を指定できます。

"aliasIpRanges": [
  {
    "ipCidrRange": "/28"
  },
  {
    "ipCidrRange": "/30"
  }
]

VM インスタンスの作成の詳細については、VM インスタンスの作成と開始をご覧ください。

SSH 接続を許可する

ファイアウォール ルールが、Private Service Connect インターフェースの VM への上り(内向き)SSH 接続を許可するように構成されていることを確認します。

Private Service Connect インターフェースの Google Cloud 名を確認する

ルーティングを構成するには、Private Service Connect インターフェースの Google Cloud 名が必要です。

コンソール

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

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

  2. Private Service Connect インターフェースを持つ VM の名前をクリックします。

  3. [ネットワーク インターフェース] セクションで、Private Service Connect インターフェースの名前(nic1 など)を見つけてメモします。

gcloud

  1. compute instances describe コマンドを使用します。

    gcloud compute instances describe VM_NAME
      --zone=ZONE
    

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

    • VM_NAME: Private Service Connect インターフェースを持つ VM の名前。
    • ZONE: VM のゾーン。
  2. コマンドの出力で、Private Service Connect インターフェースの Google Cloud 名(例: nic1)を探してメモします。

Private Service Connect インターフェースのゲスト OS 名を確認する

ルーティングを構成するには、Private Service Connect インターフェースのゲスト OS 名が必要です。これは、Google Cloud のインターフェース名とは異なります。

Debian VM でインターフェースの名前を確認するには、次の操作を行います。他のオペレーティング システムを搭載した VM については、オペレーティング システムの公開ドキュメントをご覧ください。

  1. Private Service Connect インターフェースの VM に接続します
  2. 次のコマンドを実行します。

    ip address
    

    ネットワーク インターフェースのリストで、Private Service Connect インターフェースの IP アドレスに関連付けられているインターフェース名(例: ens5)を見つけてメモします。

Private Service Connect インターフェースのゲートウェイ IP を確認する

ルーティングを構成するには、Private Service Connect インターフェースのデフォルト ゲートウェイの IP アドレスが必要です。

  1. Private Service Connect インターフェースの VM に接続します

  2. インターフェースの VM から、関連するメタデータ サーバーに次の GET リクエストを送信します。

    curl http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/INTERFACE_NUMBER/gateway -H "Metadata-Flavor: Google" && echo
    

    INTERFACE_NUMBER は、Private Service Connect インターフェースの Google Cloud 名の数値に置き換えます。たとえば、インターフェースの名前が nic1 の場合は、値 1 を使用します。

コンシューマ サブネットのルートを追加する

Private Service Connect インターフェースに接続するコンシューマ サブネットごとに、Private Service Connect インターフェースのデフォルト ゲートウェイへのルートを追加する必要があります。これにより、コンシューマー ネットワークに送信されるトラフィックが、Private Service Connect インターフェースから送信されます。

以下では、Debian オペレーティング システムを使用する VM のルーティング テーブルを一時的に更新する方法について説明します。テーブルを完全に更新する場合や、別のオペレーティング システムでルートを更新する場合は、オペレーティング システムの公開ドキュメントをご覧ください。

  1. Private Service Connect インターフェースの VM に接続します

  2. Private Service Connect インターフェースに接続するコンシューマ サブネットごとに次のコマンドを実行します。

    sudo ip route add CONSUMER_SUBNET_RANGE via GATEWAY_IP dev OS_INTERFACE_NAME
    

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

Private Service Connect インターフェースを含むインスタンス テンプレートを作成する

Private Service Connect インターフェースを含むインスタンス テンプレートを作成できます。

コンソール

  1. [インスタンス テンプレート] ページに移動します。

    [インスタンス テンプレート] に移動

  2. [インスタンス テンプレートを作成] をクリックします。

  3. [名前] にインスタンス テンプレートの名前を入力します。

  4. [詳細オプション] をクリックします。

  5. [ネットワーキング] をクリックします。

  6. [ネットワーク インターフェース] セクションで、展開矢印 をクリックします。

  7. インスタンス テンプレートのプライマリ ネットワーク インターフェースのネットワークサブネットワークを選択します。

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

  9. [ネットワーク インターフェースを追加] をクリックします。

  10. [Private Service Connect] をクリックします。

  11. Private Service Connect インターフェースのネットワークサブネットワークを選択します。

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

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

gcloud

instance-templates create コマンドを使用します。

gcloud compute instance-templates create NAME \
    --machine-type=MACHINE_TYPE \
    --network-interface=subnet=SUBNET \
    --region=REGION \
    --image-project=IMAGE_PROJECT \
    --image=IMAGE \
    --network-interface=network-attachment=projects/ATTACHMENT_PROJECT_ID/regions/ATTACHMENT_REGION/networkAttachments/ATTACHMENT_NAME

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

  • NAME: インスタンス テンプレートの名前。
  • MACHINE_TYPE: このインスタンス テンプレートを使用して作成された VM の事前定義またはカスタム マシンタイプ。例: f1-micro
  • SUBNET: インスタンス テンプレートのサブネット。このインスタンス テンプレートを使用して VM を作成すると、VM のプライマリ ネットワーク インターフェースには、このサブネットから内部 IP アドレスが割り当てられます。
  • REGION: インスタンス テンプレートのサブネットのリージョン。
  • IMAGE_PROJECT: イメージのプロジェクト。たとえば、イメージとして debian-10-buster-v20230809 を指定する場合は、イメージ プロジェクトとして debian-cloud を指定します。使用可能なイメージ、イメージ プロジェクト、イメージ ファミリーのリストを表示するには、gcloud compute images list コマンドを使用します。
  • IMAGE: 公開イメージの特定のバージョン。例: debian-10-buster-v20230809
  • ATTACHMENT_PROJECT_ID: ネットワーク アタッチメントのプロジェクトの ID。
  • ATTACHMENT_REGION: ネットワーク アタッチメントのリージョン。
  • ATTACHMENT_NAME: ネットワーク アタッチメントの名前。このインスタンス テンプレートを使用して VM を作成すると、Private Service Connect インターフェースは、このネットワーク アタッチメントへの接続をリクエストします。

    イメージ名やブートディスク サイズなど、追加の構成を指定できます。詳細については、新しいインスタンス テンプレートを作成するをご覧ください。

API

instanceTemplates.insert メソッドPOST リクエストを送信します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates
{
  "name": "NAME",
  "properties": {
    "disks": [
      {
        "boot": true,
        "initializeParams": {
          "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
        }
      }
    ],
    "machineType": "MACHINE_TYPE",
    "networkInterfaces": [
      {
        "subnetwork": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/SUBNET_REGION/subnetworks/SUBNET"
      },
      {
        "networkAttachment": "projects/ATTACHMENT_PROJECT_ID/regions/ATTACHMENT_REGION/networkAttachments/NETWORK_ATTACHMENT"
      }
    ]
  }
}

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

  • PROJECT_ID: インスタンス テンプレートを作成するプロジェクトの ID。
  • NAME: インスタンス テンプレートの名前。
  • IMAGE_PROJECT: イメージのプロジェクト。たとえば、イメージとして debian-10-buster-v20230809 を指定する場合は、イメージ プロジェクトとして debian-cloud を指定します。使用可能なイメージとイメージ プロジェクトのリストを表示するには、gcloud compute images list コマンドを使用します。
  • IMAGE: 公開イメージの特定のバージョン。例: debian-10-buster-v20230809
  • MACHINE_TYPE: このインスタンス テンプレートを使用して作成された VM の事前定義またはカスタム マシンタイプ。例: f1-micro
  • SUBNET_REGION: インスタンス テンプレートのサブネットのリージョン。
  • SUBNET: インスタンス テンプレートのサブネット。このインスタンス テンプレートを使用して VM を作成すると、VM のプライマリ ネットワーク インターフェースには、このサブネットから内部 IP アドレスが割り当てられます。
  • ATTACHMENT_PROJECT_ID: ネットワーク アタッチメントのプロジェクトの ID。
  • ATTACHMENT_REGION: ネットワーク アタッチメントのリージョン。
  • NETWORK_ATTACHMENT: ネットワーク アタッチメントの名前。このインスタンス テンプレートを使用して VM を作成すると、Private Service Connect インターフェースは、このネットワーク アタッチメントへの接続をリクエストします。

インスタンス テンプレート作成の詳細については、インスタンス テンプレートを作成するをご覧ください。

VPC Service Controls で Private Service Connect インターフェースを使用する

VPC Service Controls で Private Service Connect インターフェースを使用できます。これにより、プロデューサー VPC ネットワークはコンシューマー VPC ネットワークを介して Google API とサービスにアクセスし、コンシューマー組織は VPC Service Controls のセキュリティ上のメリットを利用できます。

VPC Service Controls で Private Service Connect インターフェースを使用するには、Private Service Connect インターフェースの VM のルーティング テーブルを更新する必要があります。デフォルト ルートを、Private Service Connect インターフェースを介して Private Service Connect インターフェースのデフォルト ゲートウェイにトラフィックを送信するルートに置き換えます。

次の手順では、Debian を使用する VM のルーティング テーブルを一時的に更新します。ルートを完全に追加する場合や、別のオペレーティング システムでルートを更新する場合は、オペレーティング システムの公開ドキュメントをご覧ください。

コンソール

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

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

  2. Private Service Connect インターフェースを持つ VM の名前をクリックします。

  3. 次のコマンドを実行します。

    sudo ip route replace default via GATEWAY_IP dev OS_INTERFACE_NAME
    

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

Private Service Connect インターフェースの説明を取得する

VM の説明を取得して、Private Service Connect インターフェースの詳細を表示できます。インターフェースの IP アドレス、エイリアス IP 範囲、ネットワーク アタッチメント、コンシューマー サブネットは、VM の説明のネットワーク インターフェース セクションに一覧表示されます。

コンソール

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

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

  2. Private Service Connect インターフェースがある VM をクリックします。

  3. [ネットワーク インターフェース] セクションで、Private Service Connect インターフェースの詳細を表示します。

gcloud

gcloud compute instances describe VM_NAME
    --zone=ZONE

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

  • VM_NAME: インターフェースの VM の名前。
  • ZONE: VM のゾーン。

API

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

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

  • PROJECT_ID: VM のプロジェクト ID。
  • ZONE: VM のゾーン。
  • VM_NAME: VM の名前。

Private Service Connect インターフェースを持つ VM を削除する

Private Service Connect インターフェースを削除するには、接続先の VM インスタンスを削除する必要があります。詳細については、インスタンスを削除するをご覧ください。

次のステップ