静的外部 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 Connection] タブをクリックします。

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

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

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

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

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

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

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

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

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

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

      1. [割り当て] で、IP 範囲を選択します。

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

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

      [有効にする](カスタムルートのエクスポート)をクリックして、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 は、サポートされているリージョンの一つです。
  • PEERED_NETWORK は、ネットワーク リソースの URL です
  • --no-public-egress: このフラグが設定されている場合、プライベート プールは外部 IP アドレスなしで作成されます。

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

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

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

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

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

  1. 起動スクリプトを作成して、VM にルーティングされるトラフィックをプロキシするように 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 アドレスから外部リソースにアクセスできるようになりました。

次のステップ