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

デプロイされたゲートウェイへのエンドユーザー リクエストの認証に加えて、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 の場合、Cloud Run サービスにアクセスするには、ゲートウェイのサービス アカウントに適切なロールと権限(roles/run.invoker ロールまたは run.routes.invoke 権限を含むロール)を付与します。

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

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

Cloud Functions

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

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

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

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

API Gateway で Cloud 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