テック技報最新号へ →
インフラ

AWS KMS: キーポリシーが許さない限り、IAM ポリシーで kms:Decrypt を付けても使えない

@dkfj · 2026-10-24
#infra#aws#kms#iam#multi-account#encryption

KMS のキーは、他の多くの AWS リソースと違って「リソース側のポリシー(キーポリシー)が先に効く」仕組みになっている。マルチアカウントで暗号化キーを共有するときに詰まりやすいのはここ。

仕組み

  • キーの利用可否は、まずキーポリシーで決まる。キーポリシーに書かれていない主体は、IAM ポリシーで kms:Decrypt などを持っていても使えない
  • IAM ポリシーを効かせたいときは、キーポリシーに「このアカウント(arn:aws:iam::<account-id>:root)に kms:* を許可する」文を入れておく。コンソールで作ったキーの既定ポリシーにある「Enable IAM User Permissions」がこれで、これがあって初めて同じアカウント内の IAM ポリシーで権限を配れる
  • つまり「キーポリシーが権限の上限(境界)を決め、IAM ポリシーはその内側で配る」と考えるとわかりやすい

別アカウントにキーを使わせるとき

両方の許可が必要になる。

  1. キーを持つアカウント側: キーポリシーで相手アカウント(またはその中の特定ロール)に必要な操作(kms:Decrypt、kms:GenerateDataKey など)を許可する
  2. 使う側のアカウント: そのロールの IAM ポリシーで、相手のキー ARN に対する同じ操作を許可する

どちらか片方だけだと AccessDenied になる。S3 の SSE-KMS で別アカウントのオブジェクトを読めないときは、バケットポリシーだけでなくキーポリシーも確認する。

注意点

  • キーポリシーからアカウントの root 許可を外すと、IAM で権限を配れなくなる。管理者まで締め出すと AWS サポートに頼むことになるので、変更前に必ず確認する
  • グラント(CreateGrant)でも一時的に権限を渡せる。サービス連携ではこちらが使われることもある
  • 投稿は要点のメモ。正確な評価ロジックは AWS KMS の「キーポリシー」ドキュメントで確認する

関連

出典

X の元の投稿を開く