This project will use AWS Config to run organization defined custom rules to check for resource to be in compliance via Lambda functions.
Steps:
- Create Two EC2 instances.
- Create Lambda function
- Create Config Rule
- Monitor for non-compliant resources
1. Create 2 EC2 resources.
-- create an instance with Monitoring Enabled. -- create an instance with Monitoring Disabled.
2. Create Lambda function.
Note: Configure lambda to trigger timeout for 10 secs (Lambda, Config tab, timeout)
import boto3 import json def lambda_handler(event, context): # Get the specific EC2 instance. ec2_client = boto3.client('ec2') # Assume compliant by default compliance_status = "COMPLIANT" # Extract the configuration item from the invokingEvent config = json.loads(event['invokingEvent']) configuration_item = config["configurationItem"] # Extract the instanceId instance_id = configuration_item['configuration']['instanceId'] # Get complete Instance details instance = ec2_client.describe_instances(InstanceIds=[instance_id])['Reservations'][0]['Instances'][0] # Check if the specific EC2 instance has Cloud Trail logging enabled. if not instance['Monitoring']['State'] == "enabled": compliance_status = "NON_COMPLIANT" evaluation = { 'ComplianceResourceType': 'AWS::EC2::Instance', 'ComplianceResourceId': instance_id, 'ComplianceType': compliance_status, 'Annotation': 'Detailed monitoring is not enabled.', 'OrderingTimestamp': config['notificationCreationTime'] } config_client = boto3.client('config') response = config_client.put_evaluations( Evaluations=[evaluation], ResultToken=event['resultToken'] ) return response
3. Create Config Rule
- AWS Config --> Rule --> Add rule --> Custom Lambda Rule
- Give the Following details
- Name : rule-ec2-compliance
A unique name for the rule.
- Description - optional
Describe what the rule evaluates and how to fix resources that don't comply.
- AWS Lambda function ARN:
arn:aws:lambda:us-east-1:9879879878665:function:rule-ec2-compliance
- Evaluation mode :
When configuration changes
- Click Next and Save Rule.
4. Monitor resources based on rules.
Credits:
Thanks to Abhishek Veeramalla
Top comments (0)