ネットワーク設定を構成する

Cloud Functions のネットワーク設定によって、個々の関数の上り(内向き)と下り(外向き)のネットワークを制御できます。たとえば、次のようなユースケースにネットワーク設定を使用できます。

  • ネットワーク ベースのアクセス制御を実装して関数を保護する。
  • 関数の下り(外向き)トラフィックを、VPC ネットワーク関連のファイアウォール、DNS、ルーティングのルールに従わせる。
  • 関数の下り(外向き)トラフィックと静的 IP アドレスを関連付ける。

ユースケースの詳細については、サンプル ユースケースをご覧ください。

上り(内向き)設定

上り(内向き)設定により、Google Cloud プロジェクトまたは VPC Service Controls サービス境界の外部のリソースから HTTP 関数を呼び出せるかどうかを制限します。上り(内向き)設定では、次の項目を指定できます。

  • すべてのトラフィックを許可する: デフォルト。インターネットおよび同じプロジェクト内のリソースの両方からの関数への受信リクエストをすべて許可します。
  • 内部トラフィックのみを許可: 同じプロジェクト内または VPC Service Controls 境界内の VPC ネットワークからのリクエストのみを許可します。他のすべてのリクエストは、403 エラーで拒否されます。

Google Cloud Console または gcloud コマンドライン ツールを使用して関数をデプロイまたは更新する場合、上り(内向き)設定を利用できます。

Console

  1. Cloud Console で Functions の概要ページを開きます。

    Cloud Functions の概要ページに移動

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

  3. [環境変数、ネットワーキング、タイムアウトなど] をクリックして詳細設定を表示します。

  4. [ネットワーキング] セクションで、[Ingress の設定] の値を選択します。

gcloud

gcloud functions deploy コマンドを使用して関数をデプロイまたは更新し、次の --ingress-settings フラグを指定します。

gcloud functions deploy FUNCTION_NAME \
--trigger-http \
--ingress-settings INGRESS_SETTINGS \
FLAGS...

ここで

  • FUNCTION_NAME は、関数の名前です。
  • INGRESS_SETTINGS は、上り(内向き)設定のサポートされている値のいずれかです。使用できる値は次のとおりです。

    • all
    • internal-only
    • internal-and-gclb: 内部トラフィックと、Google Cloud ロードバランサ(GCLB)によって公開されたパブリック IP に送信されるトラフィックを許可します。cloudfunctions.net に送信されるトラフィック、または Cloud Functions で設定されたカスタム ドメインをブロックします。ユーザーが GCLB を介して設定したアクセス制御(Cloud Armor、IAP)を回避できないようにします。
  • FLAGS...deploy コマンドに渡す他のフラグを参照します。

Google Cloud Armor と Cloud Load Balancing を併用する場合は、受信リクエストの IP アドレス、IP 範囲、リージョンなどのトラフィック ベースの条件をフィルタするセキュリティ ポリシーを作成できます。詳細については、Google Cloud Armor セキュリティ ポリシーの概要をご覧ください。

下り(外向き)設定

下り(外向き)設定によって、関数からの送信 HTTP リクエストのルーティングを制御します。下り(外向き)設定を指定するには、サーバーレス VPC アクセス コネクタを使用して、関数を VPC ネットワークに接続する必要があります。下り(外向き)設定によって、コネクタを経由して VPC ネットワークにルーティングされるトラフィックの種類を制御します。

下り(外向き)設定では、次の項目を指定できます。

  • プライベート IP へのリクエストだけを VPC コネクタ経由でルーティングする: デフォルト。IP アドレス範囲(RFC 1918RFC 6598)または内部 DNS 名へのリクエストのみが VPC ネットワークにルーティングされます。その他のリクエストはすべて直接インターネットにルーティングします。
  • すべてのトラフィックを VPC コネクタ経由でルーティングする: 関数からの送信リクエストをすべて VPC ネットワークにルーティングします。

Cloud Console または gcloud コマンドライン ツールを使用して関数をデプロイまたは更新する場合、下り(外向き)設定を指定できます。

Console

  1. Cloud Console で Functions の概要ページを開きます。

    Cloud Functions の概要ページに移動

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

  3. [環境変数、ネットワーキング、タイムアウトなど] をクリックして詳細設定を表示します。

  4. [ネットワーキング] セクションの [下り設定] で、サーバーレス VPC アクセス コネクタを選択します。

  5. コネクタを介して送信トラフィックをルーティングする方法に応じて、適切な下り(外向き)設定を選択します。

gcloud

gcloud functions deploy コマンドを使用して関数をデプロイまたは更新し、次の --egress-settings フラグを指定します。

gcloud functions deploy FUNCTION_NAME \
--vpc-connector CONNECTOR_NAME \
--egress-settings EGRESS_SETTINGS \
FLAGS...

