S3 static website

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

1 resource · AWS::S3::Bucket
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 — S3 static website was run through the real engine when this page was built, and this is what it returned.

1 intent check failed· 4 informational
intent 1info 4
A public website with no access logs cannot be audited after an incident.INTENT
4 informational findingsbucket serves a, no server access, requests not forced
Bucket serves a website index documentINTENT
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 →

CDN origin reachable directlyAwsSolutions-S5

The CloudFront origin can be reached directly, so the CDN can be bypassed entirely — along with anything it was enforcing.

Full rule text

The S3 static website bucket either has an open world bucket policy or does not use a CloudFront Origin Access Identity (OAI) in the bucket policy for limited getObject and/or putObject permissions. An OAI allows you to provide access to content in your S3 static website bucket through CloudFront URLs without enabling public access through an open bucket policy, disabling S3 Block Public Access settings, and/or through object ACLs.

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