バックエンド サービスのセキュリティ強化
デプロイされたゲートウェイへのエンドユーザー リクエストの認証に加えて、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 関数とバックグラウンド関数で異なります。
- HTTP 関数では、デフォルトで認証が必要です。HTTP 関数に IAM を構成すると、関数が未認証の呼び出しを許可するかどうかを指定できます。
- バックグラウンド関数を呼び出すことができるのは、関数が登録されているイベントソースだけです。
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.updateclientauthconfig.clients.createclientauthconfig.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レスポンス コードで失敗する可能性があります。