Profile Applicability:
- Level 1
Description:
Security groups in AWS act as virtual firewalls that control inbound and outbound traffic to resources such as database instances. Proper configuration ensures controlled access and protects against unauthorized communication.
Rationale:
Only explicitly allowed network traffic should be permitted to access databases. Security groups provide fine-grained access control, helping enforce least privilege and reduce the attack surface.
Impact:
Pros:
Limits access to known IPs or services
Enforces network segmentation
Helps meet compliance requirements
Cons:
Misconfiguration may result in blocked access or exposure
Requires ongoing rule review and management
Default Value:
New security groups allow all outbound traffic but no inbound traffic by default.
Pre-requisites:
Existing VPC
IAM permissions to create and modify security groups
Identified source IPs or security group IDs for permitted access
Remediation:
Test Plan
Using AWS Console:
Sign in to the AWS Console
Navigate to RDS > Databases
Select the target database instance
Open the Connectivity & security tab
Review the associated security groups
Confirm that inbound rules allow access only from trusted sources
Confirm that outbound rules are appropriate for expected traffic
Using AWS CLI:
List associated security groups for the DB instance:
aws rds describe-db-instances --db-instance-identifier <your-db-instance-identifier> --query "DBInstances[*].VpcSecurityGroups[*].VpcSecurityGroupId"
Describe the security group to inspect its rules:
aws ec2 describe-security-groups --group-ids <sg-id>
Implementation Plan
Using AWS Console:
Sign in to the AWS Console
Navigate to VPC > Security Groups
Click Create security group
Provide a name, description, and select the correct VPC
Add inbound rules (e.g., TCP port 3306 from known IPs or security groups)
Add outbound rules as needed
Click Create security group
Go to RDS > Databases, select the target DB instance
Click Modify
Under Connectivity, choose the new security group
Select Apply immediately and click Modify DB Instance
Using AWS CLI:
Create a security group:
aws ec2 create-security-group --group-name db-sg --description "DB access" --vpc-id <vpc-id>
Add inbound rule to allow database traffic (e.g., MySQL):
aws ec2 authorize-security-group-ingress --group-id <sg-id> --protocol tcp --port 3306 --cidr <trusted-ip>/32
(Optional) Add outbound rule to allow all traffic:
aws ec2 authorize-security-group-egress --group-id <sg-id> --protocol -1 --port all --cidr 0.0.0.0/0
Modify RDS instance to use the new security group:
aws rds modify-db-instance --db-instance-identifier <your-db-instance-identifier> --vpc-security-group-ids <sg-id> --apply-immediately
Backout Plan
Using AWS Console:
Navigate to RDS > Databases, select the instance
Click Modify
Under VPC security groups, select the previously used security group
Click Apply immediately and confirm modification
Using AWS CLI:
Revert to old security group:
aws rds modify-db-instance --db-instance-identifier <your-db-instance-identifier> --vpc-security-group-ids <previous-sg-id> --apply-immediately
References:
CIS AWS Database Services Benchmark v1.0.0, Section 3.4