開発者が API Gateway(REST API)を公開しています。社内の独自 OAuth 2.0 認証サーバーで発行された Bearer トークン(JWTではなく独自形式)を持つクライアントのみアクセスを許可し、かつ認証結果のユーザーID とロール情報をバックエンドの Lambda 関数に渡す必要があります。最も適切なアプローチはどれですか?
API Gateway の Lambda オーソライザー(トークンタイプ)を実装し、受け取ったトークンを独自ロジックで検証して IAM ポリシーとコンテキスト変数(ユーザーID・ロール情報)を返す Lambda オーソライザー(旧称:カスタムオーソライザー)は API Gateway に届いたトークンをカスタムロジックで検証し、IAM ポリシーと任意のコンテキスト変数($context.authorizer.*)を返します。このコンテキスト変数はバックエンド Lambda のイベントオブジェクトに含まれ、ユーザーID やロール情報を後段に伝達できます。 選択肢C の Cognito オーソライザーは Cognito User Pools が発行した JWT のみ対応しており、独自 OAuth サーバーのトークンは検証できません。 選択肢A の IAM 認証は SigV4(署名バージョン 4)署名を外部クライアントに配布する必要があり、独自 OAuth フローとは相容れません。 選択肢D のリソースポリシーは IP アドレスや VPC エンドポイントによるアクセス制御を行うものであり、Bearer トークンの検証には対応していません。また、バックエンド Lambda でトークン検証を行う構成では、未認証リクエストも Lambda の起動コストが発生し、API Gateway 層での早期拒否ができません。