静的外部 IP を使用してプライベート ネットワーク内の外部リソースにアクセスする

このページでは、静的外部 IP を介して外部リソースにアクセスするようにプライベート プールを設定する方法について説明します。


このタスクを Google Cloud コンソールで直接行う際の順を追ったガイダンスについては、「ガイドを表示」をクリックしてください。

ガイドを表示


準備

  • Enable the Cloud Build, Compute Engine, and Service Networking APIs.

    Enable the APIs

  • プライベート接続を設定するために必要な権限を取得するには、VPC ネットワークが存在する Cloud プロジェクトに対する Compute Engine ネットワーク管理者roles/compute.networkAdmin)の IAM ロールの付与を管理者に依頼してください。ロールの付与の詳細については、アクセスの管理をご覧ください。

  • このページで gcloud コマンドを使用するには、Google Cloud CLI をインストールします。

VPC ネットワークの作成

コンソール

Google Cloud コンソールを使用して VPC ネットワークを作成するには、次の手順に沿って操作します。

  1. Google Cloud コンソールで [VPC ネットワーク] ページを開きます。

    [VPC ネットワーク] に移動

  2. [VPC ネットワークを作成] をクリックして、新しいネットワークを作成します。

    [VPC ネットワークの作成] ページが表示されます。

  3. ネットワークの名前を入力します。

  4. [サブネット作成モード] で [自動] を選択します。

  5. 他のフィールドをさらにカスタマイズする場合は、VPC ネットワークの作成と管理をご覧ください。それ以外の場合は、すべてのフィールドをそのままにします。

  6. [作成] をクリックして VPC ネットワークを作成します。

    [作成] をクリックすると、[VPC ネットワーク] ページに新しい VPC ネットワークが表示されます。

gcloud

gcloud コマンドライン ツールを使用して VPC ネットワークを作成するには、ターミナルで次のコマンドを入力します。ここで、NETWORK_NAME は VPC ネットワークの名前です。

gcloud compute networks create NETWORK_NAME \
  --subnet-mode=auto

[作成] をクリックすると、[VPC ネットワーク] ページに新しい VPC ネットワークが表示されます。

VPC ネットワークの作成と管理の詳細については、VPC ネットワークの作成と管理をご覧ください。

プライベート接続の作成

コンソール

VPC ネットワークとサービス プロデューサー ネットワークの間にプライベート接続を作成するには、次の手順に沿って操作します。

  1. Google Cloud コンソールで [VPC ネットワーク] ページを開きます。

    [VPC ネットワーク] に移動

  2. ネットワーク名をクリックします。

    [VPC ネットワークの詳細] ページが表示されます。

  3. [Private Service Connect] タブをクリックします。

    1. [サービスに割り当てられた IP 範囲] を選択します。

    2. [IP 範囲の割り当て] をクリックします。

      [内部 IP 範囲の割り振り] ポップアップ ボックスが表示されます。

      1. IP 範囲の名前を入力します。

      2. [IP 範囲] で [自動] を選択します。

      3. [プレフィックスの長さ] フィールドに、ネットワークのプレフィックス長を入力します。

      4. [割り当て] をクリックして、IP 範囲を割り当てます。

    3. [サービスへのプライベート接続] タブを選択します。

    4. [接続を作成] をクリックします。

      [プライベート接続の作成] ポップアップが表示されます。

      1. [アサインされた割り当て] で、IP 範囲を選択します。

      2. [Connect] をクリックします。

      [サービスのプライベート接続] タブの表に接続が表示されます。

      [有効にする](カスタムルートのエクスポート)をクリックして、VPC のルートがプライベート プール インスタンスが実行されているネットワークに適用されていることを確認します。

これでネットワークが構成されました。

gcloud

VPC ネットワークとサービス プロデューサー ネットワークの間にプライベート接続を作成するには、次の手順に沿って操作します。

  1. ターミナルに次のコマンドを入力して、サービスに IP 範囲を割り当てます。

        gcloud compute addresses create RESERVED_RANGE_NAME \
          --global \
          --prefix-length=PREFIX_LENGTH \
          --network=VPC_NETWORK \
          --project=PROJECT_ID
    

    ここで

    • RESERVED_RANGE_NAME は割り当て範囲の名前です。例: my-allocated-range
    • PREFIX_LENGTH は、ネットワークの接頭辞長です。接頭辞長は /24 以下でなければなりません(/22/21 など)。
    • VPC_NETWORK は VPC ネットワークの名前です(例: my-vpc-network)。
    • PROJECT_ID は VPC ネットワークを含むプロジェクトの ID です。
  2. ターミナルで次のコマンドを入力して、プライベート接続を作成します。

        gcloud services vpc-peerings connect \
          --service=servicenetworking.googleapis.com \
          --ranges=RESERVED_RANGE_NAME \
          --network=VPC_NETWORK \
          --project=PROJECT_ID
    

    ここで

    • RESERVED_RANGE_NAME は、前の手順で作成した割り当て範囲の名前です。
    • VPC_NETWORK は VPC ネットワークの名前です(例: my-vpc-network)。
    • PROJECT_ID は VPC ネットワークを含むプロジェクトの ID です。
  3. ターミナルで次のコマンドを入力して、VPC のルートが、プライベート プール インスタンスが実行されているネットワークに適用されていることを確認します。

        gcloud compute networks peerings update servicenetworking-googleapis-com \
          --export-custom-routes \
          --network=VPC_NETWORK \
          --project=PROJECT_ID
    

    ここで

    • VPC_NETWORK は VPC ネットワークの名前です(例: my-vpc-network)。
    • PROJECT_ID は VPC ネットワークを含むプロジェクトの ID です。

