バックエンド サービスのセキュリティ強化

デプロイされたゲートウェイへのエンドユーザー リクエストの認証に加えて、API Gateway とバックエンド サービス間のアクセスを保護することが重要です。バックエンド マネージド サービス(Cloud Run、Cloud Run functions、App Engine など)への公開アクセスを防止するには、次のようにします。

  • バックエンド サービスへの認証済みアクセスのみを許可します。
  • ゲートウェイの API 構成に関連付けられているサービス アカウントに必要な権限を付与し、ゲートウェイがバックエンドを呼び出す権限を取得できるようにする。

このページでは、バックエンド サービスの保護に必要な手順と、これらのサービスにアクセスするために必要なゲートウェイのサービス アカウントのロールと権限について説明します。

Cloud Run

すべての Cloud Run(フルマネージド)サービスは、デフォルトで非公開にデプロイされます。つまり、リクエストで認証情報を提供しないと、サービスにアクセスできません。

Cloud Run サービスは IAM で保護されています。デフォルトでは、Cloud Run サービスは、run.routes.invoke 権限を含む任意のロールから呼び出すことができます。

別のユーザーにアクセスを許可するように、Cloud Run(フルマネージド)サービスの IAM を構成できます。

API Gateway の場合、ゲートウェイのサービス アカウントに適切なロールと権限(roles/run.invoker ロールまたは run.routes.invoke 権限を含むロール)を付与することで、Cloud Run サービスへのアクセスが有効になります。

サービスレベルの IAM を使用して個々のサービスに対して、またはプロジェクト レベルの IAM を使用してプロジェクト内のすべてのサービスに対して、ゲートウェイのアクセスを制御できます。

Cloud Run サービスに対するゲートウェイのリクエストが拒否された場合は、ゲートウェイのサービス アカウントに roles/run.invoker のロールが付与され、ゲートウェイのサービス アカウントに run.routes.invoke 権限が付与されていることを確認します。Cloud Run IAM リファレンスで、呼び出し元のロールと権限の詳細を確認してください。

Cloud Run functions

Cloud Run functions のバックエンド サービスの場合は、Identity and Access Management(IAM)を使用して、関数の表示、作成、更新、削除の機能を制御します。IAM は、ロールを付与することで、API Gateway などの Cloud Run functions サービスへの呼び出し元の認証を適用します。

IAM でロールと権限を付与すると、次の 2 つのアクションを制御できます。

  • デベロッパーによる操作: 関数の作成、更新、削除を許可し、関数へのアクセスを管理します。
  • 関数の呼び出し: 関数を実行します。

関数を呼び出す権限の付与は、HTTP 関数とバックグラウンド関数で異なります。

API Gateway で Cloud Run functions バックエンド サービスを呼び出すことができるようにするには、ゲートウェイのサービス アカウントに roles/cloudfunctions.invoker ロール、または cloudfunctions.functions.invoke 権限を含むロールを付与します。

サービスレベルの IAM を使用して個々の関数に対して、またはプロジェクト レベルの IAM を使用してプロジェクト内のすべての関数に対して、ゲートウェイのアクセスを制御できます。

Cloud Run functions サービスに対するゲートウェイのリクエストが拒否された場合は、ゲートウェイのサービス アカウントに roles/cloudfunctions.invoker のロールが付与され、ゲートウェイのサービス アカウントに cloudfunctions.functions.invoke 権限が付与されていることを確認します。Cloud Functions IAM リファレンスで、呼び出し元のロールと権限の詳細を確認してください。

App Engine

App Engine アプリを保護するには、Identity-Aware Proxy(IAP)を使用して、リクエストが認証されるようにする必要があります。

App Engine バックエンド サービスがデプロイされているプロジェクトで、IAP を有効にするの手順に沿って操作します。IAP を有効にすると、App Engine バックエンド アプリケーションへのアクセスが保護されます。

API Gateway で App Engine バックエンド サービスを呼び出すことができるようにするには、IAP アクセスの設定の手順に沿って、ゲートウェイに関連付けられたサービス アカウントに IAP-secured Web App User ロールを付与します。また、サービス アカウントに次の権限を含むロールを付与します。

  • appengine.applications.update
  • clientauthconfig.clients.create
  • clientauthconfig.clients.getWithSecret

その他の Google Cloud API

aiplatform.googleapis.com や bigquery.googleapis.com などのGoogle Cloud API にはアクセス トークンが必要です。API Gateway が他のバックエンドに送信する ID トークンは拒否されます。ゲートウェイがこれらの API を呼び出せるかどうかは、ストリーミング モードによって異なります。

  • ストリーミング ゲートウェイ: effectiveStreamingMode が EFFECTIVE_STREAMING_MODE_ENABLED のゲートウェイは、ホストが .googleapis.com または .vertexai.goog で終わる各バックエンドに対して、ゲートウェイのサービス アカウントのアクセス トークンを使用して認証します。アクセス トークンには https://www.googleapis.com/auth/cloud-platform スコープのみがあるため、ゲートウェイは別の OAuth スコープを必要とする API メソッドを呼び出すことができません。

    同じゲートウェイ上の他のバックエンドは、引き続き ID トークンを受け取ります。disable_auth(OpenAPI 2.0)または disableAuth(OpenAPI 3.x)が設定されたバックエンドはトークンを受け取りません。jwt_audience(OpenAPI 2.0)フィールドと jwtAudience(OpenAPI 3.x)フィールドは、これらのバックエンドに影響しません。

    ゲートウェイのサービス アカウントに、ターゲット API が必要とする IAM ロール(Gemini Enterprise Agent Platform(aiplatform.googleapis.com)の Agent Platform ユーザー(roles/aiplatform.user)ロールなど)を付与します。アクセス トークンをまだ送信していないストリーミング ゲートウェイは、API Gateway が次にゲートウェイの更新をロールアウトするときに送信を開始します。すぐに切り替えるには、新しい API 構成に更新します。

  • その他のゲートウェイ: effectiveStreamingMode が EFFECTIVE_STREAMING_MODE_DISABLED のゲートウェイは、 Google CloudAPI の呼び出しをサポートしていません。呼び出しは 401 レスポンス コードで失敗する可能性があります。