モバイルアプリケーションの開発者が、ユーザーがGoogleアカウントでサインインした後に、ユーザーごとに専用のS3プレフィックスへ直接アクセスできる機能を実装したいと考えています。IAMユーザーを作成せずに一時的なAWS認証情報をモバイルクライアントに付与する最適な方法はどれですか?
Cognito IDプール(フェデレーテッドID)は、Google・Facebook・Amazon等のサードパーティIDプロバイダーのトークンを受け取り、STS経由で一時的なAWS認証情報を発行します。IAMポリシー変数(cognito-identity.amazonaws.com:sub)でユーザーごとのS3プレフィックスアクセス制御も実現できます。 選択肢AのAmazon Cognito ユーザープールでGoogleをIDプロバイダーとして設定し、発行されたJWTトークンをS3バケットポリシーで直接検証することは、ユーザー管理機能であり、JWT(JSON Web Token)をS3バケットポリシーで直接検証してAWS認証情報を付与する仕組みはサポートしていません。 選択肢CのクライアントからSTS AssumeRoleWithWebIdentity APIを直接呼び出し、GoogleのOIDCトークンでAWSロールを引き受けることは技術的に可能だが、Cognito IDプールが提供する認証済み/未認証ユーザーの統合管理・スケーラブルなID連携管理機能が欠如するため最適ではなく、Cognito IDプールがこの呼び出しをマネージドに代行するのがベストプラクティスです。 選択肢DのLambda関数をプロキシとして使用し、Googleでの認証成功後にLambdaがIAMユーザーのアクセスキーをクライアントに返すことは、IAMユーザーの長期認証情報をモバイルに配布するのはセキュリティ上のアンチパターンです。