これでネットワークが構成されました。

ネットワークの構成の詳細については、VPC ネットワークとサービス プロデューサー ネットワーク間のプライベート接続を設定するをご覧ください。

プライベート プールを作成する

コンソール

Google Cloud コンソールを使用してプライベート プールを作成するには、次の手順を行います。

  1. Google Cloud コンソールで [ワーカープール] ページを開きます。

    Cloud Build ワーカープールのページを開く

  2. プライベート プールを作成するプロジェクトを選択します。

  3. [ワーカープール] ページで、[作成] をクリックします。

    [プライベート プールの作成] パネルが表示されます。

  4. [プライベート プールの作成] サイドパネルで、次の情報を入力します。

    1. プライベート プールの名前を入力します。

    2. プルダウン メニューから [リージョン] を選択します。

    3. [ネットワーク] に次の情報を入力します。

    • プロジェクト: プロジェクト ID またはプロジェクト番号を入力します。
    • ネットワーク: VPC ネットワークの名前を入力します。
    1. (省略可)ネットワーク構成を最も多く制限する場合は、[外部 IP を割り当てる] チェックボックスをオフにします。

これで、プライベート プールが作成されました。

gcloud

gcloud コマンドライン ツールを使用してプライベート プールを作成するには、ターミナルで次のコマンドを入力します。

      gcloud builds worker-pools create PRIVATEPOOL_ID \
        --project=PRIVATEPOOL_PROJECT_ID \
        --region=REGION \
        --peered-network=PEERED_NETWORK \
        --no-public-egress

ここで

  • PRIVATEPOOL_ID は、プライベート プールの一意の識別子です。
  • PRIVATEPOOL_PROJECT_ID はプライベート プールを作成する Google Cloud プロジェクトの IDです。
  • REGION は、サポートされているリージョンの 1 つです。
  • PEERED_NETWORK は、ネットワーク リソースの URL です
  • --no-public-egress: このフラグが設定されている場合、プライベート プールは外部 IP アドレスなしで作成されます。

これで、プライベート プールが作成されました。

プライベート プールの作成と管理方法の詳細については、プライベート プールの作成と管理をご覧ください。

プライベート ネットワーク内の外部リソースにアクセスする

デフォルトでは、Cloud Build プライベート プールに関連付けられた外部 IP アドレスは静的または構成できません。Google Cloud によって割り当てられます。静的外部 IP を使用してプライベート ネットワークから外部リソースにアクセスするようにプライベート プールを設定するには、公共のインターネットへのリクエストをプロキシするセルフマネージド NAT ゲートウェイとして機能するように、プロジェクトで仮想マシン(VM)を設定する必要があります。その後、これらのリクエストを VM に転送するようにカスタムルートを設定して、サービス ネットワーキング プロジェクトとルートを交換する必要があります。

