Skip to main content

Controls Reference

Stave ships with 43 S3 controls organized by category. Each control defines a safety property that your infrastructure must satisfy.

Public Access (15 controls)

IDNameSeverityDescription
CTL.S3.PUBLIC.001No Public S3 Bucket ReadHighS3 buckets must not allow public read access
CTL.S3.PUBLIC.002No Public S3 Buckets With Sensitive DataCriticalPublic access on PHI/PII/confidential buckets
CTL.S3.PUBLIC.003No Public Write AccessCriticalS3 buckets must not allow public write or delete access
CTL.S3.PUBLIC.004No Public Read via ACLHighS3 bucket ACLs must not grant read access to AllUsers
CTL.S3.PUBLIC.005No Latent Public Read ExposureHighPublic read masked only by PAB is still a risk
CTL.S3.PUBLIC.006No Latent Public Bucket ListingHighPublic listing masked only by PAB is still a risk
CTL.S3.PUBLIC.007No Public Read via PolicyHighBucket policies must not grant public read to Principal *
CTL.S3.PUBLIC.008No Public List via PolicyHighBucket policies must not grant anonymous listing to Principal *
CTL.S3.PUBLIC.LIST.001No Public S3 Bucket ListingHighS3 buckets must not allow anonymous listing
CTL.S3.PUBLIC.LIST.002Anonymous S3 Listing Must Be Explicitly IntendedMediumPublic listing requires explicit public_list_intended tag
CTL.S3.PUBLIC.PREFIX.001Protected Prefixes Must Not Be Publicly ReadableHighProtected prefixes must not be publicly readable
CTL.S3.ACL.WRITE.001No Public Write via ACLCriticalS3 bucket ACLs must not grant write to AllUsers
CTL.S3.WEBSITE.PUBLIC.001No Public Website Hosting with Public ReadHighStatic website hosting must not combine with public read
CTL.S3.CONTROLS.001Public Access Block Must Be EnabledHighS3 buckets must have PAB fully enabled
CTL.S3.INCOMPLETE.001Complete Data Required for Safety AssessmentHighMissing policy/ACL data prevents safety proof

Access Control (9 controls)

IDNameSeverityDescription
CTL.S3.ACCESS.001No Unauthorized Cross-Account AccessHighBucket policies must not grant access to external accounts
CTL.S3.ACCESS.002No Wildcard Action PoliciesHighBucket policies must not use wildcard actions (s3:*)
CTL.S3.ACCESS.003No External Write AccessCriticalNo write/delete permissions to external accounts
CTL.S3.AUTH.READ.001No Authenticated-Users Read AccessCriticalNo read access to all authenticated AWS users
CTL.S3.AUTH.WRITE.001No Authenticated-Users Write AccessCriticalNo write/delete access to all authenticated AWS users
CTL.S3.NETWORK.001Public-Principal Policies Must Have Network ConditionsHighPrincipal=* policies must have IP/VPC conditions
CTL.S3.TENANT.ISOLATION.001Shared-Bucket Tenant Isolation Must Enforce PrefixCriticalPresigned URL signers must enforce tenant prefixes
CTL.S3.WRITE.SCOPE.001S3 Signed Upload Must Bind To Exact Object KeyHighUpload policies must restrict to exact key, not prefix
CTL.S3.WRITE.CONTENT.001S3 Signed Upload Must Restrict Content TypesHighUpload policies must restrict allowed content types

Encryption (4 controls)

IDNameSeverityDescription
CTL.S3.ENCRYPT.001Encryption at Rest RequiredHighAll buckets must have server-side encryption
CTL.S3.ENCRYPT.002Transport Encryption RequiredHighHTTPS must be enforced via bucket policy
CTL.S3.ENCRYPT.003PHI Buckets Must Use SSE-KMS with CMKCriticalPHI buckets must use customer-managed KMS keys
CTL.S3.ENCRYPT.004Sensitive Data Requires KMS EncryptionCriticalNon-public classified data must use SSE-KMS

Logging (1 control)

IDNameSeverityDescription
CTL.S3.LOG.001Access Logging RequiredMediumS3 server access logging must be enabled

Lifecycle and Governance (8 controls)

IDNameSeverityDescription
CTL.S3.GOVERNANCE.001Data Classification Tag RequiredHighAll buckets must have a data-classification tag
CTL.S3.LIFECYCLE.001Retention-Tagged Buckets Must Have Lifecycle RulesMediumRetention-tagged buckets need lifecycle configuration
CTL.S3.LIFECYCLE.002PHI Buckets Must Not Expire Data Before Minimum RetentionCriticalPHI data must not expire before 2190 days (6 years)
CTL.S3.VERSION.001Versioning RequiredMediumVersioning must be enabled on all buckets
CTL.S3.VERSION.002Backup Buckets Must Have MFA DeleteCriticalBackup-tagged buckets must have MFA delete enabled
CTL.S3.LOCK.001Compliance-Tagged Buckets Must Have Object LockCriticalCompliance-tagged buckets must have WORM protection
CTL.S3.LOCK.002PHI Buckets Must Use COMPLIANCE Mode Object LockCriticalPHI buckets must use COMPLIANCE mode (not GOVERNANCE)
CTL.S3.LOCK.003PHI Object Lock Retention Must Meet Minimum PeriodCriticalPHI WORM retention must be at least 2190 days

ACL Privilege Escalation (3 controls)

IDNameSeverityDescription
CTL.S3.ACL.ESCALATION.001No Public ACL ModificationCriticalACL must not be writable by AllUsers or AuthenticatedUsers
CTL.S3.ACL.RECON.001No Public ACL ReadabilityMediumACL should not be readable by unauthenticated users
CTL.S3.ACL.FULLCONTROL.001No FULL_CONTROL ACL Grants to PublicCriticalACL must not grant FULL_CONTROL to AllUsers or AuthenticatedUsers

Supply Chain and Compliance (3 controls)

IDNameSeverityDescription
CTL.S3.BUCKET.TAKEOVER.001Referenced S3 Buckets Must Exist And Be OwnedCriticalReferenced S3 buckets must exist and be owned
CTL.S3.DANGLING.ORIGIN.001CDN S3 Origins Must Not Be DanglingCriticalCloudFront must not reference non-existent S3 origins
CTL.S3.REPO.ARTIFACT.001Public Buckets Must Not Expose VCS ArtifactsHighNo .git/ or .svn/ in publicly accessible buckets

Severity Distribution

SeverityCount
Critical18
High20
Medium5