CISO Assistant ↔ Knowledge Graph (bidirectional, OWL/RDF-native)¶
CONCEPT:AU-KG.enrichment.ciso-assistant-extraction (extractor) · CONCEPT:AU-KG.enrichment.ciso-2 (writeback sink)
CISO Assistant is an open-source GRC system for risk, compliance, audit, AppSec, third-party risk, business-impact analysis, and privacy. The native connector federates its governance data with the ontology-driven Knowledge Graph and can reconcile it with other configured metadata and business-process sources.
The one ontology¶
CISO Assistant records are mapped to the canonical governance classes shared
across the ecosystem (the same classes the Egeria extractor emits, see
ontology_egeria.ttl / EG's core enterprise source), so they reconcile by GUID /
qualifiedName rather than living in a CISO-specific schema:
| CISO Assistant object | KG node (id → type) |
|---|---|
| policy | ciso_assistant_policy:{id} → Policy |
| applied / reference control | ciso_assistant_control:{id} → Control |
| risk scenario | ciso_assistant_risk:{id} → Risk |
| threat | ciso_assistant_threat:{id} → Threat |
| risk assessment | ciso_assistant_risk_assessment:{id} → RiskAssessment |
| compliance assessment | ciso_assistant_compliance_assessment:{id} → ComplianceAssessment |
| framework | ciso_assistant_framework:{id} → Framework |
| asset | ciso_assistant_asset:{id} → Asset |
| incident | ciso_assistant_incident:{id} → Incident |
| third-party entity | ciso_assistant_entity:{id} → Entity |
Every node carries domain="ciso_assistant", externalToolId (the CISO uuid) and
qualifiedName (the CISO urn/ref_id) — the federation keys.
Inbound — ingest CISO Assistant INTO the KG¶
enrichment/extractors/ciso_assistant.py (CATEGORY="ciso_assistant",
self-registering) consumes the injected ciso_assistant_api.Api facade, calling
its generated list methods (api_policies_list, api_applied_controls_list,
api_risk_scenarios_list, api_compliance_assessments_list, …) and emitting:
- Nodes — the canonical mapping above.
- Internal edges —
Risk —MITIGATED_BY→ Control,Risk —PART_OF→ RiskAssessment,ComplianceAssessment —CONFORMS_TO→ Framework.
The extractor is import-safe (no CISO imports at module top; client is None
yields an empty batch) and tolerant of partial client surfaces.
The crosswalk — CISO ↔ Egeria ↔ Camunda¶
Reconciliation is the established ALIGNED_WITH equivalence pattern. When a CISO
record carries an explicit twin id (populated by an operator mapping field), the
extractor emits an ALIGNED_WITH edge to the twin's deterministic node id:
- a CISO control/policy with an Egeria GUID →
ALIGNED_WITH egeria_policy:{guid} - a CISO risk/compliance process with a Camunda/BPMN id →
ALIGNED_WITH bpmn_process:{id}
The OWL reasoner (run after every materialize via OntologyReasoningDriver)
treats ALIGNED_WITH as sameAs, so a CISO control aligned to an Egeria policy,
or a CISO compliance process aligned to a Camunda process, collapses into one
logical concept — governance intelligence then transits CISO ↔ Egeria ↔ Camunda.
Absent an explicit twin id, the shared qualifiedName/name lets the reasoner
reconcile by sameAs. No edits to the existing Egeria/Camunda connectors are
needed — they already mint the canonical, deterministically-keyed twin nodes.
Outbound — enrich data back INTO CISO Assistant¶
enrichment/writeback/sinks/ciso_assistant.py (CisoAssistantSink,
domain="ciso_assistant") pushes KG-derived governance entities back as CISO
objects via the generated api_*_create methods (Policy/Control/Asset/
Finding/SecurityException/Entity). It is standard tier, fail-closed,
dry-run-first: live writes require CISO_ASSISTANT_ENABLE_WRITE, and every CISO
object must name a folder (domain) — never guessed; missing-folder creations are
skipped, not invented.
Components¶
| Path | Role |
|---|---|
enrichment/extractors/ciso_assistant.py |
inbound extractor (AU-KG.enrichment.ciso-assistant-extraction) |
enrichment/writeback/sinks/ciso_assistant.py |
outbound sink (AU-KG.enrichment.ciso-2) |
enrichment/materialize.py |
_CLIENT_MODULES["ciso_assistant"]="ciso_assistant_api", MATERIALIZE_SOURCES membership |
agents/ciso-assistant-api |
the ciso_assistant_api.Api client / MCP / agent (CONCEPT:AU-ECO.connector.ciso-assistant) |
Configuration¶
Register the connector through the operator-owned MCP/connector catalog referenced from XDG AgentConfig. Its runtime profile supplies:
- a discovered service endpoint;
- a workload-scoped credential reference;
- a TLS profile reference containing trust and optional client-certificate material;
- bounded pagination, timeout, and rate-limit policy; and
- the explicit
CISO_ASSISTANT_ENABLE_WRITEgate, which is off by default.
The client factory resolves credential and TLS references only in process. AgentConfig,
the connector manifest, traces, and reports retain opaque references rather than raw
tokens, passwords, endpoints, certificate paths, or user identities. Do not use a
repository .env file or disable TLS verification.
Verification¶
# Inbound through the configured MCP connector
source_sync(source="ciso_assistant", mode="delta")
source_sync(source="ciso_assistant", mode="delta") # skipped_unchanged > 0
# outbound writeback dry-run (fail-closed; CISO_ASSISTANT_ENABLE_WRITE unset)
graph_writeback(target="ciso_assistant", dry_run=True) # proposals only, created == 0
# unit
pytest tests/unit/knowledge_graph/enrichment/test_ciso_assistant_extractor.py \
tests/unit/knowledge_graph/enrichment/test_ciso_assistant_writeback.py -q
See also Camunda + ARIS ↔ KG and KG Connectors, Ingestors & Enrichers.