Good for Security (Zero Trust) and saves traffic cost
Do not use the root user for the common case.
Use individual IAM users.
Use MFA for Every IAM user including root account.
Use Role not Accesskey.
Separate VPC for ENV such as dev, staging, and production.
Separate private and public subnets on VPC.
Use individual routing tables for private and public subnets on VPC. (NAT Gateway, Internet Gateway)
Internet traffic from AWS private subnet : EC2(Private Subnet) -> NAT Gateway (Public Subnet)
Internet traffic from AWS public subnet : Internet Gateway -> ELB(Public Subnet) -> EC2(Private Subnet)
Using AWS internal traffic routings such as s3-endpoint, internal-alb and internal DNS.
Locate the EC2, RDS, and Cache on the private subnet and Internet-facing ELB and the bastion host only on the Public Subnet.
Open the SG rule only from SG on AWS internal traffic if you can. (ex. ELB SG -> EC2 SG)
Use a non-default port for the application.
Use ELB by rule set-based routing.
Use Savings Plans and Rightsizing recommendations.
Use EBS GP3 volumes, not GP2.
Good for High Availability
Using rds writer, reader endpoint not instance endpoint.
Using Multi-AZ for every AWS resource such as Subnet, Nat GW, RDS, EC2, ECS and so on.