このページでは、静的外部 IP を介して外部リソースにアクセスするようにプライベート プールを設定する方法について説明します。
このタスクを Google Cloud コンソールで直接行う際の順を追ったガイダンスについては、「ガイドを表示」をクリックしてください。
準備
-
Enable the Cloud Build, Compute Engine, and Service Networking APIs.
プライベート接続を設定するために必要な権限を取得するには、VPC ネットワークが存在する Cloud プロジェクトに対する Compute Engine ネットワーク管理者(
roles/compute.networkAdmin
)の IAM ロールの付与を管理者に依頼してください。ロールの付与の詳細については、アクセスの管理をご覧ください。このページで
gcloud
コマンドを使用するには、Google Cloud CLI をインストールします。
VPC ネットワークの作成
コンソール
Google Cloud コンソールを使用して VPC ネットワークを作成するには、次の手順に沿って操作します。
Google Cloud コンソールで [VPC ネットワーク] ページを開きます。
[VPC ネットワークを作成] をクリックして、新しいネットワークを作成します。
[VPC ネットワークの作成] ページが表示されます。
ネットワークの名前を入力します。
[サブネット作成モード] で [自動] を選択します。
他のフィールドをさらにカスタマイズする場合は、VPC ネットワークの作成と管理をご覧ください。それ以外の場合は、すべてのフィールドをそのままにします。
[作成] をクリックして VPC ネットワークを作成します。
[作成] をクリックすると、[VPC ネットワーク] ページに新しい VPC ネットワークが表示されます。
gcloud
gcloud
コマンドライン ツールを使用して VPC ネットワークを作成するには、ターミナルで次のコマンドを入力します。ここで、NETWORK_NAME は VPC ネットワークの名前です。
gcloud compute networks create NETWORK_NAME \
--subnet-mode=auto
[作成] をクリックすると、[VPC ネットワーク] ページに新しい VPC ネットワークが表示されます。
VPC ネットワークの作成と管理の詳細については、VPC ネットワークの作成と管理をご覧ください。
プライベート接続の作成
コンソール
VPC ネットワークとサービス プロデューサー ネットワークの間にプライベート接続を作成するには、次の手順に沿って操作します。
Google Cloud コンソールで [VPC ネットワーク] ページを開きます。
ネットワーク名をクリックします。
[VPC ネットワークの詳細] ページが表示されます。
[Private Service Connect] タブをクリックします。
[サービスに割り当てられた IP 範囲] を選択します。
[IP 範囲の割り当て] をクリックします。
[内部 IP 範囲の割り振り] ポップアップ ボックスが表示されます。
IP 範囲の名前を入力します。
[IP 範囲] で [自動] を選択します。
[プレフィックスの長さ] フィールドに、ネットワークのプレフィックス長を入力します。
[割り当て] をクリックして、IP 範囲を割り当てます。
[サービスへのプライベート接続] タブを選択します。
[接続を作成] をクリックします。
[プライベート接続の作成] ポップアップが表示されます。
[アサインされた割り当て] で、IP 範囲を選択します。
[Connect] をクリックします。
[サービスのプライベート接続] タブの表に接続が表示されます。
[有効にする](カスタムルートのエクスポート)をクリックして、VPC のルートがプライベート プール インスタンスが実行されているネットワークに適用されていることを確認します。
これでネットワークが構成されました。
gcloud
VPC ネットワークとサービス プロデューサー ネットワークの間にプライベート接続を作成するには、次の手順に沿って操作します。
ターミナルに次のコマンドを入力して、サービスに 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 です。
- RESERVED_RANGE_NAME は割り当て範囲の名前です。例:
ターミナルで次のコマンドを入力して、プライベート接続を作成します。
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 です。
ターミナルで次のコマンドを入力して、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_NETWORK は VPC ネットワークの名前です(例:
これでネットワークが構成されました。
ネットワークの構成の詳細については、VPC ネットワークとサービス プロデューサー ネットワーク間のプライベート接続を設定するをご覧ください。
プライベート プールを作成する
コンソール
Google Cloud コンソールを使用してプライベート プールを作成するには、次の手順を行います。
Google Cloud コンソールで [ワーカープール] ページを開きます。
プライベート プールを作成するプロジェクトを選択します。
[ワーカープール] ページで、[作成] をクリックします。
[プライベート プールの作成] パネルが表示されます。
[プライベート プールの作成] サイドパネルで、次の情報を入力します。
プライベート プールの名前を入力します。
プルダウン メニューから [リージョン] を選択します。
[ネットワーク] に次の情報を入力します。
- プロジェクト: プロジェクト ID またはプロジェクト番号を入力します。
- ネットワーク: VPC ネットワークの名前を入力します。
- (省略可)ネットワーク構成を最も多く制限する場合は、[外部 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 を介して外部リソースにアクセスするようにプライベート プールを設定する方法について説明します。
起動スクリプトを作成して、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
プライベート プールと同じ 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 の値をメモします。プライベート プールから外部リソースへのすべてのトラフィックは、このアドレスを通過します。外部ネットワークでファイアウォール ルールを構成するなど、詳細な構成のためにこのアドレスを使用することもできます。
すべてのリクエストを外部リソースに転送し、前の手順で作成したインスタンスに移動するルートを設定して、リクエストをプライベート プール インスタンスに転送できるようにします。
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 にルーティングされます。
タグ付きインスタンスからプロキシから外部宛先 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 からのトラフィックを公共のインターネットに転送できるようになります。
プライベート プールから 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 アドレスから外部リソースにアクセスできるようになりました。
次のステップ
- プライベート プールの詳細を確認する。
- プライベート プールを作成するための環境を設定する方法を確認する。
- プライベート プールを使用してプライベート JFrog Artifactory のリソースにアクセスする方法を学習する。