SAA-C03セキュアなアーキテクチャの設計MEDIUM単一選択

ある企業が、Amazon Cognito ユーザープールを使ったモバイルアプリを運用している。ユーザーがサインインした後、アプリから直接 S3 バケットにファイルをアップロードできるようにしたい。各ユーザーは自分のプレフィックス(/private/<ユーザーID>/)以下のみに書き込みでき、他のユーザーのデータにはアクセスできないようにしたい。最も適切なアーキテクチャはどれか。

  1. A. Amazon Cognito Identity Pool(フェデレーテッドアイデンティティ)を使い、認証済みユーザーに一時的な IAM 認証情報を付与する。IAM ロールのポリシーで cognito-identity.amazonaws.com:sub 変数を使ってユーザー固有のプレフィックスのみへのアクセスを許可する。
  2. B. Lambda 関数を経由してすべての S3 アクセスを行い、Lambda でユーザーの権限チェックをする。
  3. C. すべてのユーザーが使う共通の IAM ユーザーのアクセスキーをアプリに埋め込み、S3 にアクセスする。
  4. D. すべてのユーザーに同一の IAM ロールをアタッチし、S3 バケット全体への読み書き権限を付与する。
解答と解説を見る

正解: A

Amazon Cognito Identity Pool は Cognito User Pool での認証後にフェデレーテッドアイデンティティとして一時的な AWS 認証情報を発行する。IAM ロールのポリシーで ${cognito-identity.amazonaws.com:sub} ポリシー変数を Resource ARN に組み込むことで、ユーザーごとに自分の Cognito Identity ID に対応するプレフィックスのみへのアクセスを許可できる。静的なアクセスキー不要で、認証情報が自動ローテーションされる安全な設計。選択肢Cの共通アクセスキーのアプリ埋め込みは、キーが漏洩するリスクが非常に高く、ユーザーごとのアクセス分離もできない。選択肢BのLambda 経由は機能するが、アップロードファイルが Lambda の最大ペイロード(6MB)を超えられない制限があり、大容量ファイルには向かない。選択肢DはS3 全体への読み書きを全ユーザーに付与しており、最小権限の原則に反し他ユーザーのデータへのアクセスも可能になる。

▸ この試験を本気で演習する(全150問・無料)