This estate is a security nightmare: no WAF at the edge, every tier in a public subnet, each security group trusting the whole VPC, public SSH on the hosts, an unencrypted database, and no NAT for egress.
Build a zero-trust posture. You'll need to add the edge and egress components yourself, then: a WAF gating the ALB; web/app/data all private and each trusting only the tier in front of it; no open inbound SSH; the database encrypted at rest and in transit; and NAT providing private egress. Every control has to hold.