Skip to content

Drift Watch

Drift Watch provides continuous, real-time monitoring of your cloud resources for configuration changes. Unlike scan-based drift detection that runs periodically, Drift Watch polls individual resources on a configurable interval and alerts you immediately when something changes.

Pro Plan Required

Drift Watch is available on Pro, Team, and Enterprise plans.

Overview

Drift Watch monitors specific cloud resources by comparing their live configuration against a stored baseline. When a change is detected, it:

  1. Classifies the severity (Critical, High, Medium, Low) based on the resource type and what changed
  2. Attributes the change via CloudTrail (AWS), Activity Log (Azure), or Audit Log (GCP) — who changed it, from where, which API call
  3. Sends notifications via Slack, Teams, PagerDuty, or webhooks
  4. Optionally auto-reverts dangerous changes (e.g., security groups opened to 0.0.0.0/0)

Supported AWS Resources

Drift Watch supports live configuration monitoring for all 37 AWS resource types:

CategoryResource Types
ComputeEC2 Instances, Auto Scaling Groups, Lambda Functions
ContainersECS Clusters, ECS Services, EKS Clusters, EKS Node Groups
DatabaseRDS Instances, RDS Clusters, DynamoDB Tables, ElastiCache
StorageS3 Buckets
NetworkingVPCs, Subnets, Security Groups, NAT Gateways, Load Balancers, Target Groups, CloudFront, Route 53
SecurityIAM Roles, IAM Users, IAM Policies, KMS Keys, Secrets Manager, ACM Certificates
MessagingSNS Topics, SQS Queues, Kinesis Streams
IntegrationAPI Gateway, Step Functions, Cognito User Pools
DevOpsCodeBuild Projects, CodePipeline Pipelines
MonitoringCloudWatch Alarms, CloudWatch Log Groups

Getting Started

Adding a Watch

  1. Go to Cloud DiscoveryResources or Orphans
  2. Click on a resource to open its detail panel
  3. Click the Watch button
  4. The resource is now monitored — the first check captures the baseline

Alternatively, use Watch Templates to bulk-add watches matching specific criteria.

Watch Templates

Templates auto-discover and watch resources matching your criteria. Go to Drift WatchTemplates in the sidebar.

  1. Click Create Template
  2. Define criteria: resource type, provider, region, tag filters
  3. Click Create Template
  4. Click Run Now to discover and watch matching resources
  5. Re-run anytime to pick up newly created resources

Severity Classification

Every drift event is automatically classified:

SeverityResource TypesExample Changes
CriticalSecurity Groups, IAM Roles/Users/Policies, KMS Keys, Secrets Manager, NAT GatewaysIngress rules opened, policy documents modified, encryption settings changed
HighEC2 Instances, VPCs, Subnets, Load Balancers, RDS, S3, EKS, CloudFront, Route 53, ACMNetworking config, storage policies, database settings
MediumLambda, ECS, Auto Scaling, DynamoDB, SQS, SNS, CodeBuild, CodePipeline, CloudWatchScaling config, function settings, queue attributes
LowAny resourceTag-only or description-only changes

When an actual drift is detected, severity may be upgraded based on which specific attributes changed (e.g., a tag change on a security group stays Low, but an ingress rule change becomes Critical).

Execution Modes

Cloud Mode (Default)

Controlinfra's server checks your resources directly via AWS APIs. No infrastructure to manage.

  • Checks run every 5 minutes (server-side cron)
  • Uses your configured cloud credentials (Access Keys, OIDC, or Cloud Account)
  • Best for: most users, quick setup

Runner Mode

Your self-hosted runner executes the checks locally.

  • Runner polls for due watches and reports results
  • Uses the runner's own credentials (AWS Instance Profile, Azure CLI, GCP Application Default Credentials, or local config)
  • Supports AWS, Azure, and GCP resources
  • Best for: airgapped environments, custom check scripts, on-premise infrastructure

Azure Support

Drift Watch supports Azure resources via both Cloud Mode and Runner Mode:

  • Azure resources are fetched using the Azure Resource Graph API (Cloud Mode) or az resource show (Runner Mode)
  • CloudTrail attribution is replaced by Azure Activity Log attribution (who, what operation, from where)
  • Severity classification includes Azure-specific attributes (security_rule, networkRuleSet, accessPolicies, etc.)
  • Azure resources use the azurerm_ prefix (e.g., azurerm_network_security_group)

GCP Support

Drift Watch supports GCP resources via both Cloud Mode and Runner Mode:

  • GCP resources are fetched using Google Cloud APIs (Cloud Mode) or gcloud CLI (Runner Mode)
  • Change attribution uses GCP Audit Log (who, what method, from where)
  • Severity classification includes GCP-specific attributes (firewall rules, IAM bindings, encryption settings, etc.)
  • GCP resources use the google_ prefix (e.g., google_compute_firewall)

Supported GCP Resources

