G-gen の佐々木です。当記事では、Cloud Run サービスの作成時に自動生成されるエンドポイント URL の無効化について解説します。

前提知識
Cloud Run サービスについて
Cloud Run サービスとは、Google Cloud のサーバーレス コンテナ サービスである Cloud Run の種類の1つであり、HTTP リクエストをトリガーとしてアプリケーションを実行することができるサービスです。
Cloud Run、および Cloud Run サービスの詳細については以下の記事をご一読ください。
Cloud Run におけるロードバランサーの使用
Cloud Run サービスでは、サービスにアクセスするための *.run.app ドメインの URL がデフォルトで提供されています。このエンドポイントを使用することで、ユーザー側で証明書を用意することなくサービスに HTTPS アクセスすることができます。

しかし、 Cloud Run サービスで Web アプリケーションを公開するようなユースケースでは、デフォルトで提供される URL をエンドポイントとして使用せず、アプリケーションロードバランサを Cloud Run の前段に配置することが推奨されます。
ロードバランサの使用は、独自のドメインを使用したサービスの公開や、WAF である Cloud Armor を使用したセキュリティ強化、複数サービス間でパスベースのルーティングが利用できるなどのメリットがあります。

Cloud Run サービスに対するアクセスをロードバランサを経由した通信のみに制限したい場合、Cloud Run の設定項目である「上り(内向き)の制御」で「外部アプリケーション ロードバランサからのトラフィックを許可する」に設定します。これにより、インターネットから Cloud Run サービスのエンドポイント URL に対して直接アクセスすることができなくなります。

しかし、この設定でも「内部」からのアクセス、たとえば同じプロジェクトに存在する VPC からエンドポイント URL に対するアクセスはできてしまいます。このような「内部」からのアクセスはロードバランサを迂回する形となるため、ロードバランサに紐付いている Cloud Armor のセキュリティルールが適用されないなどの問題があります。

「内部」からのアクセスとされる通信の種類についてはこちらのドキュメントを参照してください。
デフォルト URL の無効化
URL 無効化のメリット
サービスの作成時および更新時に、サービスのエンドポイントとなる URL を無効化することができます。
URL を無効化することで、サービスに対するロードバランサを迂回したアクセスができなくなるため、すべての通信に対して Cloud Armor のセキュリティポリシーを適用することができます。
アプリケーションがロードバランサを経由したアクセスのみを想定している場合、URL を無効化しておくことで想定外のルートをなくすことができます。
URL を無効化する場合の注意点
URL を無効化する場合、「内部」から Cloud Run に対する直接アクセスができなくなるため、以下のサービスからの呼び出しができなくなります。
- BigQuery remote functions
- Cloud Scheduler
- Cloud Service Mesh
- Cloud Tasks
- Eventarc
- Firebase App Hosting
- Firebase Hosting
- Pub/Sub
- Workflows
- 合成モニタリング、稼働時間チェック
手順
コンソール、gcloud CLI、YAML ファイルを使用したサービスのデプロイ・更新時に URL の無効化を行うことができます。
CLI の場合、gcloud run deploy コマンドで --no-default-url フラグを指定して実行してサービスをデプロイすることで、URL が無効化されます。
# URL を無効化した Cloud Run サービスのデプロイ $ gcloud run deploy ${サービス名} --no-default-url
サービスのデプロイに YAML ファイルを使用する場合は metadata.annotations.run.googleapis.com/default-url-disabled の値を true に設定します。
試しに、以下の YAML ファイルを使用してサービスをデプロイしてみます。
# service.yaml apiVersion: serving.knative.dev/v1 kind: Service metadata: name: url-disabled-service annotations: run.googleapis.com/default-url-disabled: "true" # URL を無効化 spec: template: spec: containers: - image: us-docker.pkg.dev/cloudrun/container/hello # サンプルのコンテナイメージ
YAML ファイルを使用したデプロイは、gcloud run services replace コマンドを使用します。
$ gcloud run services replace service.yaml --region=asia-northeast1 ----- 出力例 ----- Applying new configuration to Cloud Run service [url-disabled-service] in project [myproject] region [asia-northeast1] ✓ Deploying... Done. ✓ Creating Revision... ✓ Routing traffic... Done. New configuration has been applied to service [url-disabled-service]. URL: None
出力例の最終行を確認すると、本来 *.run.app ドメインの URL が出力される URL: の項目が None になっていることがわかります。
コンソール上からサービスを確認しても、URL の項目にエンドポイント URL が表示されていません。

佐々木 駿太 (記事一覧)
G-gen 最北端、北海道在住のクラウドソリューション部エンジニア
2022年6月に G-gen にジョイン。Google Cloud Partner Top Engineer に選出(2024 / 2025 Fellow / 2026)。好きな Google Cloud プロダクトは Cloud Run。
趣味はコーヒー、小説(SF、ミステリ)、カラオケなど。
Follow @sasashun0805