SCSアイデンティティとアクセス管理
ある企業ではABACを活用したアクセス制御を導入しています。複数のプロジェクトチームが1つのAWSアカウント内でEC2インスタンスを管理しており、以下の要件があります。
・各開発者のIAMロールには「project」タグが付与されている(例: project=alpha)
・EC2インスタンスにも「project」タグが付与されている(例: project=alpha)
・開発者は自分のIAMロールのprojectタグ値と一致するprojectタグが付いたEC2インスタンスのみを停止・起動できる
・すべての開発者ロールに1つの共通IAMポリシーを適用する
この要件を満たすIAMポリシーのCondition要素として最も適切なものはどれですか?
Aリクエストタグ(aws:RequestTag/project)の値が、IAMプリンシパルタグのポリシー変数(${aws:PrincipalTag/project})と一致する場合に許可する
aws:RequestTag/projectはRunInstancesのような新規作成時のリクエストタグを参照するため、既存インスタンスの停止・起動操作には適用されません。リソースタグベースの動的照合が必要です。
Bリソースタグ(aws:ResourceTag/project)の値が、IAMプリンシパルタグのポリシー変数(${aws:PrincipalTag/project})と一致する場合に許可する
✓ 正解
既存リソースへの操作はリソースタグを参照し、IAMポリシー変数${aws:PrincipalTag/project}を使うことで、EC2インスタンスのプロジェクトタグがプリンシパルのタグと一致する場合のみアクセスを許可できます。
CIAMプリンシパルタグ(aws:PrincipalTag/project)の値が、リクエストタグのポリシー変数(${aws:RequestTag/project})と一致する場合に許可する
Conditionの左辺に置くべきはプリンシパル属性ではなく、評価対象のリソース属性です。操作対象はEC2インスタンスのため、aws:ResourceTag/projectを左辺に置き、プリンシパルタグをポリシー変数で参照するのが正しいです。
Dタグキーの存在確認(aws:TagKeys: project)と、プリンシパルタグ(aws:PrincipalTag/project)が固定値(例: alpha)と一致する場合に許可する
aws:TagKeysはタグキーの存在確認のみで、タグ値の動的比較はできません。固定値をハードコードすると複数プロジェクトへの対応ができず、スケーラブルなABAC実装にはなりません。
解説
ABACでリソースのタグとプリンシパルのタグを動的に照合するには、Conditionにaws:ResourceTag/project(EC2インスタンスに付いたタグ値)を指定し、値にポリシー変数${aws:PrincipalTag/project}(IAMロールに付いたタグ値)を使います。StopInstances・StartInstancesのような既存リソースへの操作ではリソースタグが参照されるため、この設定が正しいです。
選択肢Aのaws:RequestTag/projectはAPIリクエスト内で明示的に渡されるタグ(RunInstancesでの新規タグ付けなど)を参照します。既存インスタンスへの停止・起動操作には適用されず不適切です。
選択肢Cのaws:PrincipalTag/projectをConditionの左辺に置いたアプローチは誤りです。評価対象はEC2インスタンスのタグであるため、左辺にはaws:ResourceTagを置く必要があります。
選択肢Dのaws:TagKeysはタグキーの存在確認にのみ使用でき、タグ値の動的照合はできません。固定値をハードコードすると全プロジェクト共通ポリシーとして機能しません。
ドメイン別正答率・予想スコアでリアルタイムに実力把握
無限ノックでSCSを徹底対策。全問AI生成のオリジナル問題。
無料で演習を始める →