Use the Conformity Knowledge Base AI to help improve your Cloud Posture

S3 Bucket Public 'WRITE' ACL Access

Trend Micro Cloud One™ – Conformity is a continuous assurance tool that provides peace of mind for your cloud infrastructure, delivering over 750 automated best practice checks.

Risk Level: Very High (not tolerated)
Rule ID: S3-003

Ensure that your Amazon S3 buckets can't be accessed for WRITE actions by anonymous users in order to protect your S3 data against unauthorized access. An Amazon S3 bucket that grants public WRITE (UPLOAD/DELETE) access, can allow everyone on the Internet to add, delete, and replace objects within the S3 bucket without restrictions.

This rule can help you with the following compliance standards:

  • PCI
  • APRA
  • MAS
  • NIST4

For further details on compliance standards supported by Conformity, see here.

This rule can help you work with the AWS Well-Architected Framework.

This rule resolution is part of the Conformity Security & Compliance tool for AWS.

Security

Granting public WRITE access to your Amazon S3 buckets can allow anonymous users to perform unauthorized operations on your buckets. Using this overly permissive Access Control List (ACL) configuration can lead to S3 data loss or unexpected charges on your AWS cloud bill. To meet security and compliance requirements, avoid granting WRITE (UPLOAD/DELETE) permissions to the "Everyone (public access)" grantee in production.


Audit

To determine if your Amazon S3 buckets are configured to allow public WRITE access, perform the following actions:

Using AWS Console

01 Sign in to the AWS Management Console.

02 Navigate to Amazon S3 console at https://console.aws.amazon.com/s3/.

03 Click on the name (link) of the S3 bucket that you want to examine to access the bucket configuration settings.

04 Select the Permissions tab from the console menu to access the bucket permissions.

05 In the Access control list (ACL) section, check the Access Control List (ACL) configuration settings available for the grantee named Everyone (public access). A grantee can be an AWS account or an S3 predefined group. This grantee is a predefined group that allows anonymous users to access your Amazon S3 resources. If the Everyone (public access) grantee is set to Write in the Objects column, the selected Amazon S3 bucket is publicly accessible for unrestricted content updates (add, delete, and/or replace S3 objects), therefore the bucket ACL configuration is not secure.

06 Repeat steps no. 3 – 5 for each Amazon S3 bucket that you want to examine, available in your AWS cloud account.

Using AWS CLI

01 Run list-buckets command (OSX/Linux/UNIX) using custom query filters to list the names of all Amazon S3 buckets available within your AWS cloud account:

aws s3api list-buckets
  --query 'Buckets[*].Name'

02 The command output should return an array with the requested bucket names:

[
  "cc-production-access-logs",
  "cc-internal-audit-reports"
]

03 Run get-bucket-acl command (OSX/Linux/UNIX) using the name of the Amazon S3 bucket that you want to examine as the identifier parameter to describe the Access Control List (ACL) configuration set for the Everyone (public access) grantee, available for the selected S3 bucket:

aws s3api get-bucket-acl
  --bucket cc-production-access-logs
  --query 'Grants[?(Grantee.URI==`http://acs.amazonaws.com/groups/global/AllUsers`)]'

04 The command output should return the ACL configuration available for the Everyone (public access) grantee:

[
  {
    "Grantee": {
      "Type": "Group",
      "URI": "http://acs.amazonaws.com/groups/global/AllUsers"
    },
    "Permission": "WRITE"
  }
]

If the get-bucket-acl command output returns "WRITE" for the "Permission" attribute value, as shown in the example above, the selected Amazon S3 bucket is publicly accessible for unrestricted content updates (add, delete, and/or replace S3 objects), therefore the bucket ACL configuration is not secure.

05 Repeat steps no. 3 and 4 for each Amazon S3 bucket that you want to examine, available within your AWS cloud account.

Remediation / Resolution

To deny public WRITE access to your Amazon S3 buckets using Access Control Lists (ACLs), perform the following actions:

