📝

Cloud Run のネットワーク構成で考慮した点

2023/12/14に公開

はじめに

こんにちは。クラウドエースで SRE ディビジョンに所属している kazz と申します。
最近、Cloud Run のネットワーク構築に取り組む機会がありましたので、構成を考えるにあたって考慮した点をまとめていきたいと思います。

Cloud Run について

Cloud Run は、コンテナを使用して、サーバーレスでアプリケーションを実行できるプロダクトです。
Cloud Run を使用すると、コンテナ イメージをデプロイして、HTTP リクエストに応答する Web アプリケーションを簡単に作成できます。
しかし、初期設定では、Cloud Run はオープンなインターネット構成になっているため、セキュリティやネットワークの観点から、適切な設定を行う必要があります。
本記事では、Cloud Run のネットワーク構成で考慮した点について、外部からのアクセス、認証、外向きの接続、の3つの観点でまとめていきます。

外部からのアクセスをどうするか

Cloud Run の外部からのアクセス(Ingress)には、All 、Internal 、Internal + Cloud load balancing の3つの設定があります。
デフォルトでは、All に設定されていますが、Cloud Run のユースケースに合わせて適切な設定を選択する必要があります。

All(全ての通信を許可)

0
Ingress の制御を All に設定すると、Cloud Run はインターネットからのすべてのリクエストを直接受け入れるように構成されます。
これにより、Cloud Run 上のアプリケーションを簡単に一般公開することができますが、不正なアクセスや攻撃に対しても開かれた状態となるため、要件などをしっかりと考慮してから選択する必要があります。

Internal(内部通信のみ許可)

1
Ingress の制御を Internal に設定すると、Cloud Run は VPC ネットワーク内のリソース、または特定の Google Cloud プロダクトからのリクエストのみを受け入れるように構成されます。
これにより、Cloud Run はインターネットから隔離され、内部ネットワーク内でのみアクセスが可能になります。
マイクロ サービスとして Cloud Run を使用する場合などにはこの設定を選択しましょう。

Internal + Cloud load balancing

2
Ingress の制御を Internal に設定した上で、Cloud Load Balancing を設置すると、Cloud Run は内部通信によって許可されるリソースと Cloud Load Balancing 経由のリクエストのみを受け入れるようになります。
この構成では、アプリケーションを公開しつつ、アクセス制御やトラフィックの負荷分散をすることができます。
また、以下のような構成を実装したい場合には、Cloud Load Balancing を設置する必要があります。

  • Cloud Armor を使用したい(ファイア ウォール ルールの適用)
  • Identity-Aware Proxy を使用したい(ユーザーのアクセス制限)
  • 独自ドメインを使用したい

認証をどうするか

Cloud Run では 「未認証の呼び出しを許可」と「認証が必要」という2つの認証設定が選択できます。
ユースケースに合わせて適切な設定を選択することで、セキュリティを向上させることができます。

未認証の呼び出しを許可

この設定にすると、サービスへのアクセスに対して認証が不要になるため、ユーザーは簡単にサービスにアクセスできます。
一般公開されたアプリケーションを作成する場合などにはこの設定を選択しましょう。

認証が必要

この設定にすると、 roles/run.invoker の IAM ロールを持つユーザーまたはサービス アカウントだけが、サービスにアクセスできるようになります。
未認証のリクエストは自動的に拒否されるため、不正アクセスや悪意のある使用を防止できます。
IAM でしかアクセス制御は行えないため、アプリケーションにエンドユーザーの認証を実装したいなどの場合は、追加で Cloud Load Balancing + IAP の構成が必要です。

外向きの接続をどうするか

Cloud Run の外向きの接続(Egress)では、主に IP アドレスの固定、VPC 内部リソースへの直接アクセスの必要性についての考慮が必要です。
デフォルトの設定では、Cloud Run は自動で Google Cloud のインフラを経由して外部ネットワークと通信します。
ただし、デフォルトの設定は、VPC ネットワーク内のリソースへのアクセスはできず、外部 IP アドレスは動的になり、固定することができません。
そのため、VPC 内部リソースへのアクセスが必要な場合や、IP アドレスを固定したい場合は、適切な構成にする必要があります。

VPC 内のリソースへのアクセスが必要な場合

VPC 内のリソースへのアクセスが必要という場合は、サーバレス VPC アクセスか、Direct VPC Egress を使用する必要があります。

サーバレス VPC アクセス

3
サーバレス VPC アクセスは、VPC 内にコネクタを作成し、Cloud Run からコネクタを経由して VPC 内のリソースにアクセスする機能です。
VPC Peering と組み合わせることで、異なる VPC 間でのプライベート アクセスも可能になります。

Direct VPC Egress

4
Direct VPC Egress は 2023年8月にリリースされた新機能です。
https://zenn.dev/cloud_ace/articles/cloudrun-direct-vpc-egress-preview
Direct VPC Egress を使用すると、Cloud Run はサブネットのIPアドレスを使用して直接 VPC ネットワーク内のリソースにアクセスできるようになります。
インスタンスを介さないため、サーバレス VPC アクセスよりも簡単かつ高いパフォーマンスが得られます。
しかし、Direct VPC Egress は Cloud NAT を使用できない、追加の IP アドレスを振り当てることができないといった制限があります。
また、2023年12月現在では Preview のため、本番環境での使用は推奨されていません。
用途や要件に合わせてサーバレス VPC アクセスと使い分ける必要があります。

外部接続への IP アドレスを固定をしたい場合

5
外部接続への IP アドレスを固定したい場合、サーバーレス VPC アクセスCloud NAT を使用した構成にする必要があります。
サーバレス VPC アクセス を使用したネットワークで、Cloud NAT を設置することで、Cloud Run は固定された外部 IP アドレスを使用して、外部ネットワークにアクセスできるようになります。
Cloud Run から接続する外部サービスが、特定の IP アドレスからの接続のみを許可する場合などはこの構成にしましょう。

まとめ

本記事では、Cloud Run のネットワーク構成で考慮した点について、外部からのアクセス、認証、外向きの接続、の3つの観点でまとめてきました。
ネットワーク以外にも考慮すべき点は多くありますが、本記事で紹介した点を踏まえて、適切な構成を選択していただければと思います。

Discussion