This guide consolidates AWS official best practices, CIS Benchmarks, and real-world experience to help you secure Amazon EC2 instances.
1. System Updates & Patch Management
Enable automatic patching with AWS Systems Manager (SSM):
sudo yum update -y # Amazon Linux sudo apt-get update && sudo apt-get upgrade -y # Ubuntu/DebianUse SSM Patch Manager to automate OS/security updates across fleets:
- Create a Patch Baseline.
- Attach to EC2 via IAM Role with SSM managed policy.
- Schedule via Maintenance Windows.
2. Least Privilege IAM Roles
Never hardcode credentials inside EC2.
Attach an Instance Role with only the permissions needed:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": ["arn:aws:s3:::mybucket/*"] } ] }Enable IAM Access Analyzer to detect overly broad permissions.
3. Network Security
Restrict inbound traffic with Security Groups:
- Deny
0.0.0.0/0on SSH/RDP; instead allow only trusted IP ranges. - Example rule:
22/tcp → 203.0.113.0/24.
- Deny
Add Network ACLs for an extra layer of defense.
Require VPN/Bastion host for administrative access.
4. OS Hardening
Disable root login over SSH:
sudo nano /etc/ssh/sshd_config PermitRootLogin no PasswordAuthentication noEnforce key-based authentication (it is preferable to only allow SSM auth)
Configure firewalld/ufw inside the OS for host-based filtering.
Remove unused software packages.
5. Disk & Data Protection
- Encrypt EBS volumes with AWS KMS CMK.
- Use automatic snapshot encryption for backups.
- Enable EBS fast snapshot restore only in secure regions.
- If handling sensitive data → enforce KMS key rotation (every 365 days).
6. Monitoring & Logging
Enable CloudTrail for all regions → send logs to S3 + CloudWatch Logs.
Use GuardDuty for continuous threat detection.
Enable VPC Flow Logs for visibility into network traffic.
Install CloudWatch Agent on EC2:
sudo yum install amazon-cloudwatch-agent -y /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
7. Backup & Recovery
- Use AWS Backup with lifecycle rules for snapshots.
- Store snapshots in separate accounts (backup vaults).
- Regularly test recovery from snapshots/AMI.
8. Compliance & Benchmarking
Use AWS Security Hub with CIS EC2 controls enabled.
Run AWS Config with rules like:
restricted-sshec2-instance-managed-by-ssmec2-ebs-encryption-by-default
Related guides:
- Meeting CIS Benchmarks for EC2: A Practical Guide
- Hardened Amazon Linux 2 AMI with EC2 Image Builder
- AWS Session Manager Setup: Secure EC2 Access Without SSH
- How to Detect AWS Root Account Usage
- AWS Security Monitoring Without the Enterprise Price Tag
With these steps, your EC2 instances are aligned with AWS and CIS best practices, reducing attack surface while staying auditable for compliance.