Connectors — what each one needs
One page per question an operator actually has before connecting a source: what to grant on the source side, which product variant is supported, whether the connector reaches your internal network, and what a specific failure is telling you.
GET /connectors/catalog, so the form, this page and
the API cannot drift apart.
On this page
- First: can the connector reach the source?
- All connectors at a glance
- Microsoft Entra ID
- Intune & Defender
- FortiGate, FortiAnalyzer, FortiClient EMS
- Zabbix & Splunk
- VMware vCenter
- Jira (Cloud and Server / DC)
- Tenable / Qualys, Action1, Trend Vision One
- Generic HTTP/JSON and file import
- Reading a failure
First: can the connector reach the source?
Cerynix blocks outbound requests to non-public addresses by default. That default is right for a multi-tenant service and was wrong as the only option for on-prem, where the integration targets are supposed to be on your network. Set the ranges you integrate with:
CONNECTOR_ALLOWED_CIDRS=10.20.0.0/16,192.168.213.0/24
Without it, a connector pointed at an internal address fails with
destination resolves to a non-public address. Scope it
to what you actually integrate with rather than 0.0.0.0/0.
It applies to connectors only — webhooks and OIDC discovery keep the
strict public-only policy — and loopback, link-local (including the
169.254.169.254 metadata endpoint), unspecified and
multicast stay blocked whatever you list. Each permitted internal destination
is recorded on the connector run
(summary.internal_egress_allowed), so the exception is
auditable rather than invisible.
All connectors at a glance
| Connector | Reaches | Grant on the source | Imports |
|---|---|---|---|
entra_id — Microsoft Entra ID | Microsoft cloud | User.Read.All, Device.Read.All, AuditLog.Read.All | Devices as assets; identity + MFA posture |
intune — Microsoft Intune | Microsoft cloud | DeviceManagementManagedDevices.Read.All | Managed devices as assets |
defender — Microsoft Defender | Microsoft cloud | SecurityEvents.Read.All, SecurityAlert.Read.All | Alerts as findings; secure score |
fortigate | your network | Read-only REST API admin + API token | Device posture as findings |
fortianalyzer | your network | JSON-RPC user with read access | Log-derived findings |
forticlient_ems | your network | Read-only API account | Endpoints as assets |
zabbix | your network | API user with read access | Hosts as assets; problems as findings |
splunk | your network | Search-capable token | Search results as findings |
vmware — vCenter | your network | Read-only vCenter account | VMs as assets |
jira | cloud or your network | Cloud: email + API token · Server/DC: username + password | Issues as findings |
tenable — Tenable / Qualys | cloud or your network | Access key + secret key (read) | Vulnerabilities as findings |
action1 | cloud | API client (read) | Patch status as findings |
trend_vision_one | cloud or your network | API key with read scope | Detections as findings |
http_json — Generic HTTP/JSON | your network (usually) | Read access to the endpoint you configure | Whatever you map |
csv_asset_import / json_asset_import | nothing — file upload | — | Assets |
Every connector marked your network needs
CONNECTOR_ALLOWED_CIDRS.
The three Microsoft ones talk to fixed cloud hosts and work with no egress
configuration at all.
Microsoft Entra ID
App-only (client credentials) against Microsoft Graph. Register an application, grant the three application permissions below, and grant admin consent — delegated permissions will not work for an unattended sync.
| Permission | Used for | Without it |
|---|---|---|
User.Read.All | Directory users, enabled/guest classification | Sync fails |
Device.Read.All | Device inventory imported as assets | Sync fails |
AuditLog.Read.All | MFA registration report | Sync succeeds; MFA coverage is omitted with mfa_note explaining why |
Configuration: tenant_id — your tenant's domain
(contoso.onmicrosoft.com) or its directory GUID;
client_id — the application (client) id; secret — a
client secret. A frequent mistake is pasting the client id into the
tenant field, which Azure answers with
AADSTS90002: Tenant not found.
$top=1 read against each
resource the sync uses and reports them individually, so a missing permission
is named before you run a full sync. Until 1.0.2 it only read
/organization — which needs none of these scopes — so
it could return a green tick and the sync would then fail with 403.
What the numbers mean. MFA coverage is measured over enabled member
accounts matched to the registration report by directory id; disabled
accounts and guests are excluded, and accounts the report does not cover are
reported separately as mfa_users_not_in_report rather
than being absorbed into the percentage. Devices are identified by their
directory object id, so two machines sharing a hostname stay two assets and a
renamed machine stays one.
Intune & Defender
Same app-registration pattern as Entra ID, different application permissions:
DeviceManagementManagedDevices.Read.All for Intune;
SecurityEvents.Read.All and
SecurityAlert.Read.All for Defender. Admin consent is
required for both. They can share one app registration or use separate ones —
separate is easier to revoke.
FortiGate, FortiAnalyzer, FortiClient EMS
All three live on your network, so start with
CONNECTOR_ALLOWED_CIDRS.
- FortiGate: create a REST API administrator with a read-only profile and generate its API token. Restrict the admin's trusted hosts to the Cerynix server's address — the token is bearer credentials.
- FortiAnalyzer: a JSON-RPC user with read access. Its JSON-RPC surface differs between firmware versions; if a sync fails on an otherwise valid account, send us the firmware version and the raw response (redacted) — that is the fastest path to a fix, and we would rather hear it than have you work around it.
- FortiClient EMS: a read-only API account.
Zabbix & Splunk
- Zabbix: an API user with read permission on the host groups you want
imported. Point
base_urlat the frontend (https://zbx.example.internal); the connector posts to/api_jsonrpc.php. - Splunk: a token whose role may run searches. Point
base_urlat the management interface (commonly:8089), not the web UI port.
VMware vCenter
A read-only vCenter account (the built-in Read-only role is enough for VM
inventory). Point base_url at the vCenter appliance. If
its certificate is internally issued, the connector still validates TLS — install
your CA in the trust store rather than disabling verification.
Jira — Cloud and Server / Data Center
| Jira Cloud | Jira Server / Data Center | |
|---|---|---|
| Account field | email | username |
| Secret | API token | Account password |
| REST version | 3 (auto) | 2 (auto) |
| Reaches | Atlassian cloud | your network |
Set email or username and
the API version follows automatically — Server has no
/rest/api/3 at all, so a Cloud-shaped request there
returns 404. Override with api_version if your instance
disagrees. Optional jql selects which issues become
findings; the default is
statusCategory != Done ORDER BY created DESC.
Tenable / Qualys, Action1, Trend Vision One
- Tenable / Qualys: an access key and secret key with read scope. The hosted service needs no egress configuration; Tenable.sc / Qualys on-prem does.
- Action1: a read-only API client. Cloud only.
- Trend Vision One: an API key with read scope, from the region your tenant lives in — a key from another region authenticates against nothing.
Generic HTTP/JSON and file import
Generic HTTP/JSON reads any endpoint returning a JSON array of objects and maps fields onto assets. It is the fastest way to bring in a source we do not support natively — and if you build one, tell us what you mapped; that is how a native connector gets prioritised.
CSV / JSON import touch no network at all: you upload the file. Best first step if you want the inventory populated before wiring any credentials.
Reading a failure
| Message | What it means | Do |
|---|---|---|
destination resolves to a non-public address | The target is on your network and internal egress is not enabled | Set CONNECTOR_ALLOWED_CIDRS |
AADSTS90002: Tenant … not found | The tenant field does not hold a tenant — most often a client id pasted one field up | Use the tenant domain or directory GUID |
Authorization_RequestDenied / HTTP 403 | The credential is valid; a permission is missing | Run Test connection — it names the resource that failed |
| HTTP 404 on a Jira sync | REST v3 requested against Jira Server | Use username instead of email, or set api_version=2 |
mfa_note in the run summary | The MFA report was unavailable; the rest of the sync succeeded | Grant AuditLog.Read.All |
Connector errors carry the provider's own error code, description and trace id where the provider returns one — up to 1.0.1 we discarded them and reported only the HTTP status, which cost the first pilot client an hour on a wrong tenant id that Azure had named in the response body (their D-23).
log and
summary (Integrations → the connector → the run) to
support@cerynix.com. Redact what you
must — the message text and status code are usually enough.