ポリシーベースのルートを使用する
ポリシーベースのルートを使用すると、パケットの宛先 IP アドレス以外の条件も使用してネクストホップを選択できます。このページでは、ポリシーベースのルートの作成、一覧表示、詳細の取得、削除を行う方法について説明します。
始める前に
- このガイドのコマンドラインの例を使用するには、Google Cloud CLI の最新バージョンをインストールするか、最新バージョンに更新してください。
- プロジェクトで Network Connectivity API を有効にする必要があります。
- 内部パススルー ネットワーク ロードバランサが必要です。内部パススルー ネットワーク ロードバランサが定義されているリージョン以外のリージョンからパケットがドロップされないように、グローバル アクセスを有効にすることをおすすめします。
必要なロール
ポリシーベースのルートを使用するために必要な権限を取得するには、プロジェクトに対する Compute ネットワーク管理者(roles/compute.networkAdmin
) IAM ロールを付与するように管理者に依頼してください。ロールの付与の詳細については、アクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
ポリシーベースのルートを作成する
ポリシーベースのルートを作成するときに、次の項目を指定します。
- ルートの範囲: ルートを適用できるリソース。
- 分類基準: 送信元 IP アドレス範囲、宛先 IP アドレス範囲、ルートが適用されるパケットを特定するプロトコル。ポリシーベースのルートは、指定されたすべての分類基準と一致するパケットに適用されます。
- ネクストホップ: ネクストホップの内部パススルー ネットワーク ロードバランサ、または他のポリシーベースのルートをスキップするネクストホップ。
コンソール
Google Cloud コンソールで、[ルート] に移動します。
[ルート管理] をクリックします。
[ルートを作成] をクリックします。
ルートの名前を入力します。
(省略可)説明を入力します。
[ネットワーク] をクリックして、ポリシーベースのルートを追加するネットワークを選択します。
[ルートのタイプ] をクリックし、[ポリシーベースのルート] を選択します。
[ルートの適用範囲] セクションで、次のいずれかを行います。
すべての仮想マシン(VM)インスタンス、Cloud Interconnect の VLAN アタッチメント、Virtual Private Cloud ネットワーク内の Cloud VPN トンネルにルートを適用するには、[このルートを、すべての VM インスタンス、VLAN アタッチメント、VPN トンネルに適用する] を選択します。
このタイプのルートを作成する場合は慎重に行ってください。ルートは、分類基準に一致するすべての下り(外向き)パケットに適用されます。内部パススルー ネットワーク ロードバランサのバックエンドからの下り(外向き)トラフィックにも適用されます。
特定の VM インスタンスにのみルートを適用するには、[このルートを VM インスタンスにのみ適用する] を選択して、このルートを適用する VM のネットワーク タグを入力します。複数のタグを入力する場合は、カンマ区切りのリストで指定します。
ルートの VPC ネットワーク内の Cloud Interconnect のすべての VLAN アタッチメントにルートを適用するには、[このルートを VLAN アタッチメントにのみ適用する] を選択します。
特定のリージョンの Cloud Interconnect の VLAN アタッチメントにルートを適用するには、[このルートを VLAN アタッチメントにのみ適用する] を選択してから、VLAN アタッチメントのリージョンを選択します。特定の VLAN アタッチメントに適用されるポリシーベースのルートを作成することはできません。
[分類の基準] セクションで、次の操作を行います。
- ソース IP 範囲を入力します。
- 宛先 IP の範囲を入力します。
- [プロトコル] をクリックして、このルートを適用するプロトコルを選択します。
優先度を入力します。
[ネクストホップ] セクションで [ネクストホップ] をクリックし、次の操作を行います。
ネクストホップの内部パススルー ネットワーク ロードバランサを指定するには、[内部パススルー ネットワーク ロードバランサの転送ルールを指定する] を選択して、次の操作を行います。
- 既存の転送ルールのリストから転送ルールを選択するには:
- [現在のプロジェクト内の内部ロードバランサの転送ルールで使用中] を選択します。
- [転送ルールの IP アドレス] をクリックして、選択したプロジェクトの内部ロードバランサに関連付けられている IP アドレスを選択します。
IP アドレスを入力するには:
- [未使用] を選択します。
[転送ルールの IP アドレス] フィールドに、プレフィックス長を含めずに IP アドレスを入力します。IP アドレスは、次のいずれかから取得する必要があります。
- このポリシーベースのルートを作成する VPC ネットワークの IP アドレス範囲。
- VPC ネットワーク ピアリング(プレビュー)を介してルートの VPC ネットワークに接続されている VPC ネットワークの IP アドレス範囲。
内部パススルー ネットワーク ロードバランサの転送ルールに関連付けられている IP アドレスを指定することも、このポリシーベースのルートの作成後に未使用の IP アドレスを指定して転送ルールを作成することもできます。
- 既存の転送ルールのリストから転送ルールを選択するには:
他のポリシーベースのルートをスキップするポリシーベースのルートを作成するには、[他のポリシーベースのルートをスキップする] を選択します。
[作成] をクリックします。
gcloud
policy-based-routes create
コマンドを使用します。
すべての VM インスタンス、Cloud Interconnect の VLAN アタッチメント、Virtual Private Cloud ネットワークの Cloud VPN トンネルにルートを適用するには、次のコマンドを使用します。
このタイプのルートを作成する場合は慎重に行ってください。ルートは、分類基準に一致するすべての下り(外向き)パケットに適用されます。内部パススルー ネットワーク ロードバランサのバックエンドからの下り(外向き)トラフィックにも適用されます。
gcloud network-connectivity policy-based-routes create ROUTE_NAME \ --source-range=SOURCE_RANGE \ --destination-range=DESTINATION_RANGE \ --ip-protocol=PROTOCOL \ --protocol-version=IP_VERSION \ --network="projects/PROJECT_ID/global/networks/NETWORK" \ --next-hop-ilb-ip=NEXT_HOP \ --description=DESCRIPTION \ --priority=PRIORITY
次のように置き換えます。
ROUTE_NAME
: ポリシーベースのルートの名前。SOURCE_RANGE
: 送信元 IP の CIDR 範囲。DESTINATION_RANGE
: 宛先 IP の CIDR 範囲。PROTOCOL
: 転送するトラフィックのプロトコル。ALL
、TCP
、またはUDP
を指定できます。デフォルトはALL
です。IP_VERSION
: このルートが適用される単一のインターネット プロトコル バージョン。IPv4
またはIPv6
(プレビュー版)のいずれかを指定します。デフォルトはIPv4
です。IPv6
を指定するには、Google Cloud CLI のベータ版を使用します。PROJECT_ID
: プロジェクトの ID。NETWORK
: ポリシーベースのルートを適用するネットワークの名前。NEXT_HOP
: ルートのネクストホップ内部パススルー ネットワーク ロードバランサの単一の IP アドレス(プリフィックス長なし)。IPv4 トラフィックのネクストホップとして IPv4 アドレスを指定するか、IPv6 トラフィック用の IPv6 アドレスを指定します(プレビュー)。ロードバランサは、ポリシーベースのルートと同じ VPC ネットワーク内、または VPC ネットワーク ピアリング(プレビュー)を介してルートの VPC ネットワークに接続されている VPC ネットワーク内に配置する必要があります。ルートが IPv6 トラフィック(プレビュー)に適用される場合は、デュアルスタック サブネットを使用してロードバランサを設定する必要があります。
ピア VPC ネットワークの IPv6 アドレスまたは IP アドレスを指定するには、Google Cloud CLI のベータ版を使用します。
DESCRIPTION
: ルートの説明(省略可)。PRIORITY
: 他のポリシーベースのルートと比較したポリシーベースのルートの優先度。
特定の VM インスタンスにのみルートを適用するには、次のコマンドを使用します。
gcloud network-connectivity policy-based-routes create ROUTE_NAME \ --source-range=SOURCE_RANGE \ --destination-range=DESTINATION_RANGE \ --ip-protocol=PROTOCOL \ --protocol-version=IP_VERSION \ --network="projects/PROJECT_ID/global/networks/NETWORK" \ --next-hop-ilb-ip=NEXT_HOP \ --description=DESCRIPTION \ --priority=PRIORITY \ --tags=NETWORK_TAGS
NETWORK_TAGS
は、ルートを適用する VM の 1 つ以上のネットワーク タグに置き換えます。複数のタグを入力する場合は、カンマ区切りのリストで指定します。Cloud Interconnect の VLAN アタッチメントにのみルートを適用するには、次のコマンドを使用します。ルートは、特定のリージョン内の Cloud Interconnect の VLAN アタッチメント、または VPC ネットワーク内の Cloud Interconnect のすべての VLAN アタッチメントのいずれかに適用できます。
gcloud network-connectivity policy-based-routes create ROUTE_NAME \ --source-range=SOURCE_RANGE \ --destination-range=DESTINATION_RANGE \ --ip-protocol=PROTOCOL \ --protocol-version=IP_VERSION \ --network="projects/PROJECT_ID/global/networks/NETWORK" \ --next-hop-ilb-ip=NEXT_HOP \ --description=DESCRIPTION \ --priority=PRIORITY \ --interconnect-attachment-region=INTERCONNECT_REGION
INTERCONNECT_REGION
は、ルートを適用する Cloud Interconnect の VLAN アタッチメントのリージョンに置き換えます。ルートの VPC ネットワーク内の Cloud Interconnect のすべての VLAN アタッチメントにポリシーベースのルートを適用するには、all
を使用します。ネットワーク タグで識別される特定の VM に対する他のポリシーベースのルートをスキップするネクストホップを指定するには、次のコマンドを使用します。
gcloud network-connectivity policy-based-routes create ROUTE_NAME \ --source-range=SOURCE_RANGE \ --destination-range=DESTINATION_RANGE \ --ip-protocol=PROTOCOL \ --protocol-version=IP_VERSION \ --network="projects/PROJECT_ID/global/networks/NETWORK" \ --next-hop-other-routes=DEFAULT_ROUTING \ --description=DESCRIPTION \ --priority=PRIORITY \ --tags=NETWORK_TAGS
API
POST
リクエストを policyBasedRoutes.create
メソッドに送信します。
POST https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/global/policyBasedRoutes?policyBasedRouteId=ROUTE_NAME
すべての VM インスタンス、Cloud Interconnect の VLAN アタッチメント、Virtual Private Cloud ネットワークの Cloud VPN トンネルにルートを適用するには、次のリクエスト本文を含めます。
このタイプのルートを作成する場合は慎重に行ってください。ルートは、分類基準に一致するすべての下り(外向き)パケットに適用されます。内部パススルー ネットワーク ロードバランサのバックエンドからの下り(外向き)トラフィックにも適用されます。
{ "filter": { "srcRange": "SOURCE_RANGE", "destRange": "DESTINATION_RANGE", "ipProtocol": "PROTOCOL", "protocolVersion": "IP_VERSION" }, "network": "projects/PROJECT_ID/global/networks/NETWORK", "nextHopIlbIp": "NEXT_HOP", "description": "DESCRIPTION", "priority": "PRIORITY" }
次のように置き換えます。
PROJECT_ID
: プロジェクトの ID。ROUTE_NAME
: ポリシーベースのルートの名前。SOURCE_RANGE
: 送信元 IP の CIDR 範囲。DESTINATION_RANGE
: 宛先 IP の CIDR 範囲。PROTOCOL
: 転送するトラフィックのプロトコル。ALL
、TCP
、またはUDP
を指定できます。デフォルトはALL
です。IP_VERSION
: ルートが適用される単一のインターネット プロトコル バージョン。IPv4
またはIPv6
(プレビュー版)のいずれかを指定します。デフォルトはIPv4
です。IPv6
アドレスを指定するには、v1beta API を使用します。NETWORK
: ポリシーベースのルートを適用するネットワークの名前。ルートは、このネットワーク内で他の一致条件を満たすインスタンスからの下り(外向き)トラフィックに適用されます。NEXT_HOP
: ルートのネクストホップ内部パススルー ネットワーク ロードバランサの単一の IP アドレス(プリフィックス長なし)。IPv4 トラフィックのネクストホップとして IPv4 アドレスを指定するか、IPv6 トラフィック用の IPv6 アドレスを指定します(プレビュー)。ロードバランサは、ポリシーベースのルートと同じ VPC ネットワーク内、または VPC ネットワーク ピアリング(プレビュー)を介してルートの VPC ネットワークに接続されている VPC ネットワーク内に配置する必要があります。ルートが IPv6 トラフィック(プレビュー)に適用される場合は、デュアルスタック サブネットを使用してロードバランサを設定する必要があります。
ピア VPC ネットワークの IPv6 アドレスまたは IP アドレスを指定するには、v1beta API を使用します。
DESCRIPTION
: ルートの説明(省略可)。PRIORITY
: 他のポリシーベースのルートと比較したポリシーベースのルートの優先度。
特定の VM インスタンスにのみルートを適用するには、次のリクエスト本文を含めます。
{ "filter": { "srcRange": "SOURCE_RANGE", "destRange": "DESTINATION_RANGE", "ipProtocol": "PROTOCOL", "protocolVersion": "IP_VERSION" }, "network": "projects/PROJECT_ID/global/networks/NETWORK", "nextHopIlbIp": "NEXT_HOP", "description": "DESCRIPTION", "priority": "PRIORITY", "virtualMachine": { "tags": [ "NETWORK_TAGS" ] } }
NETWORK_TAGS
は、1 つ以上のネットワーク タグに置き換えます。ポリシーベースのルートは、これらのタグが 1 つ以上あるインスタンスからの下り(外向き)トラフィックに適用されます。複数のタグを使用する場合は、"tag1","tag2","tag3"
の形式で指定します。Cloud Interconnect の VLAN アタッチメントにのみルートを適用するには、次のリクエスト本文を含めます。特定の VLAN アタッチメントに適用されるポリシーベースのルートを作成することはできません。
{ "filter": { "srcRange": "SOURCE_RANGE", "destRange": "DESTINATION_RANGE", "ipProtocol": "PROTOCOL", "protocolVersion": "IP_VERSION" }, "interconnectAttachment": { "region": "INTERCONNECT_REGION" }, "network": "projects/PROJECT_ID/global/networks/NETWORK", "nextHopIlbIp": "NEXT_HOP", "description": "DESCRIPTION", "priority": "PRIORITY" }
INTERCONNECT_REGION
は、このルートを適用する Cloud Interconnect の VLAN アタッチメントのリージョンに置き換えます。ルートの VPC ネットワーク内の Cloud Interconnect のすべての VLAN アタッチメントにポリシーベースのルートを適用するには、all
を使用します。ネットワーク タグで識別される特定の VM に対する他のポリシーベースのルートをスキップするネクストホップを指定するには、次のコマンドを使用します。
{ "filter": { "srcRange": "SOURCE_RANGE", "destRange": "DESTINATION_RANGE", "ipProtocol": "PROTOCOL", "protocolVersion": "IP_VERSION" }, "network": "projects/PROJECT_ID/global/networks/NETWORK", "nextHopOtherRoutes": "DEFAULT_ROUTING", "description": "DESCRIPTION", "priority": "PRIORITY", "virtualMachine": { "tags": [ "NETWORK_TAGS" ] } }
ポリシーベースのルートの接続を確認する
接続テストは、ネットワーク内のエンドポイント間の接続を確認できる診断ツールです。構成を分析し、場合によってはランタイム検証を行うこともあります。接続テストでは、ポリシーベースのルートがサポートされています。ポリシーベースのルートで接続テストを実行するには、接続テストを作成して実行するをご覧ください。
ポリシーベースのルートを一覧表示する
ポリシーベース ルートを一覧表示すると、プロジェクト、ネットワーク、リージョンのすべてのポリシーベースのルートを表示できます。
コンソール
Google Cloud コンソールで、[ルート] に移動します。
VPC ネットワークとリージョン内のすべてのポリシーベースのルートを表示するには、次の操作を行います。
- [適用されているルート] をクリックします。
- [ネットワーク] をクリックして、ネットワークを選択します。
- [リージョン] をクリックして、リージョンを選択します。
- [表示] をクリックします。
プロジェクト内のすべてのポリシーベースのルートを表示するには、次の操作を行います。
- [ルート管理] をクリックします。
gcloud
policy-based-routes list
コマンドを使用します。
gcloud network-connectivity policy-based-routes list
API
GET
リクエストを policyBasedRoutes.list
メソッドに送信します。
GET https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/global/policyBasedRoutes
PROJECT_ID
は、ポリシーベースのルートを一覧表示するプロジェクトの ID に置き換えます。
ポリシーベースのルートの説明を取得する
ポリシーベースのルートの説明を取得して、ルートの詳細を確認できます。
コンソール
Google Cloud コンソールで、[ルート] に移動します。
[適用されているルート] をクリックします。
[ネットワーク] をクリックして、ネットワークを選択します。
[リージョン] をクリックして、リージョンを選択します。
[表示] をクリックします。
ポリシーベースのルートの名前をクリックして、詳細を表示します。
gcloud
ポリシーベースのルートの説明を取得するには、policy-based-routes describe
コマンドを使用します。
gcloud network-connectivity policy-based-routes describe NAME
NAME
は、説明を取得するルートの名前に置き換えます。
API
GET
リクエストを policyBasedRoutes.get
メソッドに送信します。
GET https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/global/policyBasedRoutes/ROUTE_NAME
次のように置き換えます。
PROJECT_ID
: プロジェクトの ID。ROUTE_NAME
: 説明を取得するポリシーベースのルートの名前。
ポリシーベースのルートを削除する
ポリシーベースのルートを削除して、VPC ネットワークから削除できます。
コンソール
Google Cloud コンソールで、[ルート] に移動します。
[適用されているルート] をクリックします。
[ネットワーク] をクリックして、ネットワークを選択します。
[リージョン] をクリックして、リージョンを選択します。
[表示] をクリックします。
ポリシーベースのルートの名前をクリックします。
[削除] をクリックし、確認のためもう一度 [削除] をクリックします。
gcloud
ポリシーベースのルートを削除するには、policy-based-routes delete
コマンドを使用します。
gcloud network-connectivity policy-based-routes delete NAME
NAME
は、削除するルートの名前に置き換えます。
API
DELETE
リクエストを policyBasedRoutes.delete
メソッドに送信します。
DELETE https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/global/policyBasedRoutes/ROUTE_NAME
次のように置き換えます。
PROJECT_ID
: プロジェクトの ID。ROUTE_NAME
: 削除するポリシーベースのルートの名前。
互換性
次の方法でポリシーベースのルートを使用するには、特別な構成が必要です。
GKE でポリシーベースのルートを使用する
Google Kubernetes Engine(GKE)クラスタがある VPC ネットワークにポリシーベースのルートを作成する場合は、次の点に注意してください。
- 宛先にクラスタノードまたは Pod の IP アドレスが含まれるポリシーベースのルートは作成しないでください。
- 宛先にクラスタ コントロール プレーンのプライベート エンドポイントが含まれるポリシーベースのルートは作成しないでください。
- 一部の一般公開 Google Kubernetes Engine(GKE)クラスタには、Private Service Connect コントロール プレーンのプライベート エンドポイントが含まれています。こうしたクラスタの場合、デフォルトでは、GKE はクラスタのサブネットのプライマリ IPv4 アドレス範囲に Private Service Connect コントロール プレーンのプライベート エンドポイントを作成します。Private Service Connect コントロール プレーンのプライベート エンドポイントに、(同じリージョン内のサブネットの)カスタム サブネット範囲を選択する場合は、クラスタを作成してコントロール プレーン IP 範囲を選択するをご覧ください。
- 限定公開 GKE クラスタを作成する場合は、コントロール プレーンのプライベート エンドポイント(
--master-ipv4-cidr
)の IP アドレス範囲を指定します。ただし、宛先にこの範囲が含まれるポリシーベースのルートは作成しないでください。詳細については、限定公開クラスタ内のエンドポイントをご覧ください。
公開サービス用のポリシーベースのルートと Private Service Connect
ポリシーベースのルートを使用して、VM から公開サービス用の Private Service Connect エンドポイントまたは公開サービス用の Private Service Connect バックエンドにトラフィックを転送することはできません。公開サービスにポリシーベースのルートと Private Service Connect を使用する場合:
- ネットワーク タグを使用して、ポリシーベースのルートが特定の VM に適用されるようにします。
0.0.0.0/0
の送信元または宛先の IP アドレス範囲を使用してポリシーベースのルートを作成しないでください。- Private Service Connect エンドポイントまたはバックエンドの IP アドレスを含む宛先範囲を使用してポリシーベースのルートを作成する必要がある場合は、他のポリシーベースのルートをスキップする、優先度の高いポリシーベースのルートを作成します。Private Service Connect エンドポイントまたはバックエンドの IP アドレスを含む、より狭い IP アドレス範囲を使用して、優先度の高いポリシーベースのルートの宛先を構成します。
ポリシーベースのルートと、Google API およびサービスへのアクセス
Google Cloud では、他の VM インスタンスまたはカスタム ネクストホップを経由して Google API とサービスにトラフィックを転送することはできません(ポリシーベースのルートでネクストホップ内部パススルー ネットワーク ロードバランサの VM バックエンドに転送することもできません)。
次のいずれかの方法で Google API とサービスにアクセスする場合は、次のセクションのベスト プラクティスをご覧ください。
- 限定公開の Google アクセスを使用して Google API とサービスにアクセスする
- 外部 IP アドレスを持つ VM から Google API とサービスにアクセスする
- Google API 用の Private Service Connect エンドポイントを使用する
- Google API 用の Private Service Connect バックエンドを使用する
ベスト プラクティス
前述の方法で Google API とサービスにアクセスする場合は、次のベスト プラクティスに従うことをおすすめします。
- ネットワーク タグを使用して、ポリシーベースのルートが特定の VM に適用されるようにします。
0.0.0.0/0
の送信元または宛先の範囲を使用してポリシーベースのルートを作成しないでください。- Google API とサービス、Google API の Private Service Connect エンドポイント、API 用の Private Service Connect バックエンドで使用される宛先範囲を含むポリシーベースのルートを作成する場合は、優先度の高いポリシーベースのルートを作成して、他のポリシーベースのルートをスキップしてください。優先度の高いポリシーベースのルートの宛先は、使用する Google API とサービス、Private Service Connect エンドポイント、または Private Service Connect バックエンドの IP アドレスと一致するように設定します。Google API とサービスで使用される IP アドレス範囲には、次のものがあります。
- Google API とサービスで使用されるデフォルト ドメインの IP アドレス
- 限定公開の Google アクセスの仮想 IP アドレス(VIP):
private.googleapis.com
(199.36.153.8/30)restricted.googleapis.com
(199.36.153.4/30)