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