ここで

  • FUNCTION_NAME は、関数の名前です。
  • CONNECTOR_NAME は、使用するサーバーレス VPC アクセス コネクタの名前です。詳細については、gcloud のドキュメントをご覧ください。

  • EGRESS_SETTINGS は下り(外向き)設定でサポートされる値のいずれかになります。gcloud のドキュメントをご覧ください。

  • FLAGS...deploy コマンドに渡す他のフラグを参照します。

サンプル ユースケース

外部クライアントから呼び出せない関数を作成する

同じ Cloud プロジェクトまたは VPC Service Controls サービス境界内のリソースからの呼び出しのみを許可することで、HTTP 関数を保護できます。

  1. 関数をデプロイし、内部トラフィックのみを許可します。Cloud Console または gcloud コマンドライン ツールを次のように使用します。

    Console

    1. Cloud Console で Functions の概要ページを開きます。

      Cloud Functions の概要ページに移動

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

    3. [環境変数、ネットワーキング、タイムアウトなど] をクリックして詳細設定を表示します。

    4. [ネットワーキング] セクションの [上り設定] で、[内部トラフィックのみを許可] をオンにします。

    gcloud

    gcloud functions deploy コマンドを使用します。

    gcloud functions deploy FUNCTION_NAME \
    --ingress-settings internal-only \
    FLAGS...
    

関数をデプロイすると、Cloud プロジェクトの外部からのリクエストはブロックされ、関数に接続できなくなります。VPC Service Controls を使用すると、サービス境界外からのリクエストはブロックされます。プロジェクト内またはサービス境界内の VM インスタンスは、HTTPS エンドポイントにリクエストを送信することで、引き続き関数にアクセスできます。

この制限付き関数を別の関数から呼び出す場合、呼び出し側の関数は VPC ネットワーク経由で下り(外向き)のルーティングを行う必要があります。

VPC ネットワーク経由で関数の下り(外向き)のルーティングを行う

Google Cloud の VPC ネットワークでは、豊富な構成とネットワーク機能をサポートしています。関数から VPC ネットワークへの下り(外向き)トラフィックをルーティングすることで、Cloud Functions の下り(外向き)トラフィックが VPC ネットワークのファイアウォール、DNS、ルーティングなどのルールに従うようになります。Cloud NAT などのプロダクトが使用できます。

  1. VPC ネットワークを設定します。既存の VPC ネットワークを構成するか、VPC ネットワークの使用のガイドに沿って新しい VPC ネットワークを作成してください。

  2. サーバーレス VPC アクセス コネクタを設定します。Cloud Functions が VPC ネットワークにトラフィックをルーティングするには、サーバーレス VPC アクセス コネクタが必要です。VPC ネットワークへの接続の手順に従って、コネクタを作成して適切な権限を設定します。

  3. コネクタを使用する関数をデプロイし、下り(外向き)のルーティングをすべてコネクタ経由で行ないます。Cloud Console または gcloud コマンドライン ツールを次のように使用します。

    Console

    1. Cloud Console で Functions の概要ページを開きます。

      Cloud Functions の概要ページに移動

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

    3. [環境変数、ネットワーキング、タイムアウトなど] をクリックして詳細設定を表示します。

    4. [ネットワーキング] セクションの [下り設定] で、サーバーレス VPC アクセス コネクタを選択し、[VPC コネクタ経由ですべてのトラフィックをルーティングする] をオンにします。

    gcloud

    gcloud functions deploy コマンドを使用します。

    gcloud functions deploy FUNCTION_NAME \
    --vpc-connector CONNECTOR_NAME \
    --egress-settings all \
    FLAGS...
    

関数をデプロイすると、関数からのトラフィックがすべて VPC ネットワーク経由でルーティングされ、VPC ネットワークで設定されたルールに従います。Cloud NAT を構成しない限り、関数は公共のインターネットにアクセスできません。

関数の下り(外向き)と静的 IP アドレスを関連付ける

場合によっては、関数からのトラフィックと静的 IP アドレスを関連付けすることもあります。たとえば、明示的に指定された IP アドレスからのリクエストのみを許可する外部サービスを呼び出す場合に便利です。

  1. 関数の下り(外向き)を VPC ネットワーク経由でルーティングします。前のセクションの VPC ネットワーク経由で関数の下り(外向き)のルーティングを行うをご覧ください。

  2. Cloud NAT を設定し、静的 IP アドレスを指定します。NAT のサブネット範囲を指定するNAT の IP アドレスを指定するのガイドの手順に沿って、関数のサーバーレス VPC アクセス コネクタに関連付けられたサブネットの Cloud NAT を設定します。

マルチリージョンの負荷分散

関数を別のリージョンにデプロイし、リクエストを最も近い正常なリージョンに送信できるようになります。これを実現するには、サーバーレス NEG の設定の説明に従って、関数のサーバーレス NEG を設定し、ロードバランサに接続する必要があります。