ワークロード VM のインターネット アクセスを構成する

Google Cloud VMware Engine では、VMware ワークロードのインターネット アクセス ネットワーク サービスをリージョン単位で構成します。Google Cloud のインターネット エッジまたはオンプレミス接続を使用して、ワークロード VM からインターネットに向かうトラフィックを転送できます。

インターネットにアクセスできるワークロード VM も、限定公開の Google アクセスを使用して Google Cloud サービスにアクセスできます。限定公開の Google アクセスを使用して Google Cloud サービスへアクセスしても、Google Cloud ネットワーク内に留まり、インターネットに接続することはできません。

インターネット アクセス ネットワーク サービスは、以下をサポートしています。

  • リージョンごとに最大 100 個のパブリック IP アドレス
  • ファイアウォール テーブルあたり最大 300 個のファイアウォール ルール
  • リージョンごとに 128k の同時接続で最大 2 Gbps のスループット
  • TCP、UDP、ICMP プロトコル

インターネット アクセス ネットワーク サービスは、アプリケーション レベル ゲートウェイ(ALG)機能をサポートしていません。

始める前に

プライベート クラウドのインターネット アクセス設定を変更するには、VMware Engine に対する管理者権限が必要です。

インターネット アクセスを有効にするには、Edge サービスの CIDR アドレス範囲が必要です。インターネット アクセスまたはパブリック IP ネットワーク サービスを有効にすると、サービス テナント コンテキストの中でゲートウェイがデプロイされます。

VMware Engine のインターネット ゲートウェイとパブリック IP ゲートウェイのアドレスには、Edge サービスの CIDR アドレス範囲を使用します。アドレス範囲は、次の要件を満たしている必要があります。

  • プライベート範囲として RFC 1918 に準拠する。
  • 他の VMware Engine アドレス範囲(管理アプライアンスや NSX-T セグメントに使用されるアドレス範囲など)と重複しない。
  • Virtual Private Cloud(VPC)ネットワーク サブネットやオンプレミス ネットワークに使用されるような、VMware Engine にアドバタイズされるアドレス範囲と重複しない。
  • 26 サブネット マスク ビット(/26)を IP アドレス範囲専用にする。

Google Cloud CLI と API の要件

gcloud コマンドライン ツールまたは API を使用して VMware Engine リソースを管理するには、以下で説明するようにツールを構成することをおすすめします。

gcloud

  1. デフォルトのプロジェクト ID を設定します。

    gcloud config set project PROJECT_ID
    
  2. デフォルトのリージョンとゾーンを設定します。

    gcloud config set compute/region REGION
    
    gcloud config set compute/zone ZONE
    

gcloud vmware ツールの詳細については、Cloud SDK リファレンス ドキュメントをご確認ください

API

このドキュメント セットの API の例では、cURL コマンドライン ツールを使用して API がクエリされています。cURL リクエストには、有効なアクセス トークンが必要です。有効なアクセス トークンを取得するにはさまざまな方法があります。次の手順では、gcloud ツールを使用してアクセス トークンを生成します。

  1. Google Cloud にログインします。

    gcloud auth login
    
  2. アクセス トークンを生成して TOKEN にエクスポートします。

    export TOKEN=`gcloud auth print-access-token`
    
  3. TOKEN が正しく設定されていることを確認します。

    echo $TOKEN
    

API へのリクエストで認証トークンを使用します。次に例を示します。

curl -X GET -H "Authorization: Bearer \"$TOKEN\"" -H "Content-Type: application/json; charset=utf-8" https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations

Python

このドキュメントの Python コードサンプルは、VMware Engine ライブラリを使用して API と通信します。このアプローチを使用するには、ライブラリをインストールし、アプリケーションのデフォルト認証情報を構成する必要があります。

  1. Python ライブラリをダウンロードしてインストールします。

    pip install google-cloud-vmwareengine
    
  2. シェルで次のコマンドを実行して、ADC 情報を構成します。

    gcloud auth application-default login
    

    または、サービス アカウント キー ファイルを使用します。

    export GOOGLE_APPLICATION_CREDENTIALS="FILE_PATH"
    

ライブラリの詳細については、リファレンス ページまたは GitHub のコードサンプルをご覧ください。

インターネット アクセス サービスを構成する

ネットワーク ポリシーを作成または更新すると、ワークロード VM からインターネットにアクセスできるようになります。

デフォルトでは、インターネット アクセス ネットワーク サービスは無効になっています。

リージョンでインターネット アクセス サービスを有効にする

コンソール

