All checks
Medium S3 · account

ACLs should not be used to manage user access to S3 general purpose buckets

Checks that the S3 general purpose bucket has ACLs disabled, with Object Ownership set to Bucket owner enforced. An ACL grants access outside the bucket policy; with ACLs disabled the bucket owner owns every object and the policy alone decides who can reach the data.

service
S3
severity
Medium
scope
evaluated once per account

How to fix it

  • Can break clients: ACL grants stop applying and uploads setting any ACL but bucket-owner-full-control fail, so first move that access to the bucket policy (aclRequired in server access logs or CloudTrail finds it).

In the console

S3 → the bucket → Permissions

Access control list (ACL)
Private, reset first if it grants access outside the account; S3 refuses to disable ACLs until then
Object Ownership
ACLs disabled (recommended), which is Bucket owner enforced

With the AWS CLI

aws s3api put-bucket-ownership-controls --bucket <bucket-name> --ownership-controls 'Rules=[{ObjectOwnership=BucketOwnerEnforced}]'

With Terraform

resource "aws_s3_bucket_ownership_controls" "this" {
  bucket = var.bucket_name

  rule {
    object_ownership = "BucketOwnerEnforced"
  }
}

See which of your accounts this check is failing on.

Book a live scan