ある企業は、アカウントA(データ加工基盤)で夜間バッチを実行しています。バッチは、アカウントA内の Amazon S3 バケットから加工前のオブジェクトを読み取り、アカウントB(配信基盤)の Amazon S3 バケットへ複製します。バッチはアカウントAの IAM ロールを使い、同じ実行の中で両方のバケットにアクセスします。このロールには、ロール自身の IAM ポリシーで、アカウントA内のバケットを読み取る権限と、アカウントBの複製先バケットへ書き込む権限が既に付与されています。アカウントAのロールの権限設定は変更せず、バッチの実行中にロールを切り替えずに、アカウントBのバケットへの書き込みを許可したいと考えています。
単一選択:正しいものを1つ選択
正解・解説を見る
正解はCです。アカウントBの複製先バケットのバケットポリシーでアカウントAのバッチ用ロールに書き込みを許可すると、ロールは元のアカウントの権限を保ったまま、アカウントAのバケットからの読み取りとアカウントBのバケットへの書き込みを同じ実行の中で行えます。ロール側の書き込み権限は問題文のとおり既に付与されているため、不足しているのはアカウントB側の許可だけです。Aは、ロールを引き受けると引き受けたロールの権限で動作するため、アカウントAのバケットを読み取る元の権限を同じセッションで使えず、要件に反します。Bは、複製の実行主体がアカウントBになり、バッチがアカウントAのロールで両方を扱うという前提に合いません。また、アカウントBの全プリンシパルへの読み取り付与は必要以上に広い権限です。Dは、実行主体がアカウントBのユーザーになるため、アカウントAのロールで両方のバケットを扱うという要件を満たしません。
A:信頼ポリシーでアカウントAのロールに引き受けを許可する設計自体は成立しますが、バッチがこのロールを引き受けると、そのセッションでは引き受けたロールの権限で動作します。アカウントA内のバケットを読み取るために元のロールの権限を使い続けることはできず、要件の『バッチの実行中にロールを切り替えない』に反します。
B:複製を実行する主体がアカウントBの配信基盤になるため、バッチがアカウントAのロールで両方のバケットを扱うという前提に合いません。また、このポリシーはアカウントAのバケットの読み取りを許可するもので、アカウントBのバケットへの書き込みを許可する設定ではありません。さらに、アカウントBのすべてのプリンシパルに読み取りを与えるのは必要以上に広い権限付与であり、対象を絞るべき場面で不適切です。
C:リソースベースポリシーは、そのリソースにアクセスできるプリンシパルを直接指定します。アカウントBのバケットポリシーでアカウントAのロールを指定すると、ロールを引き受けずに書き込みが可能になり、ロールは元のアカウントの権限を保ったまま動作します。アカウント間のアクセスでは両方のアカウントで操作を許可するポリシーが必要ですが、アカウントA側はロール自身の IAM ポリシーで読み取りと書き込みが既に許可されています。そのため、追加の変更はアカウントBのバケットポリシーだけで足ります。
D:要件はバッチがアカウントAの IAM ロールで両方のバケットを扱うことです。このユーザーの認証情報で処理させる設計は、実行主体をアカウントAのロールからアカウントBのユーザーへ変えてしまうため、要件を満たしません。さらに、ユーザーの認証情報をバッチに渡す必要があり、ロールを使う設計より運用上の利点がありません。
学習のポイント:複製先のバケットポリシーでアカウントAのバッチ用ロールを直接許可すると、ロールを切り替えずに両方のバケットを扱えます。ロールの引き受けでは元の権限が使えなくなる点が、誤答を見分ける鍵です。
公式ドキュメント