リージョンでインターネット アクセス サービスを有効にするには、次の操作を行います。

  1. Google Cloud コンソールで [ネットワーク ポリシー] ページに移動します。

    [ネットワーク ポリシー] に移動

  2. [作成] をクリックして、新しいポリシーを作成します。既存のネットワーク ポリシーを編集する場合は、行の最後にある [その他 ] アイコンをクリックして、[編集] を選択します。

  3. ポリシーを適用するネットワークとリージョンの選択といった、ネットワーク ポリシーの詳細を入力します。

  4. [Internet access] を [Enabled] に切り替え、必要に応じて [External IP address service] を有効にします。

  5. [Edge Services CIDR] フィールドに、VMware Engine インターネット ゲートウェイのアドレス指定に使用するアドレス範囲(/26 アドレス範囲)を入力します。

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

オペレーションが完了すると、通常数分後に、サービスのステータスが「有効」に変わります。

gcloud

gcloud ツールを使用して、ネットワーク ポリシーを作成します。

gcloud vmware network-policies create NETWORK_POLICY_NAME \
    --vmware-engine-network projects/PROJECT_ID/locations/LOCATIONS/vmwareEngineNetworks/NETWORK_ID \
    --edge-services-cidr=IP_RANGE \
    --location=LOCATION \
    --internet-access

以下のように置き換えます。

  • NETWORK_POLICY_NAME: このネットワーク ポリシーの名前
  • NETWORK_ID: このネットワーク ポリシーが適用されるネットワーク
  • IP_RANGE: インターネット アクセス ゲートウェイと外部 IP アクセス ゲートウェイに使用する CIDR 範囲(CIDR 表記)。接頭辞が /26 の RFC 1918 CIDR ブロックが必要です。
  • LOCATION: レガシー ネットワークまたは標準ネットワークのリージョンの場合は global

API

curl -X POST -H "Authorization: Bearer TOKEN"  -H "Content-Type: application/json; charset=utf-8" https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/networkPolicies?networkPolicyId=NETWORK_POLICY_NAME

'{
  "vmwareEngineNetwork":"projects/PROJECT_ID/locations/LOCATION/vmwareEngineNetworks/NETWORK_ID",
  "edgeServiceCidr":IP_RANGE,
  "internetAccess: {
    "enabled": true
   },
   "externalIp": {
     "enabled": true
   }
}"

以下のように置き換えます。

  • NETWORK_POLICY_NAME: このネットワーク ポリシーの名前REGION-default の形式にする必要があります。
  • PROJECT_ID: このリクエストのプロジェクト ID
  • LOCATION: レガシー ネットワークまたは標準ネットワークのリージョンの場合は global
  • IP_RANGE: インターネット アクセス ゲートウェイと外部 IP アクセス ゲートウェイに使用する CIDR 範囲(CIDR 表記)。接頭辞が /26 の RFC 1918 CIDR ブロックが必要です。
  • NETWORK_ID: このネットワーク ポリシーのネットワーク

Python

from google.api_core import operation
from google.cloud import vmwareengine_v1


def create_network_policy(
    project_id: str,
    region: str,
    ip_range: str,
    internet_access: bool,
    external_ip: bool,
) -> operation.Operation:
    """
    Creates a new network policy in a given network.

    Args:
        project_id: name of the project you want to use.
        region: name of the region you want to use. I.e. "us-central1"
        ip_range: the CIDR range to use for internet access and external IP access gateways,
            in CIDR notation. An RFC 1918 CIDR block with a "/26" suffix is required.
        internet_access: should internet access be allowed.
        external_ip: should external IP addresses be assigned.

    Returns:
        An operation object representing the started operation. You can call its .result() method to wait for
        it to finish.

    Raises:
        ValueError if the provided ip_range doesn't end with /26.
    """
    if not ip_range.endswith("/26"):
        raise ValueError(
            "The ip_range needs to be an RFC 1918 CIDR block with a '/26' suffix"
        )

    network_policy = vmwareengine_v1.NetworkPolicy()
    network_policy.vmware_engine_network = f"projects/{project_id}/locations/{region}/vmwareEngineNetworks/{region}-default"
    network_policy.edge_services_cidr = ip_range
    network_policy.internet_access.enabled = internet_access
    network_policy.external_ip.enabled = external_ip

    request = vmwareengine_v1.CreateNetworkPolicyRequest()
    request.network_policy = network_policy
    request.parent = f"projects/{project_id}/locations/{region}"
    request.network_policy_id = f"{region}-default"

    client = vmwareengine_v1.VmwareEngineClient()
    return client.create_network_policy(request)

リージョンでインターネット アクセス サービスを無効にする

リージョンでインターネット アクセス サービスを無効にするには、次の操作を行います。

コンソール

  1. Google Cloud コンソールで [ネットワーク ポリシー] ページに移動します。

    [ネットワーク ポリシー] に移動

  2. 関連するネットワーク ポリシーに対応する行で、[その他 ] アイコンをクリックします。

  3. [Internet access] を [Disabled] に切り替えます。

    • インターネット アクセスを無効にする前に、パブリック IP サービスを無効にする必要があります。
    • パブリック IP サービスを無効にする前に、割り振られたパブリック IP アドレスとポイント対サイト VPN ゲートウェイを削除する必要があります。
  4. [保存] をクリックします。

