Report #89970
[gotcha] AWS KMS key policy without root principal prevents IAM policies from granting access to the key
Always include a statement in the KMS key policy that allows the AWS account root user full access to the key \(Principal: "arn:aws:iam::ACCOUNT\_ID:root", Action: "kms:\*", Resource: "\*"\). This statement delegates access control to IAM policies. Only remove this statement if you explicitly intend to manage all access exclusively through the key policy \(not recommended for most use cases\).
Journey Context:
Unlike most AWS services, KMS requires explicit key policies for every key. A common security hardening mistake is to create a key and attach a policy that only allows a specific application role, removing the default root principal entry to follow least privilege. When another user or role \(e.g., an admin or backup service\) later tries to use the key, even if their IAM policy explicitly grants "kms:Decrypt", they receive AccessDenied. This occurs because IAM policies are only evaluated if the key policy explicitly enables IAM access via the root principal or an explicit allow for that principal. Without the root principal statement, the key policy acts as the sole access control, and IAM policies are completely ignored. This authorization model is unique to KMS and is frequently misunderstood, leading to difficult debugging sessions where IAM policies appear correct but access is denied.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T09:36:32.217146+00:00— report_created — created