Event Information
- The DisableVpcClassicLink event in AWS for EC2 refers to the action of disabling ClassicLink for a specific Amazon EC2 instance within a Virtual Private Cloud (VPC).
- ClassicLink is a feature that allows EC2 instances in a VPC to communicate with instances in the EC2-Classic platform using private IP addresses. Disabling ClassicLink for an instance means that it will no longer be able to communicate with EC2-Classic instances.
- This event can be triggered manually by an administrator or through automation scripts to control the network connectivity options for EC2 instances within a VPC.
Examples
- Loss of connectivity: Disabling VPC ClassicLink for EC2 instances can result in loss of connectivity between the instances and ClassicLink-enabled resources in the ClassicLink-enabled VPC. This can impact the ability to access resources and services that rely on this connectivity.
- Limited network access: Disabling VPC ClassicLink can restrict network access for EC2 instances, as they will no longer be able to communicate with ClassicLink-enabled resources in the ClassicLink-enabled VPC. This can impact the functionality of applications or services that rely on this communication.
- Reduced security controls: Disabling VPC ClassicLink can lead to reduced security controls for EC2 instances, as they will no longer benefit from the security groups and network ACLs associated with the ClassicLink-enabled VPC. This can increase the risk of unauthorized access or compromise of the instances.
Remediation
Using Console
-
Example 1: Unauthorized Access to AWS EC2 Instance
- Step 1: Identify the unauthorized access event in the AWS CloudTrail logs or AWS Security Hub.
- Step 2: Determine the source IP address or user account associated with the unauthorized access.
- Step 3: Disable or remove the compromised user account or IAM role from the EC2 instance’s security group or IAM policies.
- Step 4: Change the SSH key pair associated with the EC2 instance to prevent further unauthorized access.
- Step 5: Enable AWS CloudTrail logging and configure alerts to be notified of any future unauthorized access attempts.
-
Example 2: High CPU Utilization on AWS EC2 Instance
- Step 1: Monitor the CPU utilization of the EC2 instance using Amazon CloudWatch metrics.
- Step 2: Identify the process or application causing the high CPU utilization.
- Step 3: Optimize the application or process to reduce CPU usage, such as optimizing code, improving database queries, or scaling horizontally.
- Step 4: Consider upgrading the EC2 instance type to a higher CPU capacity if the current instance is consistently under high CPU load.
- Step 5: Set up CloudWatch alarms to notify you when CPU utilization exceeds a certain threshold in the future.
-
Example 3: Unencrypted EBS Volume in AWS EC2 Instance
- Step 1: Identify the unencrypted EBS volume using AWS Config or AWS Security Hub.
- Step 2: Create a snapshot of the unencrypted EBS volume as a backup.
- Step 3: Copy the data from the unencrypted EBS volume to a new encrypted EBS volume.
- Step 4: Attach the new encrypted EBS volume to the EC2 instance.
- Step 5: Update any references or configurations that point to the old unencrypted EBS volume to use the new encrypted EBS volume.
Using CLI
-
Ensure that all EC2 instances are using the latest Amazon Machine Images (AMIs) by regularly checking for updates and patching any vulnerabilities. Use the following AWS CLI commands:
- To list all EC2 instances:
aws ec2 describe-instances
- To get the latest AMI ID for a specific instance type:
aws ec2 describe-images --owners amazon --filters "Name=name,Values=amzn2-ami-hvm-2.0.????????-x86_64-gp2" --query 'Images[*].[ImageId,CreationDate]' --output text | sort -k2 -r | head -n 1
- To update an instance with the latest AMI:
aws ec2 create-image --instance-id <instance-id> --name "My server" --description "An AMI for my server" --no-reboot
- To list all EC2 instances:
-
Implement security groups and network ACLs to restrict inbound and outbound traffic to only necessary ports and protocols. Use the following AWS CLI commands:
- To create a security group:
aws ec2 create-security-group --group-name MySecurityGroup --description "My security group"
- To add inbound rules to a security group:
aws ec2 authorize-security-group-ingress --group-id <security-group-id> --protocol tcp --port <port-number> --cidr <ip-range>
- To add outbound rules to a security group:
aws ec2 authorize-security-group-egress --group-id <security-group-id> --protocol tcp --port <port-number> --cidr <ip-range>
- To create a security group:
-
Enable AWS CloudTrail to monitor and log all API activity within your AWS account. Use the following AWS CLI commands:
- To create a new CloudTrail trail:
aws cloudtrail create-trail --name MyTrail --s3-bucket-name <bucket-name>
- To enable CloudTrail for all regions:
aws cloudtrail update-trail --name MyTrail --is-multi-region-trail
- To start logging API activity:
aws cloudtrail start-logging --name MyTrail
- To create a new CloudTrail trail:
Using Python
To remediate the issues mentioned in the previous response for AWS EC2 using Python, you can use the following approaches:-
Enforce encryption for EBS volumes:
- Use the AWS SDK for Python (Boto3) to identify unencrypted EBS volumes.
- Create a Python script that iterates through all EC2 instances and their attached volumes.
- For each unencrypted volume, use the
create_snapshot
method to create a snapshot of the volume. - Use the
copy_snapshot
method to copy the snapshot and enable encryption during the copy process. - Once the encrypted snapshot is created, use the
create_volume
method to create a new encrypted volume. - Finally, detach the unencrypted volume and attach the newly created encrypted volume to the instance.
-
Enable VPC flow logs:
- Use Boto3 to check if VPC flow logs are enabled for each VPC.
- Create a Python script that iterates through all VPCs and checks if flow logs are enabled.
- If flow logs are not enabled, use the
create_flow_logs
method to enable them. - Specify the desired configuration, such as the destination S3 bucket, IAM role, and log format.
-
Enable AWS Config:
- Use Boto3 to check if AWS Config is enabled for the AWS account.
- Create a Python script that checks the status of AWS Config.
- If AWS Config is not enabled, use the
put_configuration_recorder
andput_delivery_channel
methods to enable it. - Specify the desired configuration, such as the S3 bucket for storing configuration history and the IAM role for delivery channel.