KMS: not authorized to perform: kms:Decrypt (or the key policy does not allow access)
The caller can’t use the KMS key that encrypts the data — the key policy or IAM policy doesn’t allow kms:Decrypt/GenerateDataKey.
Seen on:
AWS
Meaning
KMS keys require permission both in IAM and (for customer managed keys) the key policy. Reading SSE-KMS S3 objects, encrypted Secrets Manager secrets, SQS/SNS, or EBS snapshots across accounts all need kms:Decrypt on that key. S3 reports it as a plain AccessDenied.
Common causes
- Key policy doesn’t allow the role/account
- IAM policy lacks kms:Decrypt/GenerateDataKey
- Cross-account access without key sharing
- Key disabled or pending deletion
⚡ Quick fix
- Add kms:Decrypt (and kms:GenerateDataKey for writes) for the role
- Update the key policy for cross-account use
- Check the key state
Detailed fix by platform
IAM
{ "Effect": "Allow", "Action": ["kms:Decrypt", "kms:GenerateDataKey"], "Resource": "arn:aws:kms:eu-west-1:123456789012:key/1234abcd-..." }
How to diagnose
- Key — Which key encrypts the object? (head-object SSEKMSKeyId)
- Policies — Key policy + IAM
- State — Enabled?
🔧 Still not fixed?
Many errors look alike. If the steps above didn’t solve it, one of these is probably what you’re facing:
Similar errors
- AccessDenied AWS S3: AccessDenied (403) when calling GetObject / PutObject
- IAM AccessDeniedException AccessDeniedException: User: arn:aws:iam::... is not authorized to perform: service:Action on resource: ...
- ResourceInitializationError ECS: ResourceInitializationError: unable to pull secrets or registry auth
Most viewed in AWS
Other ways to find it
🧠 Still stuck? Analyze your error
Paste the full message, response headers or stack trace — we'll detect the platform and point to the most likely cause.
Was this page helpful?
Report a correction or suggest an improvement
Last updated 7 Oct 2026