Cloud Run(フルマネージド)の上り(内向き)の制限

このページでは、上り(内向き)の設定を使用して Cloud Run サービスへのネットワーク アクセスを制限する方法について説明します。ネットワーク レベルではデフォルトで、インターネット上の任意のリソースは、run.app URL または Cloud Run で設定されたカスタム ドメインから Cloud Run(フルマネージド)サービスにアクセスできます。このデフォルトを変更するには、上り(内向き)に別の設定を指定します。

この機能を IAM 認証方法と併用すると、サービスへのアクセスを管理できます。

使用可能な上り(内向き)設定

次の設定を使用できます。

設定 説明
すべて 使用中のサービスが公共のインターネットにアクセスできるようにします。IAM 起動元の権限は引き続き適用されます。
内部 サービスを非公開にします。これにより、同じプロジェクト内または VPC Service Controls の境界内からのリクエストのみがサービスにアクセスできるようになります。IAM 起動元の権限は引き続き適用されます。

何が内部とみなされ、何が内部サービスにアクセスできるかについては、内部サービスへのアクセスをご覧ください。

マルチテナンシー(同じプロジェクト内の複数の信頼ドメイン)はサポートされていません。
内部と Cloud Load Balancing サービスを公共のインターネットからアクセスできるようにしますが、内部リクエストと HTTP(S) 負荷分散経由のリクエストのみを受け入れます。IAM 起動元権限は引き続き適用されます。

Identity-Aware ProxyGoogle Cloud ArmorCloud CDN を使用している場合は、デフォルトの URL にアクセスすることで、このようなバイパスをしないようにすることもできます。

内部サービスへのアクセス

次のことに注意してください。

  • 内部サービスにアクセスする場合は、公開 URL(デフォルトの run.app URL または Cloud Run で設定されたカスタム ドメイン)を使用して通常どおりに呼び出します。

  • Compute Engine VM インスタンスからのリクエストの場合、または同じプロジェクトの VPC ネットワーク内で実行されている他のリソースからのリクエストの場合、さらなる設定は必要ありません。

  • 他の Cloud Run サービスまたは同じプロジェクト内の Cloud Functions からのリクエストでは、サービスまたは関数を VPC ネットワークに接続し、下り(外向き)はすべてコネクタ経由でルーティングします。詳しくは、VPC ネットワークへの接続をご覧ください。なお、IAM 起動元の権限は引き続き適用されます。

  • 同じプロジェクトの VPC ネットワーク内のリソースからのリクエストは、送信元のリソースがパブリック IP アドレスを持っていても、内部に分類されます。

  • Cloud Run API が VPC でアクセス可能なサービスとして有効になっている場合、トラフィックが VPC ネットワークから発信される、VPC Service Controls 境界内のリソースからのリクエストは、内部サービスを呼び出すことができます。

  • 共有 VPC リソースと内部サービスが同じ VPC SC 境界内にあり、Cloud Run API が VPC でアクセス可能なサービスとして有効になっている場合に限り、共有 VPC ネットワークにあるリソースは内部サービスを呼び出すことができます。

  • Pub/Sub および Eventarc からのリクエストは、内部サービスを呼び出すことができます。

  • VPC ネットワークから発信されていないトラフィック ソースから内部サービスを呼び出す方法はありません(ただし Pub/Sub または Eventarc は除きます)。つまり、Cloud Scheduler、Cloud Tasks、Workflow では内部サービスを呼び出すことができません。

  • Pub/Sub または Eventarc と Pub/Sub のトリガーを使用して Ingress を使用する場合は、次の考慮事項が適用されます。

    • Pub/Sub によって呼び出される Cloud Run サービスで上り(内向き)設定を使用する場合は、カスタム ドメインではなく、そのサービスに Cloud Run のデフォルト app.run URL を使用する必要があります。
    • Pub/Sub サブスクリプションは、Cloud Run サービスと同じプロジェクトまたは VPC Service Controls の境界内になければなりません。

「内部」か「内部と Cloud Load Balancing」か

上り(内向き)が「内部と Cloud Load Balancing」に設定されたサービスには、Cloud Load Balancing によって設定されたロードバランサを介してアクセスすることもできます。「内部と Cloud Load Balancing」設定は、「内部」のスーパーセットです。つまり、「内部」 に設定されたサービスにアクセス可能なあらゆる通信は、「内部と Cloud Load Balancing」に設定されたサービスにも到達できます。

上り(内向き)の設定

以下のタブでサポートされているメソッドを使用して、上り(内向き)の設定ができます。

Console

新しいサービスをデプロイする場合:

  1. Cloud Run に移動します

  2. [サービスの作成] をクリックし、最初のステップ(サービスの設定)を必要に応じて構成して、[次へ] をクリックします。

  3. 必要に応じて 2 番目のステップ(サービスの最初のリビジョンの構成)を構成し、[次へ] をクリックします。

  4. 3 番目のステップで、このサービスをトリガーする方法を構成します。Ingress* ラベルの下で、許可する上り(内向き)トラフィックを選択します。

    画像

既存のサービスを構成する場合:

  1. サービスをクリックします。

  2. [トリガー] タブをクリックします。

  3. [上り] ラベルで、許可する上り(内向き)トラフィックを選択します。

    画像

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

コマンドライン

  1. 新しいサービスをデプロイする場合は、--ingress フラグを付加してサービスをデプロイします。

    gcloud run deploy SERVICE --image IMAGE_URL --platform managed --ingress INGRESS

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

    • INGRESS を、使用可能な上り(内向き)設定のいずれかに置き換えます。
      • all
      • internal
      • internal-and-cloud-load-balancing
    • SERVICE を、サービス名に置き換えます。
    • IMAGE_URL は、コンテナ イメージへの参照(gcr.io/myproject/my-image:latest など)に置き換えます。
  2. 既存のサービスの上り(内向き)を変更する場合:

    gcloud run services update SERVICE --platform managed --ingress INGRESS

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

YAML

既存のサービス構成をダウンロードして表示するには、gcloud run services describe --format export コマンドを使用します。読みやすく整えられた結果が YAML 形式で出力されます。次に、下記の手順に沿ってフィールドを変更し、gcloud beta run services replace コマンドを使用して変更後の YAML ファイルをアップロードします。必ず説明されているとおりにフィールドを変更してください。

  1. 次のコマンドで、構成を表示してダウンロードします。

    gcloud run services describe SERVICE --format export > service.yaml
  2. run.googleapis.com/ingress: アノテーションを更新します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      annotations:
        run.googleapis.com/ingress: INGRESS

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

  3. 次のコマンドを使用して、サービスを新しい構成に置き換えます。

    gcloud beta run services replace service.yaml

次のステップ

サーバーレス VPC アクセスを使用すると、下り(外向き)設定を使用して Cloud Run(フルマネージド)サービスを VPC ネットワークに直接接続できます。

Cloud Run(フルマネージド)で HTTP(S) 負荷分散を使用することもできます。