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