Need help?

Our experts have had an average response time of 12.49 minutes in November 2021 to fix urgent issues.

We will keep your servers stable, secure, and fast at all times for one fixed price.

AWS S3 403 Forbidden Error – How to troubleshoot

by | Jun 3, 2021

Stuck with AWS S3 403 Forbidden Error? We can help you.

Recently, one of our customers was trying to upload files to Amazon Simple Storage Service (Amazon S3) bucket using the Amazon S3 console.

However, he came across an HTTP 403 Forbidden error instead.

Here, at Bobcares, we assist our customers with several AWS queries as part of our AWS Support Services.

Today, let us see how to troubleshoot this?


AWS S3 403 Forbidden error

AWS S3 403 Forbidden

To troubleshoot the HTTP 403 Forbidden error from the Amazon S3 console, we need to check:


Missing permissions to s3:PutObject or s3:PutObjectAcl

We ensure that the AWS Identity and Access Management (IAM) user or role has permissions for the s3:PutObject action on the bucket.

On the other hand, not having this permission can result in HTTP 403 Forbidden error.

In addition, during the upload, if we try to modify the object’s ACL, the IAM user or role must have permissions for the s3:PutObjectAcl action.


Missing permissions to use an AWS KMS key

We need permission to access an S3 bucket that uses default encryption with a custom AWS KMS key.

To get the permission, a key administrator must grant it on the key policy.

The IAM user or role must have permissions for kms:Encrypt and kms:GenerateDataKey to upload an object to an encrypted bucket.


Explicit deny statement in the bucket policy

We need to check the bucket policy for any statements that explicitly deny permission for s3:PutObject unless it meets certain conditions.

The upload should meet the bucket policy requirements for access to the s3:PutObject action.

For example, suppose the bucket policy explicitly denies s3:PutObject. Unless the request includes server-side encryption using AWS KMS or Amazon S3 encryption keys, we need to verify we use the correct encryption header to upload objects.

Here a bucket policy explicitly denies any access to s3:PutObject on the bucket awsdoc-example-bucket unless the upload request includes encryption with the AWS KMS key arn:aws:kms:us-east-1:111122223333:key:

  "Version": "2012-10-17",
  "Statement": [
      "Sid": "ExampleStmt",
      "Action": [
      "Effect": "Deny",
      "Resource": "arn:aws:s3:::awsdoc-example-bucket/*",
      "Condition": {
        "StringNotLikeIfExists": {
          "s3:x-amz-server-side-encryption-aws-kms-key-id": "arn:aws:kms:us-east-1:111122223333:key/*"
      "Principal": "*"


Bucket ACL doesn’t allow the root user to write objects

Suppose we use the root user account to upload objects to the S3 bucket. Then we need to verify that the bucket’s ACL grants the root user access to Write objects.


AWS Organizations service control policy doesn’t allow access to Amazon S3

If we use AWS Organizations, we check the service control policies to ensure access to Amazon S3.

For example, the following policy can result in errors if we try to access Amazon S3. Because it explicitly denies access:

"Version": "2012-10-17",
"Statement": [{
"Effect": "Deny",
"Action": "S3:*",
"Resource": "*"

[Stuck with the process? We are here for you]



In short, we saw how our Support Techs fix the AWS error for our customers.


Never again lose customers to poor server speed! Let us help you.

Our server experts will monitor & maintain your server 24/7 so that it remains lightning fast and secure.


var google_conversion_label = "owonCMyG5nEQ0aD71QM";


Submit a Comment

Your email address will not be published. Required fields are marked *


Privacy Preference Center


Necessary cookies help make a website usable by enabling basic functions like page navigation and access to secure areas of the website. The website cannot function properly without these cookies.

PHPSESSID - Preserves user session state across page requests.

gdpr[consent_types] - Used to store user consents.

gdpr[allowed_cookies] - Used to store user allowed cookies.

PHPSESSID, gdpr[consent_types], gdpr[allowed_cookies]


Statistic cookies help website owners to understand how visitors interact with websites by collecting and reporting information anonymously.

_ga - Preserves user session state across page requests.

_gat - Used by Google Analytics to throttle request rate

_gid - Registers a unique ID that is used to generate statistical data on how you use the website.

smartlookCookie - Used to collect user device and location information of the site visitors to improve the websites User Experience.

_ga, _gat, _gid
_ga, _gat, _gid


Marketing cookies are used to track visitors across websites. The intention is to display ads that are relevant and engaging for the individual user and thereby more valuable for publishers and third party advertisers.

IDE - Used by Google DoubleClick to register and report the website user's actions after viewing or clicking one of the advertiser's ads with the purpose of measuring the efficacy of an ad and to present targeted ads to the user.

test_cookie - Used to check if the user's browser supports cookies.

1P_JAR - Google cookie. These cookies are used to collect website statistics and track conversion rates.

NID - Registers a unique ID that identifies a returning user's device. The ID is used for serving ads that are most relevant to the user.

DV - Google ad personalisation

IDE, test_cookie, 1P_JAR, NID, DV, NID
IDE, test_cookie


These are essential site cookies, used by the google reCAPTCHA. These cookies use an unique identifier to verify if a visitor is human or a bot.