How external insights work
When you configure an external insights source, ConductorOne syncs risk data from that tool through its connector. ConductorOne matches each risk score to an identity in your directory by email address and attaches it to that identity’s profile and any accounts they hold in other connected apps. Once synced, risk scores appear in the ConductorOne UI wherever that identity appears in an access decision.Enable or disable external insights
External insights are enabled automatically when a connector that is a supported external insight source is configured and syncing. No additional setup is required. If needed, you can manually turn risk score syncing on or off from the connector’s settings page in ConductorOne:Where external insights appear
Access review campaigns Reviewers see an identity’s risk score and risk factors on each review task, under the Insights tab. Risk factors are the specific reasons the source tool assigned that score — for example,STALE_ACCOUNT or WEAK_PASSWORD_POLICY. Reviewers can use this context to prioritize high-risk identities and make more informed certify or revoke decisions.
Task log
The task log includes an Insights column. Hovering over the insights indicator for a task shows a summary of the identity’s risk score and risk factors inline, with a link to view the full details.
Access request approvals
Approvers can see an identity’s current risk score and risk factors in a request task before submitting their decision.
Use external insights in CEL policy conditions
Beyond surfacing risk data in the UI, you can reference external insights directly in CEL policy conditions to automate access decisions based on a user’s security posture. External insights expose two data types through CEL, each from a different connector:| Data type | Connector | CEL path | Description |
|---|---|---|---|
| Issue insights | Wiz Insights | account.security_insights | Discrete security findings such as critical CVEs, misconfigurations, and exposed secrets |
| Risk scores | CrowdStrike | account.risk_score / account.risk_scores | Normalized identity risk scores (0–100, higher = more risk) |
All CEL functions that accept a source app name use the display name of the connector app in your tenant. The defaults are
"Wiz Insights" and "CrowdStrike". If you’ve renamed a connector app, use the renamed name instead. The match is exact and case-sensitive.Issue insights (Wiz)
Issue insights represent discrete security findings synced from Wiz. Each insight has three fields:source (the connector app name), value (a description like "3 Critical CVEs"), and severity ("CRITICAL", "HIGH", "MEDIUM", "LOW", or "INFORMATIONAL").
Helper functions
| Function | Returns | Description |
|---|---|---|
c1.app_user.v1.HasSecurityInsight(account) | bool | true if the account has any issue insights from any source |
c1.app_user.v1.GetSecurityInsights(account, source) | list | All issue insights from the named source |
c1.app_user.v1.HasSecurityInsightWithSeverity(account, source, severity) | bool | true if the account has at least one issue from the named source at the given severity (case-insensitive) |
Risk scores (CrowdStrike)
Risk scores are normalized values from 0 (no risk) to 100 (highest risk). Each score has two fields:source (the connector app name) and normalized_score (the integer score).
You can access scores in two ways:
- Map —
account.risk_scoreis keyed by source display name and returns the score as an integer. - List —
account.risk_scoresreturns a list of score objects, useful for cross-source queries.
| Function | Returns | Description |
|---|---|---|
c1.app_user.v1.HasRiskScore(account) | bool | true if the account has risk scores from any source |
c1.app_user.v1.GetRiskScore(account, source) | c1.risk_score.v1 | The risk score object for the named source (returns normalized_score of 0 if missing) |
Combining sources
You can combine Wiz issue insights and CrowdStrike risk scores in a single condition. Escalate when CrowdStrike risk is elevated and Wiz has critical findings:CEL best practices for external insights
- Put cheap checks first. Place simple attribute comparisons (like
subject.department) before insight or risk-score lookups, which trigger lazy data loads. - Guard with existence checks. Use
HasRiskScoreor"CrowdStrike" in account.risk_scorebefore reading scores to avoid zero-default edge cases. UseHasSecurityInsightbefore iterating insights. - Use the correct source name. The source name must exactly match the app display name in your tenant.
- Prefer helper functions for severity checks.
HasSecurityInsightWithSeveritycompares severity case-insensitively, but direct field comparisons likei.severity == "CRITICAL"are case-sensitive.
Supported external insights sources
CrowdStrike Falcon Identity Protection
Ingest Falcon identity risk scores into C1.
Wiz Insights
Ingest Wiz identity risk scores into C1.