オペレーションが完了すると、通常数分後に、サービスのステータスが「無効」に変わります。

gcloud

gcloud ツールを使用して、ネットワーク ポリシーを更新します。

gcloud vmware network-policies update NETWORK_POLICY_NAME \
  --no-internet-access \
  --location LOCATION

以下のように置き換えます。

  • NETWORK_POLICY_NAME: このネットワーク ポリシーの名前
  • LOCATION: レガシー ネットワークまたは標準ネットワークのリージョンの場合は global

API

curl -X PATCH -H "Authorization: Bearer TOKEN"  -H "Content-Type: application/json; charset=utf-8" https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/networkPolicies/NETWORK_POLICY_NAME?updateMask=internetAccess.enabled,externalIp.enabled -d "{
  "internetAccess: {
    "enabled": false
 },
  "externalIp": {
    "enabled": false
   }
}"

以下のように置き換えます。

  • PROJECT_ID: このリクエストのプロジェクト ID
  • LOCATION: レガシー ネットワークまたは標準ネットワークのリージョンの場合は global
  • NETWORK_POLICY_NAME: このネットワーク ポリシーの名前

Python

from google.api_core import operation
from google.cloud import vmwareengine_v1


def update_network_policy(
    project_id: str, region: str, internet_access: bool, external_ip: bool
) -> operation.Operation:
    """
    Updates a network policy in a given network.

    Args:
        project_id: name of the project you want to use.
        region: name of the region you want to use. I.e. "us-central1".
        internet_access: should internet access be allowed.
        external_ip: should external IP addresses be assigned.

    Returns:
        An operation object representing the started operation. You can call its .result() method to wait for
        it to finish.
    """

    client = vmwareengine_v1.VmwareEngineClient()
    request = vmwareengine_v1.UpdateNetworkPolicyRequest()
    request.update_mask = "internetAccess.enabled,externalIp.enabled"
    network_policy = vmwareengine_v1.NetworkPolicy()
    network_policy.name = (
        f"projects/{project_id}/locations/{region}/networkPolicies/{region}-default"
    )
    network_policy.vmware_engine_network = f"projects/{project_id}/locations/{region}/vmwareEngineNetworks/{region}-default"
    network_policy.internet_access.enabled = internet_access
    network_policy.external_ip.enabled = external_ip

    request.network_policy = network_policy

    return client.update_network_policy(request)

ワークロードのインターネット アクセスにオンプレミス接続を使用する

オンプレミス接続を介して、VMware Engine のワークロード VM からインターネットに向かうトラフィックを転送できます。トラフィックは、次の状態に基づいて転送されます。

  • オンプレミスからのデフォルト ルート(0.0.0.0/0)のアドバタイズ
  • VMware Engine のパブリック IP サービス
  • VMware Engine インターネット アクセス サービス
  • VPC ネットワークと VMware Engine 間の VPC ピアリング接続での VPC Service Controls

オンプレミス接続を介したインターネット トラフィックのルーティングを有効にする

オンプレミス接続を介してワークロード VM からインターネットにアクセスするには、次の 2 つの手順を完了する必要があります。

  1. オンプレミス接続(Cloud VPN または Cloud Interconnect)を介して、オンプレミスからデフォルト ルート(0.0.0.0/0)をアドバタイズします。VPN へのオンプレミス接続が終端する Cloud VPN ゲートウェイまたは Cloud Router を確認します。
  2. VMware Engine ネットワークのインターネット アクセスとパブリック IP サービスを無効にします。

コンソール

  1. Google Cloud コンソールで [ネットワーク ポリシー] ページに移動します。

    [ネットワーク ポリシー] に移動

  2. 関連するネットワーク ポリシーに対応する行で、[その他 ] アイコンをクリックします。

  3. [Public IP] を [Disabled] に切り替えます。

  4. [Internet access] を [Disabled] に切り替えます。

  5. [保存] をクリックします。

  6. レガシー VMware Engine ネットワークを使用する場合: gcloud services vpc-peerings enable-vpc-service-controls コマンドを使用して、VPC ネットワークと VMware Engine の間の VPC ピアリング接続の VPC Service Controls を有効にします。

    gcloud services vpc-peerings enable-vpc-service-controls \
       --network=VPC_NETWORK \
       --service=servicenetworking.googleapis.com

gcloud

gcloud ツールを使用して、ネットワーク ポリシーを更新します。

gcloud vmware network-policies update NETWORK_POLICY_NAME \
  --no-internet-access \
  --no-external-ip-address \
  --location LOCATION

