AI作成・独立検証済(有資格者監修なし)SAA-C03 対応
KMSによる暗号化(キーポリシーとIAMポリシーの関係)難易度 高無料

IAMユーザー bob には kms:Decrypt をすべてのリソース("Resource": "*")に許可するIAMポリシーがアタッチされている。しかし bob が特定のCMK(alias/finance-key)を使って Decrypt を呼び出すと AccessDeniedException になる。このCMKのキーポリシーには、デフォルトで含まれる「IAMポリシーによるアカウントルートへの権限委任を有効化する」ステートメント(Enable IAM User Permissionsに相当するもの)が削除されて存在しない状態だった。この状況の説明として最も適切なものを選べ。(単一選択)

  1. AIAMポリシーで kms:DecryptResource: * で許可しているので、キーポリシーの内容に関わらず bob は復号できるはずである。AccessDeniedExceptionの原因は別にある
  2. Bキーポリシーから「IAMポリシーへの権限委任(アカウントルートを許可する既定ステートメント)」が削除されているため、キーポリシー側で bob(または関連ロール)を明示的に許可しない限り、IAMポリシーのAllowだけではそのCMKにアクセスできない
  3. CSCPが暗黙的にすべてのKMS操作をDenyしているため、キーポリシーやIAMポリシーの内容に関係なく拒否されている
  4. DCMKに対する Decrypt はキーポリシーでは制御できず、常にIAMポリシーのみで制御される仕様のため、今回の事象は起こり得ない(設定ミスの可能性は無い)
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:BAI作成・独立検証済

解説

KMSのCMKへのアクセス許可は、他のAWSリソースと異なり「キーポリシー」が常に評価に関与するという特殊なモデルを取る。

  • CMK作成時のデフォルトのキーポリシーには、通常 {"Effect":"Allow","Principal":{"AWS":"arn:aws:iam::<account>:root"},"Action":"kms:*","Resource":"*"} というアカウントルートへの許可ステートメントが含まれる。これがあることで初めて、IAMポリシー側の許可がそのCMKへのアクセスとして「有効」になる (IAMポリシーに実効力を持たせるための“扉”をキーポリシー側が開けている状態)。
  • この設問のようにそのステートメントが削除されている場合、IAMポリシーでどれだけ広く kms:Decrypt を許可していても、 キーポリシー側に bob(または彼が引き受けているロール)を明示的に許可するステートメントが無い限りアクセスは拒否される。
  • 解決には、キーポリシーに bob(または関連ロール)を許可するステートメントを追加するか、 削除されたルートへの委任ステートメントを復元してIAMポリシー側の管理に戻す必要がある。
各誤答が違う理由
  • AKMSはキーポリシーが常に評価に関与する特殊なリソース。「IAMに権限委任する」ステートメントが無いキーポリシーでは、IAMポリシー側のAllowだけでは不十分。
  • C設問はSCPの存在に触れておらず、これは論点のすり替え。原因はキーポリシーの権限委任ステートメントの欠如である。
  • D事実に反する。CMKはキーポリシーが必ず評価対象になり、キーポリシーの内容次第でIAMポリシーのAllowが無効化されうる。
ひっかけ: 「IAMポリシーでAllowしているのだから使えるはず」という直感(A)が典型的な誤り。KMSはキーポリシーが常に関与する特殊な評価モデルであり、 「IAMに権限委任するステートメント」が無いキーポリシーでは、IAMポリシーだけでは不十分。SCPの話(C)にすり替えるのも本問の論点ではない。
コマンド例と想定される挙動(未実行)
kms:Decrypt on alias/finance-key → AccessDeniedException
(IAMポリシーは Allow だが、キーポリシーに Enable IAM User Permissions 相当のステートメントが無く、
 かつ bob を明示的に許可するステートメントも無いため拒否される)
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)
この分野をもっと解いて、得点源に
IAMとセキュリティ設計 を含む問題を分野別に演習できます。
演習する →