CategoryResource Types
ComputeCompute Instances, Firewalls, Networks, Subnetworks, Disks, Addresses
StorageStorage Buckets
DatabaseCloud SQL Instances
ContainersGKE Clusters
NetworkingDNS Managed Zones
MessagingPub/Sub Topics, Pub/Sub Subscriptions
CacheMemorystore Redis Instances
ServerlessCloud Run Services, Cloud Functions
SecurityKMS Key Rings, KMS Crypto Keys

Features

Auto-Revert

For AWS Security Groups, Drift Watch can automatically revoke newly-added 0.0.0.0/0 ingress rules that weren't in the baseline.

Enable per-watch: Watch SettingsAuto-revert toggle.

WARNING

Auto-revert only revokes open-world (0.0.0.0/0 or ::/0) ingress rules added after the baseline was captured. It does not revert other changes.

Snooze

Temporarily pause alerts for a watch during planned maintenance:

  • Click the moon icon on any watch row
  • Choose duration: 1 hour, 4 hours, 1 day, 7 days, or custom date/time
  • Watch automatically resumes after the snooze expires
  • Snoozed watches skip drift checks entirely
  • Snoozed button shows countdown (e.g., "2h left") — click to unsnooze early

Accept & Revert Baseline

When drift is detected, you can accept the current state as the new baseline:

  1. Click the watch row to open the detail panel
  2. Click Accept Baseline — a confirmation dialog explains the action
  3. The watch is marked as clean and the current state becomes the new baseline

If you change your mind, click Revert Baseline to restore the previous baseline. This is available as long as the previous baseline exists (one level of undo).

Bulk Operations

Click Select above the watch table to enter selection mode:

  • Pause / Resume — bulk toggle monitoring
  • Accept Baseline — accept current state for all selected
  • Snooze / Unsnooze — bulk snooze with duration picker
  • Delete — bulk remove watches

CloudTrail Attribution

When drift is detected on AWS resources, Drift Watch queries CloudTrail to identify:

  • Who made the change (IAM principal)
  • How (API call name, AWS Console vs. CLI/SDK)
  • From where (source IP address)

This information appears in the event detail panel.

Drift Metrics

The summary cards on the Drift Watch page show:

  • Status Breakdown — pie chart of clean, drifted, pending, error watches (clickable to filter)
  • Top Resource Types — most-watched resource types
  • Drift Metrics — MTTR (mean time to resolve), 30-day drift count, trend sparkline, severity distribution

Notifications

Drift Watch integrates with your existing notification channels:

  • In-app notifications — always enabled
  • Slack / Microsoft Teams — real-time alerts with severity, resource details, CloudTrail attribution, and diff summary
  • PagerDuty — for critical severity drifts
  • Webhooks — custom integrations via HTTP POST

Per-Watch Notification Config

Each watch can be individually configured:

  • Channels — Choose which configured channels (Slack, Teams, PagerDuty, Webhooks) receive alerts for this specific watch
  • Severity Threshold — Only notify when drift severity meets the threshold (e.g., "High & Critical only")
  • Notify on Clean — Receive alerts when a previously drifted resource returns to baseline
  • Notify on Error — Receive alerts when a check fails

Event Resolution Tracking

Events on the timeline show resolution status:

  • Open — Drift not yet resolved
  • Auto-resolved — Resource returned to clean on next check
  • Manually accepted — User accepted baseline
  • Scan accepted — Resolved via scan acceptance

Filter events by status using the All / Open / Resolved pills on the Event Timeline.

Weekly Digest

Org admins and owners receive a weekly summary email (Monday 9 AM UTC) with:

  • Total drifts detected that week
  • Critical drift count
  • Check errors
  • Auto-reverted rules
  • Top drifting resources

API Endpoints

MethodEndpointDescription
GET/api/drift-watchList watched resources
POST/api/drift-watchCreate a watch
GET/api/drift-watch/:idGet watch details + recent events
PATCH/api/drift-watch/:idUpdate watch settings
DELETE/api/drift-watch/:idRemove a watch
POST/api/drift-watch/:id/acceptAccept current state as new baseline
POST/api/drift-watch/:id/snoozeSnooze a watch
POST/api/drift-watch/:id/unsnoozeUnsnooze a watch
PATCH/api/drift-watch/bulk-updateBulk pause/resume/accept/snooze/delete
GET/api/drift-watch/eventsList drift events
GET/api/drift-watch/events/summaryGet event summary stats
GET/api/drift-watch/analyticsGet 30-day analytics (trends, MTTR, top changers)
GET/api/drift-watch/templatesList watch templates
POST/api/drift-watch/templatesCreate a template
POST/api/drift-watch/templates/:id/runRun a template
PATCH/api/drift-watch/templates/:idUpdate a template
DELETE/api/drift-watch/templates/:idDelete a template
GET/api/drift-watch/templates/:id/watchesList watches created by a template
POST/api/drift-watch/:id/unacceptRevert to previous baseline

Next Steps