以下のように置き換えます。

  • NETWORK_POLICY_NAME: このネットワーク ポリシーの名前
  • LOCATION: レガシー ネットワークまたは標準ネットワークのリージョンの場合は global

レガシー VMware Engine ネットワークを使用する場合: gcloud services vpc-peerings enable-vpc-service-controls コマンドを使用して、VPC ネットワークと VMware Engine の間の VPC ピアリング接続の VPC Service Controls を有効にします。

gcloud services vpc-peerings enable-vpc-service-controls \
   --network=VPC_NETWORK \
   --service=servicenetworking.googleapis.com

API

curl -X PATCH -H "Authorization: Bearer TOKEN"  -H "Content-Type: application/json; charset=utf-8" https://vmwareengine.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/networkPolicies/NETWORK_POLICY_NAME?updateMask=internetAccess.enabled,externalIp.enabled

"{
  "internetAccess: {
    "enabled": false
   },
  "externalIp: {
    "enabled": false
   }
}"

レガシー VMware Engine ネットワークを使用する場合: gcloud services vpc-peerings enable-vpc-service-controls コマンドを使用して、VPC ネットワークと VMware Engine の間の VPC ピアリング接続の VPC Service Controls を有効にします。

gcloud services vpc-peerings enable-vpc-service-controls \
   --network=VPC_NETWORK_NAME \
   --service=servicenetworking.googleapis.com

Python

Internet_accessexternal_ipFalse に設定します。

from google.api_core import operation
from google.cloud import vmwareengine_v1


def update_network_policy(
    project_id: str, region: str, internet_access: bool, external_ip: bool
) -> operation.Operation:
    """
    Updates a network policy in a given network.

    Args:
        project_id: name of the project you want to use.
        region: name of the region you want to use. I.e. "us-central1".
        internet_access: should internet access be allowed.
        external_ip: should external IP addresses be assigned.

    Returns:
        An operation object representing the started operation. You can call its .result() method to wait for
        it to finish.
    """

    client = vmwareengine_v1.VmwareEngineClient()
    request = vmwareengine_v1.UpdateNetworkPolicyRequest()
    request.update_mask = "internetAccess.enabled,externalIp.enabled"
    network_policy = vmwareengine_v1.NetworkPolicy()
    network_policy.name = (
        f"projects/{project_id}/locations/{region}/networkPolicies/{region}-default"
    )
    network_policy.vmware_engine_network = f"projects/{project_id}/locations/{region}/vmwareEngineNetworks/{region}-default"
    network_policy.internet_access.enabled = internet_access
    network_policy.external_ip.enabled = external_ip

    request.network_policy = network_policy

    return client.update_network_policy(request)

レガシー VMware Engine ネットワークを使用する場合: gcloud services vpc-peerings enable-vpc-service-controls コマンドを使用して、VPC ネットワークと VMware Engine の間の VPC ピアリング接続の VPC Service Controls を有効にします。

gcloud services vpc-peerings enable-vpc-service-controls \
   --network=VPC_NETWORK \
   --service=servicenetworking.googleapis.com

VPC Service Controls を有効にすることは、プロジェクト内のオンプレミス接続または VPC を介してインターネット トラフィックを転送するために不可欠です。

VPC Service Controls が有効になっている場合、Google Cloud はサービス プロデューサーの VPC ネットワーク(この場合は VMware Engine とピアリングされたサービス テナント プロジェクト)で次のルーティング変更を行います。

  • IPv4 デフォルト ルート(宛先 0.0.0.0/0、ネクストホップ デフォルト インターネット ゲートウェイ)を削除します。
  • VPC ピアリングのデフォルト ルートを使用してインターネット トラフィックの転送を開始します。

例:

現在のプロジェクトで「my-network」という名前のネットワークをピアリングする接続で VPC Service Controls を有効にするには、gcloud services vpc-peerings enable-vpc-service-controls コマンドを使用します。

gcloud services vpc-peerings enable-vpc-service-controls \
    --network=my-network \
    --service=servicenetworking.googleapis.com

オンプレミス接続を介したインターネット トラフィックのルーティングを無効にする

オンプレミス接続を介したワークロード VM からのインターネット トラフィックのルーティングを無効にするには、デフォルト ルート(0.0.0.0/0)のアドバタイズを停止し、VPC ピアリング接続で VPC Service Controls を無効にします。

レガシー VMware Engine ネットワークを使用する場合: gcloud services vpc-peerings disable-vpc-service-controls コマンドを使用して、VPC ネットワークと VMware Engine の間の VPC ピアリング接続の VPC Service Controls を無効にします。

gcloud services vpc-peerings disable-vpc-service-controls \
    --network=VPC_NETWORK_NAME \
    --service=servicenetworking.googleapis.com

次のステップ