VPC ネットワークに接続する

このページでは、サーバーレス VPC アクセスを使用して、Cloud Functions を VPC ネットワークに直接接続し、Compute Engine VM インスタンス、Memorystore インスタンス、内部 IP アドレスを持つその他のリソースへのアクセスを可能にする方法について説明します。

始める前に

サーバーレス VPC アクセス コネクタを作成する

公共のインターネットを使用せずに VPC ネットワークにリクエストを送信して対応するレスポンスを受信する場合は、サーバーレス VPC アクセス コネクタを使用できます。

コネクタは、Google Cloud コンソール、Google Cloud CLI、または Terraform を使用して作成できます。

コンソール

  1. サーバーレス VPC アクセスの概要ページに移動します。

    サーバーレス VPC アクセスに移動

  2. [コネクタを作成] をクリックします。

  3. [名前] フィールドに、コネクタの名前を入力します。これは Compute Engine の命名規則に従う必要がありますが、ハイフン(-)は 2 文字とカウントし、21 文字未満にする必要があります。

  4. [リージョン] フィールドで、コネクタのリージョンを選択します。これは、サーバーレス サービスのリージョンと一致する必要があります。

    サービスまたはジョブが us-central または europe-west リージョンにある場合は、us-central1 または europe-west1 を使用します。

  5. [ネットワーク] フィールドで、コネクタを接続する VPC ネットワークを選択します。

  6. [サブネット] メニューをクリックします。コネクタごとに、コネクタ インスタンスを配置する独自の /28 サブネットが必要です。サブネットは、VM、Private Service Connect、ロードバランサなどの他のリソースでは使用できません。

    • 独自のサブネットを必要とする共有 VPC を使用している場合は、未使用の /28 サブネットを選択します。サブネットが Private Service Connect や Cloud Load Balancing で使用されていないことを確認するには、gcloud CLI で次のコマンドを実行して、サブネットの purposePRIVATE であることを確認します。

      gcloud compute networks subnets describe SUBNET_NAME
      
      次のように置き換えます。

      • SUBNET_NAME: サブネットの名前
    • 共有 VPC を使用していない場合は、コネクタのサブネットを作成するか、メニューから [カスタム IP 範囲] を選択してコネクタにサブネットを作成します。

    • [IP 範囲] フィールドに、予約されていない CIDR /28 の内部 IP 範囲の最初のアドレスを入力します。この IP 範囲は、VPC ネットワーク内の既存の IP アドレス予約と重複してはいけません。たとえば、10.8.0.0/28)はほとんどの新しいプロジェクトで機能します。

    • 作成されるサブネットは非表示になり、ファイアウォール ルールと NAT 構成には使用できません。

    • 現在予約されている IP 範囲は、Google Cloud コンソールで確認します。

    • サブネットの操作について確認してください。

  7. (省略可)コネクタを詳細に制御するためのスケーリング オプションを設定するには、[スケーリング設定を表示] をクリックしてスケーリング フォームを表示します。

    1. コネクタのインスタンスの最小数と最大数を設定するか、デフォルト値(最小 2、最大 10)を使用します。コネクタは、トラフィックの使用量に応じて指定された最大値にスケールアウトしますが、トラフィックが減少してもスケールインしません。210 の範囲の値を使用する必要があります。
    2. [インスタンス タイプ] メニューで、コネクタに使用するマシンタイプを選択するか、デフォルトの e2-micro を使用します。インスタンス タイプを選択すると、右側にコスト サイドバーが表示され、帯域幅とコストの見積もりが表示されます。
  8. [作成] をクリックします。

  9. コネクタの使用準備が整うと、コネクタ名の横に緑色のチェックマークが表示されます。

