SECURITY WARNING: Never run commands you don't understand. Always review code before execution. Use at your own risk.
Storage New Added 8 September 2026

AWS S3: Access Denied on an object encrypted with KMS

The bucket policy allows the read but the caller has no permission on the KMS key, so S3 cannot decrypt the object for them. Two policies must agree: the IAM or bucket policy for s3:GetObject, and the key policy for kms:Decrypt.

Quick fix

Read the commands before running them. Anything that restarts a service, deletes data or changes permissions should be tried on a non-production system first.

Quick fix
# Which key is on the object?
aws s3api head-object --bucket data --key file.parquet \
  --query 'SSEKMSKeyId'

# Simulate the call to see which permission is missing
aws iam simulate-principal-policy \
  --policy-source-arn arn:aws:iam::123456789012:role/reader \
  --action-names s3:GetObject kms:Decrypt \
  --resource-arns arn:aws:s3:::data/file.parquet

# Grant on the key as well as the bucket
{ "Effect": "Allow",
  "Action": ["kms:Decrypt", "kms:DescribeKey"],
  "Resource": "arn:aws:kms:eu-west-1:123456789012:key/KEY-ID" }

# Cross account access needs the key policy to allow the other account too

How to diagnose Storage errors

Storage errors are dominated by permissions and locality. S3 access denials can come from an IAM policy, a bucket policy, a Block Public Access setting, an ACL or a KMS key policy: five independent layers, all of which must allow the call. Block storage errors are usually about availability zones: a volume can only attach to an instance in the same AZ.

If the quick fix above does not resolve it, work through these steps. They apply to this whole class of error, not just to this one message, which is usually what saves the time.

  1. For S3 denials, check all five layers: IAM policy, bucket policy, Block Public Access, object ACL and the KMS key policy if the object is encrypted with a customer-managed key.
  2. Confirm the region and the exact bucket name. A bucket in another region returns a redirect or a permanent error that reads like a permission problem.
  3. For signed URLs, check the expiry and that the clock on the signing machine is correct. A skewed clock produces URLs that are already expired.
  4. For NFS stale file handles, remount rather than retrying; the file the handle referred to no longer exists on the server.
  5. For volume attachment failures, verify the availability zone matches and that the volume is in the available state, not still attached elsewhere.

Tools worth reaching for

  • aws s3api get-bucket-policy
  • IAM Policy Simulator
  • mount -v / showmount -e
  • df -h / du -sh
  • aws ec2 describe-volumes

Authoritative references

Primary documentation for this error, worth reading before applying any fix in production.

docs.aws.amazon.com

Related Storage errors

See all 13 Storage errors →

Browse other categories

Something missing or wrong?

This entry is maintained by hand. If the fix is out of date, incomplete, or you have a better one, email a correction and it will be reviewed.