Ensure no security groups allow ingress from 0.0.0.0/0 to MySQL port 3306

Description:

Security groups act as virtual firewalls for Amazon EC2 instances and other AWS resources. Allowing unrestricted MySQL access (port 3306) from the entire internet (0.0.0.0/0) poses a significant security risk, making resources susceptible to brute-force attacks and unauthorized access. It's critical to restrict MySQL access to known and trusted IP addresses or CIDR blocks.


Remediation:

AWS Management Console:
  1. Click on the specific security group's ID link.
    Navigate to the Inbound Rules tab.
    Select the rule that allows traffic from 0.0.0.0/0 to port 3306 and click Edit inbound rules.
    Modify the rule to restrict access to trusted IP addresses or CIDR blocks, or remove the rule entirely if it's not needed.
    Click Save rules.
AWS CLI:

To list security groups that have an open MySQL rule:

aws ec2 describe-security-groups --query "SecurityGroups[?IpPermissions[?ToPort==`3306` && IpRanges[?CidrIp=='0.0.0.0/0']]]" --output table

2. Modify Inbound Rules:

AWS Management Console:

Follow the steps provided in the previous section.

AWS CLI:

To revoke an open MySQL rule for a particular security group:

aws ec2 revoke-security-group-ingress --group-id [SECURITY_GROUP_ID] --protocol tcp --port 3306 --cidr 0.0.0.0/0

Replace [SECURITY_GROUP_ID] with the appropriate security group ID.

Terraform:

To ensure your security group does not have an open MySQL rule in Terraform:

resource "aws_security_group" "example" {
  # ... other configurations ...

  ingress {
    from_port   = 20
    to_port     = 21
    protocol    = "tcp"
    cidr_blocks = ["trusted_ip/32"]  # Replace 'trusted_ip/32' with your trusted CIDR block
  }

  # ... other configurations ...
}

In the code above, replace the placeholder trusted_ip/32 with your trusted IP or CIDR block. This ensures only the specified IPs can access the resource over MySQL.

3. Regularly Monitor and Audit:

Follow the monitoring and auditing steps provided in the previous section.


Recommendation:

It's a best practice to restrict MySQL access to specific IP addresses or CIDR blocks that require it. Implementing solutions like AWS Systems Manager Session Manager for secure access without opening MySQL ports to the public can enhance security. Ensure regular monitoring and auditing of security group configurations to adhere to security best practices.