gcloud

  1. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

    Cloud Shell をアクティブにする

    Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

  2. gcloud コンポーネントを最新バージョンに更新します。

    gcloud components update
    
  3. プロジェクトで Serverless VPC Access API が有効になっていることを確認します。

    gcloud services enable vpcaccess.googleapis.com
    
  4. 独自のサブネットを必要とする共有 VPC を使用している場合は、次のコマンドでコネクタを作成します。

    gcloud compute networks vpc-access connectors create CONNECTOR_NAME \
    --region REGION \
    --subnet SUBNET \
    # If you are not using Shared VPC, omit the following line.
    --subnet-project HOST_PROJECT_ID \
    # Optional: specify minimum and maximum instance values between 2 and
    10, default is 2 min, 10 max.
    --min-instances MIN \
    --max-instances MAX \
    # Optional: specify machine type, default is e2-micro
    --machine-type MACHINE_TYPE
    

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

    • CONNECTOR_NAME: コネクタの名前。これは Compute Engine の命名規則に従う必要がありますが、ハイフン(-)は 2 文字とカウントして、21 文字未満にする必要があります。
    • REGION: コネクタのリージョン。これは、サーバーレス サービスまたはジョブのリージョンと一致する必要があります。サービスまたはジョブが us-central または europe-west リージョンにある場合は、us-central1 または europe-west1 を使用します。
    • SUBNET: 未使用の /28 サブネットの名前。
      • サブネットはコネクタ専用にする必要があります。VM、Private Service Connect、ロードバランサなどの他のリソースでは使用できません。
      • サブネットが Private Service Connect や Cloud Load Balancing で使用されていないことを確認するには、gcloud CLI で次のコマンドを実行して、サブネットの purposePRIVATE であることを確認します。
        gcloud compute networks subnets describe SUBNET_NAME
        
        次のように置き換えます。
        • SUBNET_NAME: サブネットの名前。
      • サブネットの操作について確認してください。
    • HOST_PROJECT_ID: ホスト プロジェクトの ID。共有 VPC を使用する場合にのみ指定します。
    • MIN: コネクタに使用するインスタンスの最小数。29 の整数を使用してください。デフォルトは 2 です。コネクタのスケーリングの詳細については、スループットとスケーリングをご覧ください。
    • MAX: コネクタに使用するインスタンスの最大数。310 の整数を使用してください。デフォルトは 10 です。トラフィックで必要な場合、コネクタは [MAX] インスタンスにスケールアウトしますが、再スケーリングは行われません。コネクタのスケーリングの詳細については、スループットとスケーリングをご覧ください。
    • MACHINE_TYPE: f1-microe2-micro、または e2-standard-4。マシンタイプやスケーリングなど、コネクタのスループットの詳細については、スループットとスケーリングをご覧ください。

    より詳しい情報とオプションの引数については、gcloud のリファレンスをご覧ください。

  5. 共有 VPC を使用していない場合、既存サブネットを使用せずにカスタム IP 範囲を指定するには、次のコマンドでコネクタを作成します。

    gcloud compute networks vpc-access connectors create CONNECTOR_NAME \
    --network VPC_NETWORK \
    --region REGION \
    --range IP_RANGE
    

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

    • CONNECTOR_NAME: コネクタの名前。これは Compute Engine の命名規則に従う必要がありますが、ハイフン(-)を 2 文字とカウントして、21 文字未満にする必要があります。
    • VPC_NETWORK: コネクタを接続する VPC ネットワーク
    • REGION: コネクタのリージョン。これは、サーバーレス サービスまたはジョブのリージョンと一致する必要があります。サービスまたはジョブが us-central または europe-west リージョンにある場合は、us-central1 または europe-west1 を使用します。
    • IP_RANGE: 予約されていない内部 IP ネットワーク。未割り振りスペースの /28 が必要です。指定された値は、CIDR 表記(10.8.0.0/28)で示されたネットワークです。この IP 範囲は、VPC ネットワーク内の既存の IP アドレス予約と重複してはいけません。たとえば、10.8.0.0/28 はほとんどの新しいプロジェクトで機能します。この範囲用に作成されたサブネットは非表示になり、ファイアウォール ルールと NAT 構成には使用できません。

    スループット制御などの詳細とオプションの引数については、gcloud のリファレンスをご覧ください。

  6. 使用する前に、コネクタが READY 状態になっていることを確認します。

    gcloud compute networks vpc-access connectors describe CONNECTOR_NAME \
    --region REGION
    

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

    • CONNECTOR_NAME: コネクタの名前。これは、前のステップで指定した名前です。
    • REGION: コネクタのリージョン。これは、前の手順で指定したリージョンです。

    出力には、state: READY という行が含まれます。

Terraform

Terraform リソースを使用して、vpcaccess.googleapis.com API を有効にできます。

resource "google_project_service" "vpcaccess-api" {
  project = var.project_id # Replace this with your project ID in quotes
  service = "vpcaccess.googleapis.com"
}

Terraform モジュールを使用して VPC ネットワークとサブネットを作成し、コネクタを作成できます。

module "test-vpc-module" {
  source       = "terraform-google-modules/network/google"
  version      = "~> 9.0"
  project_id   = var.project_id # Replace this with your project ID in quotes
  network_name = "my-serverless-network"
  mtu          = 1460

  subnets = [
    {
      subnet_name   = "serverless-subnet"
      subnet_ip     = "10.10.10.0/28"
      subnet_region = "us-central1"
    }
  ]
}

module "serverless-connector" {
  source     = "terraform-google-modules/network/google//modules/vpc-serverless-connector-beta"
  version    = "~> 9.0"
  project_id = var.project_id
  vpc_connectors = [{
    name        = "central-serverless"
    region      = "us-central1"
    subnet_name = module.test-vpc-module.subnets["us-central1/serverless-subnet"].name
    # host_project_id = var.host_project_id # Specify a host_project_id for shared VPC
    machine_type  = "e2-standard-4"
    min_instances = 2
    max_instances = 7
    }
    # Uncomment to specify an ip_cidr_range
    #   , {
    #     name          = "central-serverless2"
    #     region        = "us-central1"
    #     network       = module.test-vpc-module.network_name
    #     ip_cidr_range = "10.10.11.0/28"
    #     subnet_name   = null
    #     machine_type  = "e2-standard-4"
    #     min_instances = 2
    #   max_instances = 7 }
  ]
  depends_on = [
    google_project_service.vpcaccess-api
  ]
}

