Skip to main content

Connectors

A connector is the bridge between an external data source (an identity provider, a cloud audit log, an EDR, a SaaS platform) and the AiSOC pipeline. Once a connector instance is enabled, the connector microservice polls it on a schedule, pulls new events, normalizes them into AiSOC's event schema, and posts them to the ingest service for detection and triage.

Everything ships with three guarantees:

  • Credentials are encrypted at rest. Tokens, client secrets, and service-account JSON keys are sealed with Fernet (AES-128-CBC + HMAC-SHA256) before they touch the database. See Credential vault.
  • Schemas are self-describing. The connector tells the UI what fields it needs; the wizard renders them. There is no hardcoded form that drifts from the backend.
  • Polling is observable. Every poll records last_poll_at, events_added, and health_status. Failures show up in the connector card with the underlying error message.

If your tool isn't in the catalog, see Universal capture — webhook URLs, email relay, CEF syslog, and Splunk HEC let any vendor that can POST or send mail land events in the same OCSF stream.

Catalog

The catalog ships with 50 connectors out of the box, registered in services/connectors/app/connectors/__init__.py. The list below is grouped by category; only a subset has dedicated walkthrough pages today (linked entries) — the rest follow the same schema-driven wizard described under Adding a connector.

Identity

ConnectorCategoryAuthNotes
Microsoft Entra IDIdentityAzure AD app (client credentials)Directory audits + risky sign-ins via Microsoft Graph
OktaIdentityAPI tokenSystem log
Auth0IdentityMgmt API tokenTenant log events (logins, MFA, anomaly)
Duo SecurityIdentity / MFAIntegration key + secretAuthentication logs and policy events
1PasswordIAM / SecretsService account tokenVault access events and shared-item changes

EDR / XDR

ConnectorCategoryAuthNotes
CrowdStrike FalconEDROAuth2 client credentialsDetections
SentinelOneEDR / XDRAPI tokenThreats with severity mapped from confidenceLevel
Microsoft Defender (XDR)EDR / XDRAzure AD appCross-product alerts via Microsoft Graph Security
Palo Alto Cortex XDREDR / XDRAPI key + IDIncidents and alerts
Palo Alto Cortex XSIAMXDR / SIEMAPI key + IDXSIAM incidents and prioritised alerts
VMware Carbon BlackEDRAPI ID + secretEndpoint detections and alerts
Trellix HelixXDRAPI keyCross-vendor correlated alerts
Trend Vision OneXDRAPI tokenWorkbench alerts and observed attack techniques

SIEM

ConnectorCategoryAuthNotes
SplunkSIEMHEC token / APISaved-search results
Microsoft SentinelSIEMAzure AD appIncidents
ElasticSIEMAPI keyDetection alerts
Sumo LogicSIEMAccess ID + keySearch and alert events
Datadog Cloud SIEMSIEMAPI + app keySecurity signals and detection rule hits
Google ChronicleSIEMService account JSONUDM events and detection rule hits
Rapid7 InsightIDRSIEMAPI keyInvestigations and detection alerts

Cloud (control plane / posture / CNAPP)

ConnectorCategoryAuthNotes
AWS Security HubCloud (posture)AWS keys / roleFindings
AWS GuardDutyCloud (threat)AWS keys / roleThreat findings across regions
AWS CloudTrailCloud (control plane)AWS keys / roleAccount-wide API activity
AWS VPC Flow LogsCloud (network)AWS keys / role + S3 / CWLLayer-3/4 flow telemetry
Azure Activity LogsCloud (control plane)Azure AD app + subscriptionSubscription-scope ARM activity, IAM grants, policy changes
GCP Cloud Audit LogsCloud (control plane)Service account JSONAdmin Activity + Data Access + System Event
GCP Security Command CenterCloud (posture)Service account JSONOrg-scope active findings
WizCSPM / CNAPPOAuth2 client credentialsCloud security findings via GraphQL
LaceworkCSPM / CNAPPAPI key + secretComposite alerts and compliance violations
TenableVuln mgmtAPI access + secretVulns + plugin findings (Tenable.io / Nessus)
Prisma CloudCSPM / CNAPPAccess key + secretCloud findings and policy violations
OrcaCSPM / CNAPPAPI tokenSide-scanned cloud findings

SaaS / Communication / ITSM

