Schedule icon
Commands icon
Docker icon
Script icon
Log icon
If icon
SlackIncomingWebhook icon
Fail icon

Automated Incident Response Threat Intelligence Alerting

Query AbuseIPDB for IP reputation data, analyze risk metrics using Python, and alert SecOps when configured thresholds are breached.

Categories
Core

Security Operations Center (SOC) teams frequently face influxes of suspicious incoming requests, automated vulnerability scans, and brute-force access attempts. Manually looking up threat indicators across disparate APIs delays incident response and leaves cloud infrastructure exposed to active attack vectors.

This blueprint provides an automated Security Orchestration, Automation, and Response (SOAR) workflow using AbuseIPDB threat intelligence. It queries IP reputation metrics, evaluates risk confidence scores in a containerized Python environment, logs audit details, and alerts the SecOps team via Slack when confidence thresholds are breached.

How it works

  1. check_threat_intel (io.kestra.plugin.scripts.shell.Commands) queries the AbuseIPDB API using curlimages/curl:latest with credentials retrieved safely from Kestra Secrets.
  2. analyze_threat_score (io.kestra.plugin.scripts.python.Script) parses the JSON payload, extracts key indicators (abuse confidence score, country code, total reports, ISP, domain), and outputs variables for flow logic.
  3. log_threat_summary (io.kestra.plugin.core.log.Log) prints an itemized breakdown of threat indicators to the execution log.
  4. evaluate_quarantine_policy (io.kestra.plugin.core.flow.If) evaluates whether the abuse score meets or exceeds inputs.confidence_threshold:
    • If malicious: notify_secops_incident (io.kestra.plugin.slack.notifications.SlackIncomingWebhook) triggers an incident report in Slack.
    • If fail_on_high_risk is true: fail_threat_gate (io.kestra.plugin.core.execution.Fail) halts execution with an error status.
    • If benign: log_benign_ip (io.kestra.plugin.core.log.Log) logs a PASSED confirmation.
  5. outputs exposes the raw JSON threat report URI and calculated confidence metrics for downstream security flows.

What you get

  • Automated real-time IP reputation lookup without commercial SOAR licensing overhead.
  • Configurable risk threshold gating (confidence_threshold) to eliminate false positives.
  • Rich Slack alerting containing actionable context (ISP, Geolocation, Abuse Score, and Report Count).
  • Non-blocking audit mode (fail_on_high_risk: false) for passive security logging.

Who it's for

  • Security Operations (SOC) Engineers automating incident triage and threat hunting.
  • SecOps and Cloud Security teams building threat-intelligence alerting and triage workflows.
  • DevOps engineers setting up automated perimeter checks for incoming webhook integrations.

Prerequisites

  • A Kestra worker capable of executing Docker container runners.
  • Outbound internet access on the worker to communicate with api.abuseipdb.com.

Secrets

  • ABUSEIPDB_API_KEY: API key for authentication with AbuseIPDB v2 endpoints.
  • SLACK_SECURITY_WEBHOOK: Incoming Webhook URL for your SecOps Slack channel.

Quick start

  1. Configure secrets ABUSEIPDB_API_KEY and SLACK_SECURITY_WEBHOOK in your Kestra namespace.
  2. Execute the flow with default inputs (suspicious_ip: 118.25.6.39, confidence_threshold: 75).
  3. Observe the flow fetching real-time threat intelligence, evaluating the IP risk score, and sending a formatted Slack notification if the IP exceeds the threshold.

Outputs

  • outputs.abuse_score: AbuseIPDB confidence score from 0 to 100.
  • outputs.is_malicious: Boolean indicating whether the score meets or exceeds confidence_threshold.
  • outputs.raw_report: URI of the raw AbuseIPDB JSON response.
  • Example references: {{ outputs.abuse_score }}, {{ outputs.is_malicious }}, and {{ outputs.raw_report }}.

How to integrate with your SIEM or WAF

To automate quarantine actions directly in cloud infrastructure, extend notify_secops_incident with a cloud-specific task (for example, an AWS WAF or Cloudflare integration) that adds malicious IPs to an active blocklist or IP set.

  • Trigger this workflow dynamically via Kestra Webhook triggers (io.kestra.plugin.core.trigger.Webhook) whenever your web server or SIEM detects abnormal traffic anomalies.

Links

See How

New to Kestra?

Use blueprints to kickstart your first workflows.