モバイルアプリでユーザーがCognito User Poolsで認証した後、認証済みユーザーにS3バケットへの直接アクセス権を付与したいと考えています。各ユーザーは自分専用のS3プレフィックス(例:user-data/{identity-id}/)のみにアクセスできるようにする必要があります。最も適切なアーキテクチャはどれですか?
Cognito Identity Poolsは、User Poolsで認証されたユーザーに一時的なAWS認証情報(STS経由)を付与します。IAMロールポリシーのResource句に「arn:aws:s3:::bucket/${cognito-identity.amazonaws.com:sub}/*」を設定することで、各ユーザーが自分のidentity-idに対応するプレフィックスにのみアクセスできます。User Poolsは認証(誰であるか)を担当し、Identity PoolsはAWSリソースへの認可(何ができるか)を担当するという役割分担が重要です。 選択肢A の Lambda 関数経由はリクエストごとにサーバーサイド処理が必要で複雑性が増し、IAMによる直接アクセス制御と比べてスケーラビリティが低下します。 選択肢C の S3 バケットポリシー直接リストアップはユーザーごとにS3バケットポリシーを更新する必要があり非現実的です。 選択肢D の API Gateway 署名付きURL はサーバーサイドロジックが必要で、ユーザーごとのプレフィックス制限をIAMレベルで直接強制できません。