Note: An S3 bucket can be deemed compliant if implements either "AccessControl": "Private" or sets the "PublicAccessBlockConfiguration" feature options to true. The following CloudFormation template uses both for added security.

Using AWS CloudFormation

01 CloudFormation template (JSON):

{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Description": "S3 Bucket Public 'WRITE' Access",
  "Resources": {
    "SecureS3Bucket": {
      "Properties": {
        "AccessControl": "Private",
        "BucketName": "cc-production-access-logs",
        "PublicAccessBlockConfiguration": {
          "BlockPublicAcls": true,
          "IgnorePublicAcls": true,
          "BlockPublicPolicy": true,
          "RestrictPublicBuckets": true
        }
      },
      "Type": "AWS::S3::Bucket"
    }
  }
}

02 CloudFormation template (YAML):

AWSTemplateFormatVersion: '2010-09-09'
Description: S3 Bucket Public 'WRITE' Access
Resources:
  SecureS3Bucket:
    Properties:
      AccessControl: Private
      BucketName: cc-production-access-logs
      PublicAccessBlockConfiguration:
        BlockPublicAcls: true
        IgnorePublicAcls: true
        BlockPublicPolicy: true
        RestrictPublicBuckets: true
    Type: 'AWS::S3::Bucket'

Using Terraform (AWS Provider)

Note: An S3 bucket can be deemed compliant if implements either acl = "private" or sets the "aws_s3_bucket_public_access_block" feature options to true. The following Terraform configuration file uses both for added security.

01 Terraform configuration file (.tf):

terraform {
  required_providers {
    aws = {
      source = "hashicorp/aws"
      version = "~> 3.27"
    }
  }

  required_version = ">= 0.14.9"
}

provider "aws" {
  profile = "default"
  region = "us-east-1"
}

resource "aws_s3_bucket" "securebucket" {
  bucket = "cc-production-access-logs"
  acl = "private"
}

resource "aws_s3_bucket_public_access_block" "securebucket" {
  bucket = "cc-production-access-logs"
  block_public_acls = true
  ignore_public_acls = true
  block_public_policy = true
  restrict_public_buckets = true
}

Using AWS Console

01 Sign in to the AWS Management Console.

02 Navigate to Amazon S3 console at https://console.aws.amazon.com/s3/.

03 Click on the name of the S3 bucket that you want to reconfigure.

04 Select the Permissions tab from the console menu to access the bucket permissions.

05 In the Access control list (ACL) section, choose Edit to modify the Access Control List (ACL) configuration available for the selected S3 bucket.

06 Under Access control list (ACL), deselect the Write permission checkbox available next to the Everyone (public access) grantee in the Objects column, to remove the WRITE (UPLOAD/DELETE) permissions for anonymous users, from the selected Amazon S3 bucket. Select I understand the effects of these changes on my objects and buckets checkbox for confirmation, then choose Save changes to apply the configuration changes.

07 Repeat steps no. 3 – 6 for each Amazon S3 bucket that allows public WRITE access, available in your AWS cloud account.

Using AWS CLI

01 Run get-bucket-acl command (OSX/Linux/UNIX) using the name of the Amazon S3 bucket that you want to reconfigure as the identifier parameter (see Audit section part II to identify the right S3 resource) to deny public WRITE access to the selected S3 bucket by removing the WRITE (UPLOAD/DELETE) permissions set for the Everyone (public access) grantee. The following command request uses the PRIVATE canned ACL to remove the WRITE (UPLOAD/DELETE) permissions for the specified S3 bucket (if successful, the command does not produce an output):

aws s3api put-bucket-acl
  --bucket cc-production-access-logs
  --acl private

02 Repeat step no. 1 for each Amazon S3 bucket that allows public WRITE access, available within your AWS cloud account.

References

Unlock the Remediation Steps


Free 30-day Trial

Automatically audit your configurations with Conformity
and gain access to our cloud security platform.

Confirmity Cloud Platform

No thanks, back to article

You are auditing:

S3 Bucket Public 'WRITE' ACL Access

Risk Level: Very High