このセクションでは、以下の手順に従って、静的外部 IP を介して外部リソースにアクセスするようにプライベート プールを設定する方法について説明します。

  1. 起動スクリプトを作成して、VM にルーティングされたトラフィックをプロキシするように構成し、そのトラフィックを IP アドレスから発信されたかのようにマスカレードします。

    #! /bin/bash
    set -e
    
    sysctl -w net.ipv4.ip_forward=1
    IFACE=$(ip -brief link | tail -1 | awk  {'print $1'})
    iptables -t nat -A POSTROUTING -o "$IFACE" -j MASQUERADE
    
  2. プライベート プールと同じ VPC に VM を設定し、VPC 経由でリクエストをプロキシできるようにするルールを設定します。

    gcloud compute instances create VM_NAME \
      --image-project=ubuntu-os-cloud --image-family=ubuntu-2204-lts \
      --network=NETWORK_NAME \
      --private-network-ip=INTERNAL_IP --can-ip-forward \
      --zone=ZONE \
      --subnet=SUBNETWORK \
      --tags=NAT_TAG  \
      --metadata-from-file=startup-script=STARTUP_SCRIPT
    

    ここで

    • VM_NAME は、VM に付ける名前です。
    • NETWORK_NAME は、前のセクションで作成したネットワークの名前です。
    • INTERNAL_IP は、VM リージョンのサブネットワークの範囲内で有効な内部 IP アドレスです。例: 10.128.0.2
    • ZONE は、ネットワークに関連付けられたゾーンです(us-central1-a など)。
    • (省略可)SUBNETWORK は、サブネットワークの名前です。サブネットワークの名前は、サブネットの同等の REST の projects/project-id/regions/region/subnetworks/subnetwork-name の形式で確認できます。VPC ネットワークを作成するときに [サブネット接続モード] で [自動] を選択した場合、このフィールドを指定する必要はありません。
    • NAT_TAG は、この VM のタグがあるかどうかに基づいて、条件付きでリクエストをルーティングできる NAT ゲートウェイ タグの名前です。タグには任意の名前を指定できます。
    • STARTUP_SCRIPT は、前の手順で作成した起動スクリプトの名前です。例: startup-script-example.shこの例では、--metadata-from-file フラグを使用して、指定した起動スクリプトの内容を startup-script というキーに渡します。

    このコマンドを実行すると、外部 IP 値を含む出力が表示されます。外部 IP の値をメモします。プライベート プールから外部リソースへのすべてのトラフィックは、このアドレスを通過します。外部ネットワークでファイアウォール ルールを構成するなど、詳細な構成のためにこのアドレスを使用することもできます。

  3. すべてのリクエストを外部リソースに転送し、前の手順で作成したインスタンスに移動するルートを設定して、リクエストをプライベート プール インスタンスに転送できるようにします。

    gcloud compute routes create PRIVATE_POOL_ROUTE_NAME \
      --destination-range=DESTINATION_RANGE \
      --next-hop-address=INTERNAL_IP \
      --network=NETWORK_NAME \
      --priority=POOL_ROUTE_PRIORITY
    

    ここで

    • PRIVATE_POOL_ROUTE_NAME は、ルートに付ける名前です。
    • DESTINATION_RANGE は、ルーティング先の宛先を含む有効な CIDR アドレス範囲です。たとえば、GitHub Enterprise Edition インスタンスなどです。例: 8.8.8.0/24
    • INTERNAL_IP は、前のステップで取得した内部 IP 値です。例: 10.128.0.2
    • NETWORK_NAME は、前のセクションで作成したネットワークの名前です。
    • POOL_ROUTE_PRIORITY は、ルートに指定する優先度の数値です。

    このコマンドにより、プライベート プール インスタンス内のビルドからのトラフィックは、公共のインターネットに直接ルーティングされるのではなく、作成したプロキシ VM にルーティングされます。

  4. タグ付きインスタンスからプロキシから外部宛先 IP 範囲にリクエストを転送するルートを設定します。次のコマンドは、プライベート プール インスタンスに関連付けられた公共のインターネットにリクエストを転送するルートを作成します。

    gcloud compute routes create NAT_EGRESS_ROUTE_NAME \
      --destination-range=DESTINATION_RANGE \
      --next-hop-gateway=default-internet-gateway \
      --network=NETWORK_NAME \
      --priority=NAT_ROUTE_PRIORITY \
      --tags=NAT_TAG
    

    ここで

    • NAT_EGRESS_ROUTE_NAME は、NAT ゲートウェイ ルートに付ける名前です。
    • DESTINATION_RANGE は、ルーティング先の宛先のアドレスです。たとえば、GitHub Enterprise Edition インスタンスなどです。例: 8.8.8.0/24
    • NETWORK_NAME は、前のセクションで作成したネットワークの名前です。
    • NAT_TAG は、この VM のタグがあるかどうかに基づいて、条件付きでリクエストをルーティングできる NAT ゲートウェイ タグの名前です。タグには任意の名前を指定できます。
    • NAT_ROUTE_PRIORITY は、ルートに指定する優先度の数値です。

    このコマンドにより、プロキシ VM からのトラフィックを公共のインターネットに転送できるようになります。

  5. プライベート プールから NAT ゲートウェイ VM へのトラフィックを許可するファイアウォール ルールを追加します。

    gcloud compute firewall-rules create RULE_NAME \
      --direction=INGRESS --priority=FIREWALL_PRIORITY --action=ALLOW --rules=all \
      --network=NETWORK_NAME \
      --source-ranges=RESERVED_RANGE \
      --target-tags=NAT_TAG
    

    ここで

    • RULE_NAME は、ファイアウォール ルールに付ける名前です。
    • FIREWALL_PRIORITY は、ファイアウォール ルールに指定する優先度番号です。
    • NETWORK_NAME は、前のセクションで作成したネットワークの名前です。
    • RESERVED_RANGE は、VPC ネットワークを構成するときに割り当てた CIDR 範囲です。
    • NAT_TAG は、この VM のタグがあるかどうかに基づいて、条件付きでリクエストをルーティングできる NAT ゲートウェイ タグの名前です。タグには任意の名前を指定できます。

VPC 内のセルフマネージド NAT ゲートウェイの静的 IP アドレスから外部リソースにアクセスできるようになりました。

次のステップ