ある企業が、複数の開発者が共有で使用する S3 バケットを管理している。各開発者は自分のプレフィックス(/dev/<ユーザー名>/)以下のオブジェクトにのみ読み書きでき、他の開発者のプレフィックスには一切アクセスできないようにしたい。最小権限の原則に従い、最も適切な方法はどれか。
- A. 各開発者の IAM ポリシーに、aws:username 変数を使った条件付き S3 アクセス許可を設定し、自分のプレフィックス以下のみを許可する。
- B. すべての開発者に S3 フルアクセス権限を付与し、業務ルールで他のプレフィックスへのアクセスを禁止する。
- C. S3 バケットを開発者ごとに分割して作成し、それぞれに独立したバケットポリシーを設定する。
- D. S3 バケットの ACL で各開発者のアカウントに個別のアクセス許可を付与する。
解答と解説を見る
正解: A
IAM ポリシーの Condition ブロックで ${aws:username} ポリシー変数を使うと、「自分のユーザー名と一致するプレフィックスへのアクセスのみ許可」をポリシー1枚で全開発者に適用できる。例えば Resource の ARN に arn:aws:s3:::bucket-name/dev/${aws:username}/* と記述するだけで個人別の制御が実現できる。選択肢Cは開発者ごとにバケットを作成する方法で、S3 バケット数が増えて管理コストが高くなる。選択肢DのS3 ACL はオブジェクト単位・バケット単位の制御であり、プレフィックス単位の動的な制御には適さない。また ACL はレガシー機能であり現在は推奨されない。選択肢Bはフルアクセスを付与して業務ルールで制限するもので、最小権限の原則に明確に反する。