ABCABC Tech Catalog
夏の長期インターン参加学生募集中!詳細はこちら

Cloud Run間の内部通信を実現!

概要

Webアプリなどを作る際に、バックエンドのAPIサーバーとフロントエンドをそれぞれ別のCloud Runサービスにデプロイし、フロントエンドからAPIにアクセスする場合、APIサーバーが公開状態だとURLを知っていると誰でもアクセスできてしまいます。

そこでCloud Runサービス間の通信をGoogle Cloudプロジェクト内で閉じたセキュアな通信にしたいと思い試してみました!

やりたいこと

file1

今回は、APIサーバーへアクセスする際にCloud RunのデフォルトのURLを使用します。

フロントエンドからAPIサーバーにアクセスする際に、そのままの設定でアクセスするとインターネットを経由した通信になるので、誰でもアクセスできてしまいます。この間をできるだけ閉じた通信にしたいです。

今回はDirect VPC EgressというVPCネットワークを経由して通信させる方法を試してみます。

手順

バックエンドのIngress設定

まずは、外部から直接アクセスさせないために、APIサーバーをホストしているCloud RunのIngress(内向きの通信)を「内部」に限定します。

file2

これを設定することで、ブラウザ等でURLを叩いてもアクセスができなくなります。

file3

VPCの作成

続いて、フロントエンドがトラフィックを送信する宛先のVPCネットワークおよびサブネットを作成します。

サブネットを作成する際に「プライベート Google アクセス」をオンにします。これにより、外部IPを持たないインスタンスがGoogle APIとサービスへのアクセスが可能になります。

file4

フロントエンドのEgress設定

次に、フロントエンドのCloud Runサービスの設定をします。

ネットワーキング設定で、「アウトバウンド トラフィック用のVPCに接続する」を選択し、先ほど作成したVPCネットワークとサブネットを指定します。

file5

これでCloud RunサービスからVPCにトラフィックを送信することが可能になります。

しかしこれだけではインターネット経由で通信が出ていく可能性があります。

すぐ下のトラフィック ルーティングの設定で「すべてのトラフィックを VPC にルーティングする」を選択します。

file6

これを設定することで、フロントエンドのCloud Runの外向き通信は全て、作成したVPC経由で出ていくことになります。フロントから外部APIを叩く場合にも全てVPC経由になってしまうので、注意が必要です。

内部通信の確認

これで設定は終わりです。内部で通信できているかを確認します。

バックエンド側のCloud Runのログを確認してみます。アクセス元のremoteIpが「0.0.0.0」になっていれば内部アクセスができています。

file7

終わりに

今回はDirect VPC Egressを利用してCloud Run間の内部通信を試してみました。組織内向けのWebアプリなど外部に公開したくないサービスで、Cloud Runを利用した構成を検討する場合、利用してみるのも良いかしれません。Cloud ArmorやIAP(Identity-Aware Proxy)などと組み合わせるとより強固な構成にできそうです。

AUTHOR

野地 慎太郎

朝日放送グループホールディングス株式会社 技術局 技術開発部

2023年入社で、初期配属で現在の部署に配属される。動画配信やコンテンツ関連のデジタル支援等を担当。学生時代にM-1でスベり倒してから、今日までずっとスベり続けている。

WORK@ABC

技術力を培うための
環境と文化

ABCに昔から根付く「自分たちで開発する」文化を支える環境や取り組みをご紹介します
ABCについてもっと知る