Automated Configuration Drift Detection and Remediation

Objective

The goal of this task is to detect and correct configuration drift in infrastructure managed via Terraform and Ansible. Configuration drift occurs when infrastructure changes occur outside of IaC workflows, leading to inconsistencies.

Architecture Overview

Tools Used

Implementation Steps

Step 1: Provision Infrastructure using Terraform

Example Terraform Code (main.tf):

provider "aws" {
  region = "us-east-1"
}

resource "aws_instance" "web" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
  tags = {
    Name = "WebServer"
  }
}

Step 2: Define Configuration with Ansible

Example Ansible Playbook (config-enforce.yml):

- name: Enforce Configuration on Web Server
  hosts: webserver
  become: yes
  tasks:
    - name: Ensure Apache is installed
      yum:
        name: httpd
        state: present

    - name: Ensure Apache service is running
      service:
        name: httpd
        state: started
        enabled: yes

Step 3: Detect Configuration Drift

Methods 1: Using Terraform Plan for Drift Detection

Method 2: Using Ansible Check Mode

Method 3: Using AWS Config

Step 4: Automate Drift Correction

Jenkins Pipeline Script (Jenkinsfile)

pipeline {
    agent any
    stages {
        stage('Check Terraform Drift') {
            steps {
                sh 'terraform plan -detailed-exitcode || true'
            }
        }
        stage('Enforce Configuration with Ansible') {
            steps {
                sh 'ansible-playbook -i inventory config-enforce.yml'
            }
        }
        stage('Apply Terraform Changes') {
            steps {
                sh 'terraform apply -auto-approve'
            }
        }
    }
}

Step 5: Integrate Monitoring & Alerts

Prometheus Alert Rule (prometheus.rules.yml)


          groups:
          - name: drift_alerts
            rules:
              - alert: ConfigurationDriftDetected
                expr: node_filesystem_avail_bytes{fstype="ext4"} < 500000000
                for: 2m
                labels:
                  severity: critical
                annotations:
                  summary: "Configuration Drift Detected on {{ $labels.instance }}"
                  description: "Terraform or Ansible drift detected."

Final Workflow

  1. Terraform provisions infrastructure.
  2. Ansible enforces configuration.
  3. Jenkins runs scheduled drift detection.(terraform plan, ansible-playbook --check).
  4. If drift is detected:
    • Alert via Prometheus.
    • Auto-correct using Terraform and Ansible.
  5. Grafana dashboard provides visualization.
  6. AWS Config continuously monitors for changes.

Benefits

Next Steps