あるスタートアップ企業が、React Nativeで構築したモバイルアプリにユーザー認証機能を追加しようとしています。要件は以下の通りです。 ①ユーザーは自前のメール/パスワードアカウントまたはGoogleアカウントでサインインできる ②認証後、ユーザーはAWS上の自分専用のS3フォルダーにファイルを直接アップロードできる ③アプリ内にAWSの長期的なアクセスキーをハードコードしてはならない ④最小の運用負荷で実装する。この要件をすべて満たすアーキテクチャはどれですか?
正解: Amazon Cognito ユーザープールで認証を管理し、Amazon Cognito IDプール(フェデレーテッドアイデンティティ)を使用して認証済みユーザーに一時的なAWS認証情報を払い出す。S3バケットポリシーでCognitoのIDに基づいてユーザーごとのフォルダーアクセスを制限する Cognito ユーザープールはユーザーディレクトリとして機能し、メール/パスワード認証やGoogleなどのソーシャルIDプロバイダーとのフェデレーションを管理します。IDプール(フェデレーテッドアイデンティティ)は認証済みユーザーにSTS経由で一時的なAWS認証情報を付与し、S3への直接アクセスを可能にします。S3バケットポリシーで「${cognito-identity.amazonaws.com:sub}」変数を使うことでユーザーごとのフォルダーアクセスを細かく制御でき、すべての要件を最小運用負荷で満たします。 選択肢Bは、長期的なアクセスキーをアプリに埋め込むため漏洩リスクが高く要件に違反します。 選択肢Cは、有効なパターンですが、API Gateway + LambdaというサーバーサイドコンポーネントをS3直接アクセスとは別に維持する必要があり、最小運用負荷に反します。 選択肢Dは、IAM Identity CenterはAWSコンソールや企業内アプリへのSSO向けサービスであり、モバイルエンドユーザー向けの認証には適していません。