AWS

KMS キーポリシーの「デフォルトキーポリシー」は何を許可しているのか

API や CLI でキーポリシーを指定せずに KMS キーを作成すると、アカウントの root プリンシパルに kms:* を許可する 1 つのステートメントだけを持つデフォルトキーポリシーが設定されます。これは「root が直接使う」ためではなく、IAM ポリシーでこのキーへのアクセスを制御できるようにする(IAM を有効化する)ことが目的です。このステートメントを削除すると、IAM ポリシーでは一切アクセスできないキーになります。

デフォルトキーポリシーの中身

ステートメントは次の 1 つだけです(Sid は Enable IAM User Permissions)。

{
  "Sid": "Enable IAM User Permissions",
  "Effect": "Allow",
  "Principal": { "AWS": "arn:aws:iam::123456789012:root" },
  "Action": "kms:*",
  "Resource": "*"
}

ポイントは Principal が「root ユーザーそのもの」ではなく「アカウント全体」を表す点です。この許可があることで、同一アカウント内の IAM ユーザー・ロールに対して IAM ポリシー側で kms:Decrypt 等を付与すれば、キーポリシーを編集しなくてもアクセスを許可できるようになります。

コンソールで作成した場合との違い

マネジメントコンソールのキー作成ウィザードでは、上記に加えて「キー管理者」「キーユーザー」を選択でき、選択内容に応じたステートメントが追加されます。つまりコンソール経由のデフォルトは API/CLI のデフォルトより多くのステートメントを持ちます。研修等で「デフォルトキーポリシー」と言うときは、どちらの文脈かを確認すると齟齬を防げます。

確認コマンド

aws kms get-key-policy \
  --key-id alias/example \
  --policy-name default \
  --output text

参照(一次情報)

← 目次に戻る