Fix AWS S3 403 Access Denied
A checklist for S3 403 errors — bucket policy, IAM, KMS, Object Ownership and Block Public Access.
Problem
An error occurred (AccessDenied) when calling the GetObject operation: Access DeniedRoot cause
S3 evaluates several policy layers. A deny in any one of them blocks the request:
- IAM identity policy on the caller.
- Bucket policy.
- Object ACL and Object Ownership setting.
- Block Public Access at the account or bucket level.
- KMS key policy when the object is SSE-KMS encrypted.
- VPC endpoint policy if accessed via a Gateway endpoint.
Solution
Simulate the call
aws iam simulate-principal-policy \
--policy-source-arn arn:aws:iam::123:user/me \
--action-names s3:GetObject \
--resource-arns arn:aws:s3:::my-bucket/keyGrant minimum IAM permission
{
"Effect": "Allow",
"Action": ["s3:GetObject"],
"Resource": "arn:aws:s3:::my-bucket/*"
}Don't forget KMS
If the object is encrypted with a customer KMS key, the caller also needs `kms:Decrypt` on the key.
Frequently asked questions
Related fixes
AWS
6 minFix EKS Worker Nodes Not Joining the Cluster
Nodes stay missing from `kubectl get nodes`. Walk through aws-auth, IAM, security groups and user-data.
#eks#iam#vpc
AWS
4 minFix AWS "is not authorized to perform: sts:AssumeRole"
Both sides of an AssumeRole call need to agree — fix the trust policy and the calling principal.
#iam#sts
Weekly digest
One DevOps fix in your inbox each week
Short, practical, no fluff. Real errors, real fixes — straight from production postmortems.