Public S3 bucket

The single most common AI-generated CDK mistake: a bucket left open to the world.

2 resources · AWS::S3::Bucket · AWS::S3::BucketPolicy
Concepts · S3Granting public read access
This preset is that lesson’s failure mode →
Your stack
Ready when you are

Press Run. The stack loaded here fails in a way worth seeing.

What the engine finds5 findings

Not examples — Public S3 bucket was run through the real engine when this page was built, and this is what it returned.

2 intent checks failed· 3 informational
intent 2info 3
Still public. Set `blockPublicAccess: BlockPublicAccess.BLOCK_ALL` and remove `publicReadAccess: true`.INTENT
No encryption at rest. Set `encryption: BucketEncryption.S3_MANAGED` (SSE-S3, no key to manage).INTENT
3 informational findingsno server access, requests not forced, bucket allows public
No server access logsAwsSolutions-S1

Without server access logs there is no record of who read what. After an incident that is the difference between knowing what leaked and guessing.

serverAccessLogsBucket: logsBucket
New to Amazon S3? Start the S3 concept
Full rule text

The S3 Bucket has server access logs disabled. The bucket should have server access logging enabled to provide detailed records for the requests that are made to the bucket. AwsSolutions-S1 guide →

Requests not forced onto HTTPSAwsSolutions-S10

Requests can arrive over plain HTTP, so object contents and any credentials in the request travel unencrypted across the network.

enforceSSL: true
New to Amazon S3? Start the S3 concept
Full rule text

The S3 Bucket or bucket policy does not require requests to use SSL. You can use HTTPS (TLS) to help prevent potential attackers from eavesdropping on or manipulating network traffic using person-in-the-middle or similar attacks. You should allow only encrypted connections over HTTPS (TLS) using the aws:SecureTransport condition on Amazon S3 bucket policies. AwsSolutions-S10 guide →

Bucket allows public readsAwsSolutions-S2

Anyone on the internet can read every object in this bucket. If it holds user uploads, backups, or anything that was ever meant to be private, it is already public.

blockPublicAccess: BlockPublicAccess.BLOCK_ALL
Learn when public read access is right, and when it leaks12 min
Full rule text

The S3 Bucket does not have public access restricted and blocked. The bucket should have public access restricted and blocked to prevent unauthorized access. AwsSolutions-S2 guide →

Go deeper

Everything this preset trips, mapped to where it’s actually taught.

This is one failure mode. The course teaches the pattern.

The S3 track walks it checkpoint by checkpoint, graded by the same engine that just ran your code.

Start the S3 track — first checkpoint free
Presets

Or start from a stack that fails interestingly

Public S3 bucket

The single most common AI-generated CDK mistake: a bucket left open to the world.

3 rules · 2 intent checks
From Concepts · S3 · Granting public read access
Security group open to 0.0.0.0/0

SSH open to the entire internet — the classic copy-paste ingress rule.

2 rules · 1 intent check
From Concepts · EC2 · Opening the security group for HTTP
S3 static website

Website hosting straight off a bucket — no CDN, no TLS, no access logging.

3 rules · 2 intent checks
Unencrypted RDS instance

A database with storage encryption off and backups barely configured.

6 rules · 2 intent checks
Wildcard IAM policy

Action "*" on Resource "*" — the permission grant that ends incident reviews.

1 rule · 2 intent checks
Public API Gateway with no authorizer

A REST API wired to Lambda, wide open, with no access logging.

7 rules · 1 intent check
DynamoDB table without point-in-time recovery

Fast to write, impossible to restore — no PITR, no encryption choice.

1 rule · 1 intent check
CloudFront distribution allowing HTTP

A CDN that will happily serve your site unencrypted, with no logging.

6 rules · 1 intent check
Unencrypted SQS queue

A queue with no server-side encryption and no dead-letter queue.

2 rules · 2 intent checks
VPC without flow logs

Network traffic no one can reconstruct after the fact.

1 rule · 1 intent check
Cognito pool with a weak password policy

Six characters, no symbols, no MFA — defaults nobody revisited.

3 rules · 2 intent checks
Clean serverless data layerPasses

The one that passes. Encrypted, recoverable, with a dead-letter queue — what good looks like.

no findings — this is what passing looks like