GAEのIngress controlsを有効にし、appspot URLへの直接アクセスを制限する

この記事は約4分で読めます。

当ブログですが、Cloud Armorを使い管理系機能のアクセスを制限をかけているのですが、appspot URL経由だと管理系機能にアクセス可能となるセキュリティホールが存在しています。

絵にするとこんな感じです。

AWSで当ブログを運用していた時、同様のセキュリティホールがあり以前記事を書いているのですが、

  • 表門は施錠
  • 裏門は開放状態

という全く同じ状況になっている訳です。

これ何とかしたいなーと思っていたところ、GAEにIngress Controlsという機能が追加されていたので、こちらを使い対策をすることにしました。

スポンサーリンク

What is Ingress Controls??

GAEへのリクエストを制限する機能です。

この機能を使うことにより、

  • GCPの同一プロジェクト内のVPCからのリクエストのみ許可
  • GCPロードバランサと同一プロジェクト内のVPCからのリクエストのみ許可

ということが出来るようになります。

公式Docでは以下のことが書かれているので、GAEを使う場合の必須設定と思った方が良いですね。

注:AppEngineアプリでCloudLoad Balancingを使用する場合は、入力コントロールを使用して、アプリが内部トラフィックとCloud LoadBalancingトラフィックのみを受信するようにすることをお勧めします。それ以外の場合、ユーザーはアプリのappspot URL を使用して、GCLBで構成されたアクセス制御(Cloud Armor、IAP)を含むロードバランサーをバイパスできます。

スポンサーリンク

設定

公式Doc記載のコマンド実行で簡単に設定出来ました。

  • GCPロードバランサからのリクエストのみ許可
  • GCP同一プロジェクト内のVPCからのリクエストのみ許可

を行うコマンドとなります。

gcloud app services update 【GAEのサービス名】 --ingress internal-and-cloud-load-balancing
スポンサーリンク

動作確認

appspot URLにアクセスしてみます。

curl -s -D - -o /dev/null https://○○○.appspot.com/                                                                           

HTTP/2 403
x-appengine-city: 接続をしようとした都市名を表示
x-appengine-citylatlong: 34.690081,135.195631
x-appengine-country: JP
x-appengine-region: 28
content-length: 1519
content-type: text/html; charset=UTF-8
date: Wed, 23 Dec 2020 12:56:04 GMT
alt-svc: h3-29=":443"; ma=2592000,h3-T051=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"

403(リクエスト拒否)を返してくれています。

スポンサーリンク

まとめ

appspot URLへの直接アクセスルートを遮断出来たのでスッキリしました。

CloudRunも同様の問題(run.appURLに直接アクセス可能)があるので、気になり調べてみましたが、ちゃんとIngress controls機能があるようです。

CloudRunをお使いの方もこのあたりはご注意された方よいと思います。

Restrict network ingress for Cloud Run  |  Cloud Run Documentation  |  Google Cloud
スポンサーリンク

参考情報

Overview of app security  |  Google App Engine flexible environment docs  |  Google Cloud