Policy Configuration

Defining Remediation Rules

The policy file (atropos_policy.yaml) defines which actions to take for each node at different entropy thresholds. It supports time windows, rate limiting, and escalation strategies.

Full Example

meta:
  version: "1.0"
  last_reviewed: "2026-01-18"

server:
  listen_addr: ":8443"
  hmac_secret: "change-me-in-prod"  # or ATROPOS_HMAC_SECRET

nodes:
  athena:
    host: "athena.local"
    port: 22
    user: "root"
    description: "Primary application server"
    time_windows:
      - start: "09:00"
        end: "17:00"
    rate_limit:
      max_cuts: 3
      window_minutes: 60
    strategies:
      - threshold: 0.85
        action: vbox_revert_snapshot
        snapshot_name: "LAST_ORDERED_STATE"
        critical: true
        on_failure: "ssh_isolate_network"
      - threshold: 0.70
        action: docker_pause_all

Metadata Block

meta:
  version: "1.0"
  last_reviewed: "2026-01-18"

Track policy version and review dates for audit purposes.

Server Configuration

server:
  listen_addr: ":8443"
  hmac_secret: "your-secret-here"
FieldDescription
listen_addrAddress:port to listen on
hmac_secretSecret for webhook signature verification

Override HMAC secret with ATROPOS_HMAC_SECRET env var in production.

Node Definitions

nodes:
  athena:
    host: "athena.local"
    port: 22
    user: "root"
    description: "Primary application server"
    strategies:
      - threshold: 0.85
        action: vbox_revert_snapshot
FieldDescription
hostHostname or IP for SSH actions
portSSH port (default: 22)
userSSH user for network commands
descriptionHuman-readable description
strategiesList of threshold → action mappings

Strategies

Strategies define what action to take at each entropy level:

strategies:
  - threshold: 0.85
    action: vbox_revert_snapshot
    snapshot_name: "LAST_ORDERED_STATE"
    critical: true
    on_failure: "ssh_isolate_network"
  - threshold: 0.70
    action: docker_pause_all
FieldDescription
thresholdMinimum entropy to trigger (0.0 - 1.0)
actionCutter action to execute
criticalMark as critical action
on_failureFallback action if primary fails
snapshot_nameVBox snapshot name (for vbox actions)
commandSSH command (for ssh_isolate_network)

Strategies are evaluated highest-threshold first. The first matching threshold wins.

Time Windows

Restrict when cuts can be executed:

time_windows:
  - start: "09:00"
    end: "17:00"    # Business hours only
  - start: "00:00"
    end: "04:00"    # Maintenance window

Cuts outside these windows will be queued or rejected.

Rate Limiting

Prevent cut storms by limiting frequency:

rate_limit:
  max_cuts: 5
  window_minutes: 60   # Max 5 cuts per hour

If rate limit is exceeded, subsequent cuts are rejected until the window resets.

Conditional Actions

Define fallback strategies when the primary action fails:

strategies:
  - threshold: 0.85
    action: vbox_revert_snapshot
    on_failure: "ssh_isolate_network"  # Fallback

If vbox_revert_snapshot fails, Atropos will automatically try ssh_isolate_network.

Notifications

Configure notifications in a separate file (atropos_notification.yaml):

Email

enabled: true
email:
  smtp_host: "smtp.example.com"
  smtp_port: 587
  smtp_user: "alerts@example.com"
  smtp_password: "password"
  from: "atropos@example.com"
  to:
    - "admin@example.com"
    - "ops@example.com"

Webhook

enabled: true
webhook:
  url: "https://hooks.example.com/atropos"
  headers:
    Authorization: "Bearer token123"
  retries: 3

Set config path via environment:

ATROPOS_NOTIFICATIONS_CONFIG=/path/to/config.yaml ./atropos