A quick audit found three of the most common cloud exposures at once: a publicly reachable database, an S3 bucket open to the internet, and SSH open to 0.0.0.0/0 on the app servers.
Close all three while keeping the load balancer public so the site stays up:
- the database must be in a private subnet and not internet-reachable,
- the S3 bucket must not be public, and
- app-server admin access must not use public SSH — use SSM Session Manager or a bastion instead.