ワークロード 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 アドレス範囲専用にする。

gcloud と 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
    
    Output:
    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. シェルで次のコマンドを実行して、アプリケーションのデフォルト認証情報を構成する

      gcloud auth application-default login
    

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

      export GOOGLE_APPLICATION_CREDENTIALS="FILE_PATH"
    

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

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

インターネット アクセス ネットワーク サービスを有効にすると、ワークロード VM からインターネットにアクセスできるようになります。デフォルトでは、インターネット アクセス ネットワーク サービスは無効になっています。

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

コンソール

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

  1. VMware Engine ポータルにアクセスします
  2. [ネットワーク] > [REGIONAL SETTINGS] に移動します。
  3. 目的のリージョンに対応する行で「編集」を選択します。リージョンがサマリー テーブルに表示されていない場合は、[Add Region] をクリックしてリージョンを追加します。
  4. [Internet Access] を有効に切り替えます。
    • インターネット アクセスを有効にし、パブリック IP サービスを無効のままにすることができます。その場合、ポイント対サイト VPN とパブリック IP の割り振りは使用できません。
  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_NAME \
    --edge-services-cidr IP_RANGE \
    --location REGION --internet-access

次のように置き換えます。

  • NETWORK_POLICY_NAME: このネットワーク ポリシーの名前REGION-default の形式にする必要があります。
  • NETWORK_NAME: このネットワーク ポリシーが適用されるネットワーク
  • IP_RANGE: インターネット アクセス ゲートウェイと外部 IP アクセス ゲートウェイに使用する CIDR 範囲(CIDR 表記)。接頭辞が /26 の RFC 1918 CIDR ブロックが必要です。
  • REGION: ネットワークのリージョン

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/REGION/networkPolicies?networkPolicyId=NETWORK_POLICY_NAME -d "{
  "vmwareEngineNetwork":"projects/PROJECT_ID/locations/REGION/vmwareEngineNetworks/NETWORK_NAME",
  "edgeServiceCidr":IP_RANGE,
  "internetAccess: {
    "enabled": true
   },
   "externalIp": {
     "enabled": true
   }
}"

次のように置き換えます。

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

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. VMware Engine ポータルにアクセスします
  2. [ネットワーク] > [Regional Settings] に移動します。
  3. 目的のリージョンに対応する行で「編集」を選択します。
  4. [Internet access] を無効に切り替えます。
    • インターネット アクセスを無効にする前に、パブリック IP サービスを無効にする必要があります。
    • パブリック IP サービスを無効にする前に、割り振られたパブリック IP アドレスとポイント対サイト VPN ゲートウェイを削除する必要があります。
  5. [送信] をクリックします。

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

gcloud

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

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

次のように置き換えます。

  • NETWORK_POLICY_NAME: このネットワーク ポリシーの名前
  • REGION: ネットワークのリージョン

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/REGION/networkPolicies/NETWORK_POLICY_NAME?updateMask=internetAccess.enabled,externalIp.enabled -d "{
  "internetAccess: {
    "enabled": false
 },
  "externalIp": {
    "enabled": false
   }
}"

次のように置き換えます。

  • PROJECT_ID: このリクエストのプロジェクト ID
  • REGION: ネットワークのリージョン
  • 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. VMware Engine ポータルにアクセスします
  2. [ネットワーク] > [Regional Settings] に移動します。
  3. オンプレミス接続を使用してインターネット アクセスを有効にするリージョンの編集アイコンをクリックします。
  4. [Public IP] を [Disabled] に切り替えます。

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

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

  7. 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 REGION

次のように置き換えます。

  • NETWORK_POLICY_NAME: このネットワーク ポリシーの名前
  • REGION: ネットワークのリージョン

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/REGION/networkPolicies/NETWORK_POLICY_NAME?updateMask=internetAccess.enabled,externalIp.enabled -d "{
  "internetAccess: {
    "enabled": false
   },
  "externalIp: {
    "enabled": false
   }
}"

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

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)

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

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

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

VPC ネットワークと VMware Engine の間の VPC ピアリング接続で VPC Service Controls を無効にするには、gcloud services vpc-peerings disable-vpc-service-controls コマンドを実行します。

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

次のステップ