ConnectorCategoryAuthNotes
Microsoft 365 AuditSaaSAzure AD app (shares Entra creds)Unified audit log: AAD, Exchange, SharePoint, Teams
Google WorkspaceSaaS / IdentityService account + DWDAdmin SDK Reports: login, admin, drive, token, mobile
Slack AuditSaaS / CommsAudit API tokenWorkspace audit logs (org-grid required)
SalesforceSaaS / CRMOAuth2 / connected appLogin history, setup audit trail, security events
CloudflareSaaS / EdgeAPI tokenAccount audit logs (operator activity, not edge traffic)
ProofpointEmail SecurityService principalThreat events and click telemetry
MimecastEmail SecurityAPI key + secretEmail threat events and policy actions
Email InboxEmail Security / PhishingIMAP / GraphReported-phishing inbox triage
ServiceNowITSMOAuth2 / basic authSecurity incident table updates
JiraTicketingAPI tokenSecurity ticket and project events

VCS / AppSec

ConnectorCategoryAuthNotes
GitHubVCSPAT or App installation tokenOrg audit log + Code Scanning alerts
SnykSCA / AppSecAPI tokenDependency, container, and IaC issues

Endpoint fleet / Container

ConnectorCategoryAuthNotes
osctrlEndpoint fleetAPI tokenFleet-wide osquery results from osctrl
FleetDMEndpoint fleetAPI tokenFleet-wide osquery results from FleetDM
Kubernetes AuditContainer / Orchestrationapiserver webhook or audit.log tailCluster API server audit events

Network

ConnectorCategoryAuthNotes
TailscaleNetworkAPI keyACL audit + device changes
ZscalerNetwork / Cloud ProxyAPI keyZIA and ZPA security events
Cisco UmbrellaNetwork / DNSAPI key + secretSecurity events and DNS verdicts

Adding a connector

  1. Open the AiSOC console → ConnectorsAdd connector.
  2. Pick a connector from the catalog grid. The wizard advances to a schema-driven configuration form.
  3. Fill in the required fields. Secret fields (tokens, client secrets, service-account JSON) are obscured.
  4. Click Test connection. The pre-save test is stateless — credentials are sent once over TLS, the target API is called, and nothing is persisted unless the test passes and you click Save.
  5. On save, the credentials are encrypted in the vault, the instance is stored with is_enabled=true, and the scheduler picks it up on the next reload (within 30 seconds).

How polling works

Each enabled connector instance becomes one job in an in-process APScheduler running inside services/connectors:

  • Default poll interval: 300 seconds (5 minutes). Override per-instance via connector_config.poll_interval_seconds. Minimum is 30s.
  • Every 30s the scheduler queries the database for is_enabled = true instances and rebuilds the job set. Add, remove, or change the polling interval and the next reload picks it up.
  • On poll: the vault decrypts auth_config in memory, the connector class is instantiated, fetch_alerts(since_seconds=poll_interval) runs, results pass through normalize(), and the resulting events are POSTed to the ingest service with the tenant ID header.
  • On failure: the error message is recorded on health_status and surfaced in the UI. The job stays scheduled; the next interval will retry.

Categories

Connector categories drive the catalog grouping and downstream routing hints. The current set is:

identity · cloud · vcs · siem · edr · xdr · network · posture · saas

These map to the same taxonomy used by detection rules, so a Microsoft Entra alert flowing in here can be matched against category: identity Sigma rules without any glue code.

What "hosted OAuth" means

Several connectors today require you to bring your own credentials (an Azure AD app registration, a GitHub PAT, a service-account JSON). The connector schema includes an oauth block that advertises whether a hosted OAuth flow is available — for now, every connector that supports OAuth marks it supported_in_hosted: false. Hosted OAuth (where AiSOC owns the app registration and you click "Connect") is on the roadmap; see Credential vault.

Writing a new connector

The fastest path is the Hello, connector tutorial — a complete, runnable walkthrough that builds a BaseConnector against httpbin.org. No vendor account required.

For broader background see Plugin SDK overview and Contributing. The short version: subclass BaseConnector, implement schema(), test_connection(), fetch_alerts(), and normalize(), register it in services/connectors/app/connectors/__init__.py, drop a plugin.yaml under plugins/<id>/, and run pnpm marketplace:sync.