あるスタートアップは SaaS アプリケーションのバックエンドで、ユーザーごとに異なる S3 パスへのアクセスを制御したいと考えています。ユーザーは Cognito で認証されています。コードの変更を最小限に、かつ IAM ユーザーを顧客ごとに作成せずに実現する最適な方法はどれですか?
- A. Cognito ユーザープールのグループ機能で全ユーザーを1つのグループに入れ、グループに S3 フルアクセスポリシーをアタッチする
- B. 全ユーザー共通の S3 バケットポリシーを作成し、オブジェクトレベルのアクセス制御は ACL で管理する
- C. Lambda Authorizer で Cognito トークンを検証し、Lambda がユーザーごとの一時的なアクセスキーを生成して返す
- D. Cognito ID プールのロールに IAM ポリシー変数(${cognito-identity.amazonaws.com:sub})を使って各ユーザー固有の S3 パスのみを許可する
解答と解説を見る
正解: D
Cognito ID プールと IAM ポリシーの変数(${cognito-identity.amazonaws.com:sub} など)を組み合わせると、認証済みユーザーの Cognito IdentityId をポリシー内で動的に参照でき、ユーザーごとに S3 の異なるプレフィックス(例: s3://bucket/users/{IdentityId}/*)へのアクセスを1つのポリシーで制御できます。A はフルアクセスを与えており最小権限に反します。C は Lambda でアクセスキーを返す設計は管理が複雑で、セキュリティリスクもあります。B は S3 ACL は廃止推奨であり、ユーザー単位の制御に適した仕組みではありません。
📚 関連サービスの解説: Amazon Cognito ・ AWS IAM