VPC ネットワークに接続するように関数を構成する

各関数は、サーバーレス VPC アクセス コネクタを使用して VPC ネットワークに接続して下り(外向き)トラフィックを送信するように構成する必要があります。Google Cloud コンソールまたは Google Cloud CLI で、コネクタを使用する関数を構成できます。

コンソール

  1. Cloud Functions に移動

  2. 新しい関数を構成する場合は、[関数を作成] をクリックします。既存の関数を構成する場合は、関数をクリックし、次に [編集] をクリックします。

  3. 新しい関数を構成する場合は、必要に応じて最初の関数設定ページに入力してから、[ランタイム、ビルド...] をクリックして関数の構成ページを表示します。

  4. [接続] タブをクリックし、[下り(外向き)設定] の [VPC ネットワーク] メニューで次のいずれかのオプションを選択します。

    • VPC ネットワークから関数の接続を切断するには、[なし] を選択します。
    • 既存のコネクタを使用するには、プルダウン リストからコネクタを選択するか、[カスタム] を選択してプルダウンリストにないコネクタを使用します。
    • 新しいコネクタを作成するには、[新しい VPC コネクタを追加] を選択します。(プレビュー

    コネクタの作成方法については、サーバーレス VPC アクセス コネクタの作成をご覧ください。

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

gcloud

gcloud functions deploy コマンドを使用して関数をデプロイし、--vpc-connector フラグを指定します。

gcloud functions deploy FUNCTION_NAME \
--vpc-connector CONNECTOR_NAME \
FLAGS...

ここで

  • FUNCTION_NAME は、関数の名前です。
  • CONNECTOR_NAME は、コネクタの名前です。
  • FLAGS... は、関数のデプロイ時に渡す他のフラグです。

--clear-vpc-connector フラグを使用して、VPC ネットワークから関数の接続を解除します。

gcloud functions deploy FUNCTION_NAME \
--clear-vpc-connector \
FLAGS...

コネクタ経由で転送されるリクエストを制御する方法については、下り(外向き)設定をご覧ください。

VPC リソースへのアクセス

サーバーレス インフラストラクチャからコネクタへの上り(内向き)を許可する

コネクタ VM が Google Cloud の外部 IP アドレス範囲 35.199.224.0/19 からパケットを受信できるようにする必要があります。この範囲は、Cloud Run、Cloud Functions、App Engine のサービスがコネクタにパケットを送信できるように、基盤となる Google サーバーレス インフラストラクチャで使用されます。

サーバーレス VPC アクセスでは、コネクタの VM に適用される上り(内向き)許可ファイアウォール ルールを作成します。このファイアウォール ルールは、コネクタがターゲットの VPC ネットワークと同じプロジェクト内にある場合、35.199.224.0/19 からのパケットを許可します。コネクタがスタンドアロン VPC ネットワークをターゲットにしている場合、またはコネクタが共有 VPC ネットワークをターゲットとしていて、コネクタがホスト プロジェクトにある場合、コネクタとそのターゲット VPC ネットワークは同じプロジェクトにあります。

共有 VPC サービス プロジェクトでコネクタを作成する場合、共有 VPC ホスト プロジェクトのセキュリティ管理者またはプロジェクト オーナーは、35.199.224.0/19 からのパケットを許可し、コネクタ VM に適用される上り(内向き)許可ファイアウォール ルールを作成する必要があります。上り(内向き)許可の VPC ファイアウォール ルールの例を次に示します。

gcloud compute firewall-rules create RULE_NAME \
--action=ALLOW \
--rules=TCP \
--source-ranges=35.199.224.0/19 \
--target-tags=VPC_CONNECTOR_NETWORK_TAG \
--direction=INGRESS \
--network=VPC_NETWORK \
--priority=PRIORITY \
--project=PROJECT_ID

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

  • RULE_NAME: 新しいファイアウォール ルールの名前。例: allow-vpc-connector-ingress
  • VPC_CONNECTOR_NETWORK_TAG: ユニバーサル コネクタ ネットワーク タグ vpc-connector を使用すると、VPC ネットワーク内のすべてのコネクタにルールを適用できます。また、コネクタに固有のネットワーク タグを使用することもできます。固有のネットワーク タグの形式は vpc-connector-REGION-CONNECTOR_NAME です。ここで、REGION はコネクタの Google Cloud リージョン、CONNECTOR_NAME はコネクタの名前です。
  • VPC_NETWORK: コネクタがターゲットとする VPC ネットワークの名前。
  • PRIORITY: 0~65535 の整数。たとえば、0 は最も高い優先度に設定されます。
  • PROJECT_ID: コネクタがターゲットとする VPC ネットワークを含むプロジェクトのプロジェクト ID。

コネクタ VM による VPC ネットワーク リソースへのアクセスを制限する

VPC ファイアウォール ルールまたはファイアウォール ポリシーのルールを使用して、コネクタのターゲット VPC ネットワーク内のリソースへのアクセスを制限できます。これらの制限は、次のいずれかの方法で実現できます。

  • ターゲットがコネクタ VM のアクセスを制限するリソースを表し、ソースがコネクタ VM を表す上り(内向き)ルールを作成します。
  • ターゲットがコネクタ VM を表し、宛先がコネクタ VM へのアクセスを制限するリソースを表す下り(外向き)ルールを作成します。

次の例は、各方法を示しています。

上り(内向き)ルールを使用してアクセスを制限する

ネットワーク タグまたは CIDR 範囲を選択して、VPC ネットワークへの受信トラフィックを制御します。

ネットワーク タグ

次の手順は、コネクタのネットワーク タグに基づいて、VPC ネットワークへのアクセスを制限する上り(内向き)ルールを作成する方法を示しています。

  1. ファイアウォール ルールを挿入するために必要な権限を付与されていることを確認してください。次のいずれかの Identity and Access Management(IAM)ロールを付与されている必要があります。

  2. VPC ネットワーク間のコネクタのトラフィックを拒否します。

    コネクタのネットワーク タグからの上り(内向き)を拒否するには、VPC ネットワークで優先度 1000 未満の上り(内向き)ファイアウォール ルールを作成します。これによって、デフォルトでサーバーレス VPC アクセスが VPC ネットワークに作成する暗黙的なファイアウォール ルールがオーバーライドされます。

    gcloud compute firewall-rules create RULE_NAME \
    --action=DENY \
    --rules=PROTOCOL \
    --source-tags=VPC_CONNECTOR_NETWORK_TAG \
    --direction=INGRESS \
    --network=VPC_NETWORK \
    --priority=PRIORITY
    

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

    • RULE_NAME: 新しいファイアウォール ルールの名前。例: deny-vpc-connector

    • PROTOCOL: VPC コネクタから許可する 1 つ以上のプロトコル。サポートされているプロトコルは tcp または udp です。たとえば、tcp:80,udp は、ポート 80 経由の TCP トラフィックと UDP トラフィックを許可します。詳細については、allow フラグのドキュメントをご覧ください。

      セキュリティと検証のために、次のサポートされていないプロトコルのトラフィックをブロックする拒否ルールを構成することもできます。ahallespicmpipipsctp

    • VPC_CONNECTOR_NETWORK_TAG: すべてのコネクタ(今後作成されるコネクタを含む)のアクセス権を制限する場合はユニバーサル コネクタ ネットワーク タグ。または、特定のコネクタのアクセス権を制限する場合は一意のネットワーク タグ。

      • ユニバーサル ネットワーク タグ: vpc-connector
      • 一意のネットワーク タグ: vpc-connector-REGION-CONNECTOR_NAME

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

        • REGION: 制限するコネクタのリージョン
        • CONNECTOR_NAME: 制限するコネクタの名前

      コネクタ ネットワーク タグの詳細については、ネットワーク タグをご覧ください。

    • VPC_NETWORK: VPC ネットワークの名前

    • PRIORITY: 0~65535 の整数。たとえば、0 は最も高い優先度に設定されます。

  3. コネクタ トラフィックを受信する必要があるリソースに対するコネクタのトラフィックを許可します。

    allow フラグと target-tags フラグを使用して、VPC コネクタでアクセスする VPC ネットワーク内のリソースに対して上り(内向き)ファイアウォール ルールを作成します。このルールの優先度は、前の手順で作成したルールの優先度よりも低い値に設定します。

    gcloud compute firewall-rules create RULE_NAME \
    --allow=PROTOCOL \
    --source-tags=VPC_CONNECTOR_NETWORK_TAG \
    --direction=INGRESS \
    --network=VPC_NETWORK \
    --target-tags=RESOURCE_TAG \
    --priority=PRIORITY
    

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

    • RULE_NAME: 新しいファイアウォール ルールの名前。例: allow-vpc-connector-for-select-resources

    • PROTOCOL: VPC コネクタから許可する 1 つ以上のプロトコル。サポートされているプロトコルは tcp または udp です。たとえば、tcp:80,udp は、ポート 80 経由の TCP トラフィックと UDP トラフィックを許可します。詳細については、allow フラグのドキュメントをご覧ください。

    • VPC_CONNECTOR_NETWORK_TAG: すべてのコネクタ(今後作成されるコネクタを含む)のアクセス権を制限する場合はユニバーサル コネクタ ネットワーク タグ。または、特定のコネクタのアクセス権を制限する場合は一意のネットワーク タグ。これは、前のステップで指定したネットワーク タグと一致する必要があります。

      • ユニバーサル ネットワーク タグ: vpc-connector
      • 一意のネットワーク タグ: vpc-connector-REGION-CONNECTOR_NAME

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

        • REGION: 制限するコネクタのリージョン
        • CONNECTOR_NAME: 制限するコネクタの名前

      コネクタ ネットワーク タグの詳細については、ネットワーク タグをご覧ください。

    • VPC_NETWORK: VPC ネットワークの名前

    • RESOURCE_TAG: VPC コネクタがアクセスする VPC リソースのネットワーク タグ。

    • PRIORITY: 前のステップで設定した優先度よりも小さい整数。たとえば、前のステップで作成したルールの優先度を 990 に設定した場合は、980 を試してください。

ファイアウォール ルールの作成に必須のフラグとオプション フラグの詳細については、gcloud compute firewall-rules create のドキュメントをご覧ください。

CIDR 範囲

次の手順は、コネクタの CIDR 範囲に基づいて、VPC ネットワークへのアクセスを制限する上り(内向き)ルールを作成する方法を示しています。

  1. ファイアウォール ルールを挿入するために必要な権限を付与されていることを確認してください。次のいずれかの Identity and Access Management(IAM)ロールを付与されている必要があります。

  2. VPC ネットワーク間のコネクタのトラフィックを拒否します。

    コネクタの CIDR 範囲からの上り(内向き)を拒否するには、VPC ネットワークで優先度 1000 未満の上り(内向き)ファイアウォール ルールを作成します。これによって、デフォルトでサーバーレス VPC アクセスが VPC ネットワークに作成する暗黙的なファイアウォール ルールがオーバーライドされます。

    gcloud compute firewall-rules create RULE_NAME \
    --action=DENY \
    --rules=PROTOCOL \
    --source-ranges=VPC_CONNECTOR_CIDR_RANGE \
    --direction=INGRESS \
    --network=VPC_NETWORK \
    --priority=PRIORITY
    

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

    • RULE_NAME: 新しいファイアウォール ルールの名前。例: deny-vpc-connector

    • PROTOCOL: VPC コネクタから許可する 1 つ以上のプロトコル。サポートされているプロトコルは tcp または udp です。たとえば、tcp:80,udp は、ポート 80 経由の TCP トラフィックと UDP トラフィックを許可します。詳細については、allow フラグのドキュメントをご覧ください。

      セキュリティと検証のために、次のサポートされていないプロトコルのトラフィックをブロックする拒否ルールを構成することもできます。ahallespicmpipipsctp

    • VPC_CONNECTOR_CIDR_RANGE: アクセスを制限するコネクタの CIDR 範囲

    • VPC_NETWORK: VPC ネットワークの名前

    • PRIORITY: 0~65535 の整数。たとえば、0 は最も高い優先度に設定されます。

  3. コネクタ トラフィックを受信する必要があるリソースに対するコネクタのトラフィックを許可します。

    allow フラグと target-tags フラグを使用して、VPC コネクタでアクセスする VPC ネットワーク内のリソースに対して上り(内向き)ファイアウォール ルールを作成します。このルールの優先度は、前の手順で作成したルールの優先度よりも低い値に設定します。

    gcloud compute firewall-rules create RULE_NAME \
    --allow=PROTOCOL \
    --source-ranges=VPC_CONNECTOR_CIDR_RANGE \
    --direction=INGRESS \
    --network=VPC_NETWORK \
    --target-tags=RESOURCE_TAG \
    --priority=PRIORITY
    

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

    • RULE_NAME: 新しいファイアウォール ルールの名前。例: allow-vpc-connector-for-select-resources

    • PROTOCOL: VPC コネクタから許可する 1 つ以上のプロトコル。サポートされているプロトコルは tcp または udp です。たとえば、tcp:80,udp は、ポート 80 経由の TCP トラフィックと UDP トラフィックを許可します。詳細については、allow フラグのドキュメントをご覧ください。

    • VPC_CONNECTOR_CIDR_RANGE: アクセスを制限するコネクタの CIDR 範囲

    • VPC_NETWORK: VPC ネットワークの名前

    • RESOURCE_TAG: VPC コネクタがアクセスする VPC リソースのネットワーク タグ。

    • PRIORITY: 前のステップで設定した優先度よりも小さい整数。たとえば、前のステップで作成したルールの優先度を 990 に設定した場合は、980 を試してください。

ファイアウォール ルールの作成に必要なフラグとオプション フラグの詳細については、gcloud compute firewall-rules create のドキュメントをご覧ください。

下り(外向き)ルールを使用してアクセスを制限する

次の手順は、コネクタのアクセスを制限する下り(外向き)ルールを作成する方法を示しています。

  1. ファイアウォール ルールを挿入するために必要な権限を付与されていることを確認してください。次のいずれかの Identity and Access Management(IAM)ロールを付与されている必要があります。

  2. コネクタからの下り(外向き)トラフィックを拒否します。

    サーバーレス VPC アクセス コネクタに下り(外向き)ファイアウォール ルールを作成し、確立済みのレスポンスを除き、宛先に送信トラフィックを送ることができないようにします。

    gcloud compute firewall-rules create RULE_NAME \
    --action=DENY \
    --rules=PROTOCOL \
    --direction=EGRESS \
    --target-tags=VPC_CONNECTOR_NETWORK_TAG \
    --network=VPC_NETWORK \
    --priority=PRIORITY
    

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

    • RULE_NAME: 新しいファイアウォール ルールの名前。例: deny-vpc-connector

    • PROTOCOL: VPC コネクタから許可する 1 つ以上のプロトコル。サポートされているプロトコルは tcp または udp です。たとえば、tcp:80,udp は、ポート 80 経由の TCP トラフィックと UDP トラフィックを許可します。詳細については、allow フラグのドキュメントをご覧ください。

      セキュリティと検証のために、次のサポートされていないプロトコルのトラフィックをブロックする拒否ルールを構成することもできます。ahallespicmpipipsctp

    • VPC_CONNECTOR_NETWORK_TAG: 既存のすべての VPC コネクタと今後作成される VPC コネクタにルールを適用する場合は、ユニバーサル VPC コネクタのネットワーク タグを使用します。または、特定のコネクタを制御する場合は、一意の VPC コネクタのネットワーク タグを使用します。

    • VPC_NETWORK: VPC ネットワークの名前

    • PRIORITY: 0~65535 の整数。たとえば、0 は最も高い優先度に設定されます。

  3. コネクタがアクセスするように設定した CIDR 範囲内に宛先が存在する場合に、下り(外向き)トラフィックを許可します。

    allow フラグと destination-ranges フラグを使用して、特定の宛先範囲でコネクタからの下り(外向き)トラフィックを許可するファイアウォール ルールを作成します。宛先範囲には、コネクタにアクセスを許可する VPC ネットワーク内のリソースの CIDR 範囲を設定します。このルールの優先度は、前の手順で作成したルールの優先度よりも低い値に設定します。

    gcloud compute firewall-rules create RULE_NAME \
    --allow=PROTOCOL \
    --destination-ranges=RESOURCE_CIDR_RANGE \
    --direction=EGRESS \
    --network=VPC_NETWORK \
    --target-tags=VPC_CONNECTOR_NETWORK_TAG \
    --priority=PRIORITY
    

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

    • RULE_NAME: 新しいファイアウォール ルールの名前。例: allow-vpc-connector-for-select-resources

    • PROTOCOL: VPC コネクタから許可する 1 つ以上のプロトコル。サポートされているプロトコルは tcp または udp です。たとえば、tcp:80,udp は、ポート 80 経由の TCP トラフィックと UDP トラフィックを許可します。詳細については、allow フラグのドキュメントをご覧ください。

    • RESOURCE_CIDR_RANGE: アクセスを制限するコネクタの CIDR 範囲

    • VPC_NETWORK: VPC ネットワークの名前

    • VPC_CONNECTOR_NETWORK_TAG: 既存のすべての VPC コネクタと今後作成される VPC コネクタにルールを適用する場合は、ユニバーサル VPC コネクタのネットワーク タグを使用します。または、特定のコネクタを制御する場合は、一意の VPC コネクタのネットワーク タグを使用します。前のステップで一意のネットワーク タグを使用した場合は、一意のネットワーク タグを使用します。

    • PRIORITY: 前のステップで設定した優先度よりも小さい整数。たとえば、前のステップで作成したルールの優先度を 990 に設定した場合は、980 を試してください。

ファイアウォール ルールの作成に必須のフラグとオプション フラグの詳細については、gcloud compute firewall-rules create のドキュメントをご覧ください。

コネクタを管理する

VPC ネットワークから関数を切断する

Google Cloud Console または Google Cloud CLI を使用して、VPC ネットワークから関数を切断できます。

コンソール

  1. Google Cloud コンソールで Cloud Functions の概要ページに移動します。

    Cloud Functions に移動

  2. 既存の関数をクリックして詳細ページに移動し、[編集] をクリックします。

  3. [ランタイム、ビルド...] をクリックして詳細設定を表示します。

  4. [接続] タブの [下り(外向き)設定] で、[VPC コネクタ] フィールドにコネクタの名前を入力するか、フィールドを空白にしてファンクションを VPC ネットワークから切断します。

gcloud

--clear-vpc-connector フラグを使用して、VPC ネットワークから関数を切断します。

gcloud functions deploy FUNCTION_NAME \
--clear-vpc-connector \
FLAGS...

ここで

  • FUNCTION_NAME は、関数の名前です。
  • CONNECTOR_NAME は、コネクタの名前です。
  • FLAGS... は、関数のデプロイ時に渡す他のフラグです。

トラフィックがなく、接続解除されている場合でも、コネクタの料金は引き続き発生します。詳細については、料金をご覧ください。不要になったコネクタは削除して、請求が発生しないようにしてください。

コネクタを更新する

Google Cloud コンソール、Google Cloud CLI、または API を使用して、コネクタの次の属性を更新できます。

  • マシン(インスタンス)タイプ
  • インスタンスの最小数と最大数

マシンタイプを更新する

コンソール

  1. サーバーレス VPC アクセスの概要ページに移動します。

    サーバーレス VPC アクセスに移動

  2. 編集するコネクタを選択して、[編集] をクリックします。

    コネクタの詳細ページに、コネクタのスループット、インスタンス数、CPU 使用率の指標のグラフが表示されます。

  3. [インスタンス タイプ] リストで、目的のマシン(インスタンス)タイプを選択します。使用可能なマシンタイプについては、スループットとスケーリングのドキュメントをご覧ください。

gcloud

  1. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

    Cloud Shell をアクティブにする

    Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

  2. コネクタのマシンタイプを更新するには、ターミナルで次のコマンドを実行します。

    gcloud beta compute networks vpc-access connectors update CONNECTOR_NAME --region=REGION --machine-type=MACHINE_TYPE
    
    次のように置き換えます。

    • CONNECTOR_NAME: コネクタの名前。
    • REGION: コネクタのリージョンの名前。
    • MACHINE_TYPE: 目的のマシンタイプ。使用可能なマシンタイプについては、スループットとスケーリングのドキュメントをご覧ください。

インスタンスの最小数と最大数を減らす

インスタンスの最小数と最大数を減らすには、次の操作を行います。

  1. 目的の値で新しいコネクタを作成します。
  2. 新しいコネクタを使用するようにサービスまたは関数を更新します。
  3. トラフィックを移行したら、古いコネクタを削除します。

詳細については、サーバーレス VPC アクセス コネクタを作成するをご覧ください。

インスタンスの最小数と最大数を増やす

コンソール

  1. サーバーレス VPC アクセスの概要ページに移動します。

    サーバーレス VPC アクセスに移動

  2. 編集するコネクタを選択して、[編集] をクリックします。

  3. [最小インスタンス数] フィールドに、目的のインスタンスの最小数を選択します。

    このフィールドに設定可能な最小値は現在の値です。このフィールドに設定可能な最大値は、[最大インスタンス数] フィールドの現在の値から 1 を引いた値になります。たとえば、[最大インスタンス数] フィールドの値が 8 の場合、[最小インスタンス数] フィールドに設定可能な最大値は 7 になります。

  4. [最大インスタンス数] フィールドでインスタンスの最大数を選択します。

    このフィールドに設定可能な最小値は現在の値です。このフィールドに設定可能な最大値は 10 です。

gcloud

  1. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

    Cloud Shell をアクティブにする

    Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

  2. コネクタのインスタンスの最小数または最大数を増やすには、ターミナルで次のコマンドを実行します。

    gcloud beta compute networks vpc-access connectors update CONNECTOR_NAME --region=REGION --min-instances=MIN_INSTANCES --max-instances=MAX_INSTANCES
    
    次のように置き換えます。

  • CONNECTOR_NAME: コネクタの名前。
  • REGION: コネクタのリージョンの名前。
  • MIN_INSTANCES: 目的の最小インスタンス数。
    • このフィールドに設定可能な最小値は min_instances の現在の値です。現在の値を確認するには、現在の属性値を確認するをご覧ください。
    • このフィールドに設定可能な最大値は、現在の max_instances の値から 1 を引いた値になります。これは、min_instancesmax_instances より小さくする必要があるためです。たとえば、max_instances が 8 の場合、このフィールドに設定可能な最大値は 7 です。コネクタがデフォルトの max-instances 値(10)を使用する場合、このフィールドに設定可能な最大値は 9 になります。max-instances の値を確認するには、現在の属性値を確認するをご覧ください。
  • MAX_INSTANCES:

    • このフィールドに設定可能な最小値は max_instances の現在の値です。現在の値を確認するには、現在の属性値を確認するをご覧ください。
    • このフィールドに設定可能な最大値は 10 です。

    インスタンスの最大数を増やさずに最小数だけを増やす場合でも、インスタンスの最大数を指定する必要があります。逆に、インスタンスの最小数を更新せずに最大数を更新する場合でも、インスタンスの最小数を指定する必要があります。インスタンスの最小数または最大数を現在の値のままにするには、現在の値を指定します。現在の値を確認するには、現在の属性値を確認するをご覧ください。

現在の属性値を確認する

コネクタの現在の属性値を確認するには、ターミナルで次のコマンドを実行します。

gcloud compute networks vpc-access connectors describe CONNECTOR_NAME --region=REGION --project=PROJECT
次のように置き換えます。

  • CONNECTOR_NAME: コネクタの名前。
  • REGION: コネクタのリージョンの名前。
  • PROJECT: Google Cloud プロジェクトの名前。

コネクタを削除する

コネクタを削除する前に、接続中のサービスまたはジョブがないことを確認してください。

共有 VPC ホスト プロジェクトでコネクタを設定した共有 VPC ユーザーの場合は、gcloud compute networks vpc-access connectors describe コマンドを使用して、特定のコネクタを使用するサービスまたはジョブが存在するプロジェクトを一覧表示できます。

コネクタを削除するには、Google Cloud コンソールまたは Google Cloud CLI を使用します。

コンソール

  1. Google Cloud コンソールで、サーバーレス VPC アクセスの概要ページに移動します。

    サーバーレス VPC アクセスに移動

  2. 削除するコネクタを選択します。

  3. [削除] をクリックします。

gcloud

  1. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

    Cloud Shell をアクティブにする

    Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

  2. コネクタを削除するには、次の gcloud コマンドを使用します。

    gcloud compute networks vpc-access connectors delete CONNECTOR_NAME --region=REGION
    

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

    • CONNECTOR_NAME は、削除するコネクタの名前に置き換えます。
    • REGION は、コネクタが配置されているリージョンに置き換えます。

トラブルシューティング

サービス アカウントの権限

Google Cloud プロジェクトでオペレーションを実行するために、サーバーレス VPC アクセスはサーバーレス VPC アクセス サービス エージェントのサービス アカウントを使用します。このサービス アカウントのメールアドレスは、次の形式になります。

service-PROJECT_NUMBER@gcp-sa-vpcaccess.iam.gserviceaccount.com

このサービス アカウントには、デフォルトでサーバーレス VPC アクセス サービス エージェントのロール(roles/vpcaccess.serviceAgent)が設定されています。このアカウントの権限を変更すると、サーバーレス VPC アクセスのオペレーションが失敗する可能性があります。

エラー

サービス アカウントでサービス エージェントのロールが必要であるというエラー

リソース サービスの使用を制限する」という組織のポリシーの制約を使用して Cloud Deployment Manager(deploymentmanager.googleapis.com)をブロックすると、次のエラー メッセージが表示されることがあります。

Serverless VPC Access service account (service-<PROJECT_NUMBER>@gcp-sa-vpcaccess.iam.gserviceaccount.com) needs Serverless VPC Access Service Agent role in the project.

組織のポリシーを設定して、拒否リストから Deployment Manager を削除するか、許可リストに追加します。

コネクタ作成エラー

コネクタの作成でエラーが発生した場合は、次の方法をお試しください。

  • VPC ネットワーク内で予約されている既存の IP アドレスと重複しない RFC 1918 の内部 IP 範囲を指定します。
  • プロジェクトから ID serverless-vpc-access-images で Compute Engine VM イメージを使用できるように、プロジェクトに権限を付与します。状況に応じて組織のポリシーを更新する方法については、イメージ アクセスの制約を設定するをご覧ください。

リソースにアクセスできない

コネクタを指定しても、VPC ネットワーク内のリソースにアクセスできない場合は、コネクタの IP アドレス範囲からの上り(内向き)を拒否する、優先度 1000 よりも小さいファイアウォール ルールが VPC ネットワーク上に存在しないことを確認してください。

共有 VPC サービス プロジェクトでコネクタを構成する場合は、ファイアウォール ルールがサーバーレス インフラストラクチャからコネクタへの上り(内向き)を許可していることを確認します。

接続拒否エラー

ネットワーク パフォーマンスが低下する connection refused エラーが発生した場合、サーバーレス アプリケーションの呼び出し間で接続が制限なしで増加している可能性があります。インスタンスごとに使用される最大接続数を制限するには、接続プールをサポートするクライアント ライブラリを使用します。接続プールの使用方法を説明する詳しい例については、データベース接続を管理するをご覧ください。

リソースが見つからないエラー

VPC ネットワークまたはファイアウォール ルールを削除すると、次のようなメッセージが表示される場合があります。The resource "aet-uscentral1-subnet--1-egrfw" was not found.

このエラーとそのソリューションについては、VPC ファイアウォール ルールのドキュメントのリソースが見つからないエラーをご覧ください。

サービス アカウントに必要な権限 vpcaccess.connectors.use がない...

まず、ロール roles/vpcaccess.user がサービス アカウントに割り当てられていることを確認します。

VPC コネクタに関する権限の問題が解決しない場合は、共有 VPC が実際に作成されているかどうかを確認してください。その場合は、ホスト プロジェクトで追加の設定が必要です。

次のステップ