How OpenCTI connectors setup decides whether your platform stays fast
Connector choice, worker capacity and deduplication decide how much load an OpenCTI platform carries once feeds, MITRE ATT&CK and MISP data start flowing in. A platform that answers quickly on day one can slow down within weeks if every connector is enabled without a plan for how much data it writes, how often it runs and what it duplicates. This page covers those planning decisions for teams that already have an OpenCTI platform running and now need external intelligence connected to it.
Connectors look simple to switch on, which is why they are hard to keep under control. In OpenCTI, a deployment includes the platform itself, Python workers that consume RabbitMQ messages for asynchronous writes, and connectors for import, enrichment, file extraction, export and stream consumption. Each connector pushes its work through that queue, creates STIX2 entities and relationships in the knowledge schema, and can add an object that another source already created. Every one of those writes lands on the same workers, RabbitMQ and search index, so a single noisy feed can slow analyst queries for everyone.
The planning areas on this page are the order in which to add connectors, how to size worker capacity for the connectors you run, how deduplication and overlapping sources are handled, and how to keep data volume under control as feeds grow. Ask your connector sources and your platform team to agree on which feeds are required, how often each one imports, and which ones enrich existing data rather than bring in new objects. Record those decisions before the first connector is enabled, because changing them later means cleaning up data already written to the graph.
Migration of existing intelligence, sizing of the platform, Elasticsearch or OpenSearch, Redis, RabbitMQ and object storage, and SSO configuration are covered on sibling pages and are not repeated here. Read this section as the boundary between those topics: the connector decisions below determine how much capacity those components must provide, so confirm them before you finalize sizing.
Before enabling connectors in production, confirm three things with your team: the expected worker count for the connectors you plan to run, which sources overlap on indicators or malware objects, and who owns the import schedule for each feed. Confirm the exact connector list and their resource needs against the OpenCTI deployment documentation and the release you intend to run, since connector behavior can change between releases. Treat the first week of imports as a measurement period and review queue depth, object counts and query times before adding the next source.
Which OpenCTI parts connectors read, write and queue through
Every OpenCTI connector touches the same core: the platform's UI and GraphQL API, the Python workers that apply queued writes, and the search, cache, queue and object storage services behind them. Knowing which part a connector reads from, writes to and queues through tells you where load, failures and access rules will show up before you enable the first feed.
Platform UI and GraphQL API
The platform is the entry point for analysts and for connectors that call the GraphQL API to read existing objects or submit data. Connectors authenticate with a token tied to a user or service identity, so the permissions on that identity decide what a connector can read and create. Check which identity each connector uses, and confirm that its token scope matches the feeds it actually needs before you turn anything on.
Python workers and RabbitMQ queues
Most connector writes do not land in the database immediately. They are published as messages to RabbitMQ and applied asynchronously by Python workers, so a burst from one connector shows up as queue depth rather than as an error in the connector's own logs. Watch queue backlog and worker throughput together, and plan worker count against the number of connectors you intend to run at the same time.
Connector types by data direction
Connectors fall into five types: import, enrichment, file extraction, export and stream consumption. Import connectors pull external feeds in, enrichment connectors send observables out to services and write results back, and export and stream connectors move data to other tools. Classify each planned connector by type first, because the type determines its traffic pattern, its credentials and where its failures will surface.
Elasticsearch or OpenSearch for search
Search and the indexed view of the knowledge graph run on Elasticsearch 8.0 or OpenSearch 2.9 or later. Connector writes become searchable only after they are indexed, so slow indexing makes feeds look stale even when the queue is clear. Confirm which engine and version your rollout uses, and check indexing lag after each new connector is added.
Redis and S3-compatible storage
Redis 7.1 or later holds short-lived platform state that the platform and workers share, and S3-compatible storage such as MinIO holds uploaded files. File extraction and document-based connectors send their content through object storage, so their traffic depends on bucket availability and on the storage's access policy. Confirm both services are reachable from the workers that need them and not only from the platform.
MITRE ATT&CK, MISP and TheHive paths
The MITRE ATT&CK connector, along with integrations with MISP and TheHive, are the connector paths teams most often ask about first. Each one imports or exchanges data with a different system, so each needs its own identity, its own schedule and its own check for duplicate objects. Confirm the current connector versions and their configuration options against the vendor documentation before you plan the first run.
Which OpenCTI connectors to start with and what each choice costs you
This table compares the main connector choices for a first OpenCTI rollout, with the fit, the platform and worker load, and the ongoing cost of each. Read each row as a decision: start with the option whose cost your team can carry from day one, and add others once worker capacity and data volume are measured. Feed and service terms differ by provider, so confirm them before any import starts.
| Option | When it fits | Load it adds | Operational cost to plan for |
|---|---|---|---|
| MITRE ATT&CK connector first | Team needs a shared technique vocabulary before any feed arrives | Modest import of framework objects with light worker and index load | Low: confirm the framework version it loads and how updates are scheduled |
| MISP as source of existing indicators | Organization already runs MISP and needs its events and indicators in OpenCTI | Steady import volume that follows MISP event growth and queue traffic | MISP API key ownership, sync scope, and who resolves duplicate or stale events |
| Commercial or open feed connectors | Sector, regional or vendor intelligence is needed for analyst work | Often the largest volume, adding sustained queue, storage and index growth | Feed license, subscription fees, API quotas and renewal ownership |
| Enrichment connectors calling external services | Analysts need lookups on observables during investigations | Outbound calls for each enrichment, so workers wait on remote response times | Service credentials, rate limits, any per-query charges and external data handling terms |
| Full feed import versus filtered subset | Choose full import when analysts need the whole dataset, or a filtered subset for a defined use case | Full feeds grow indexes and queues fastest, while filters limit growth | Filter rules need an owner as feed scope changes; full import needs storage planning |
| Feed licensing and service terms | Before any commercial, open or enrichment connector is enabled | Terms can limit storage, sharing or redistribution of imported data inside OpenCTI | Confirm each provider's license and service terms in writing before import begins |
How to sequence OpenCTI connectors setup from one feed to full coverage
This sequence adds OpenCTI connectors one at a time, so each data source is verified before the next is enabled and the team can tell which connector caused a problem. It ends with governed data volume and export paths that only run once imports are stable.
Inventory sources, owners and analyst needs
Before any connector is enabled, list every intelligence source the team plans to use, including its owner, licence terms, expected format and update frequency. Agree with each analyst group which data they need inside OpenCTI and which they do not, because that scope decides which connectors are needed and how much data they will write. The step is done when the inventory is signed off by the platform owner and each source has a named contact for questions about its content. Confirm each source's licence permits import and redistribution inside your organization.
Confirm platform and workers are running
Verify the OpenCTI platform, its GraphQL API and the Python workers are healthy before turning on any connector. Connectors send messages through RabbitMQ to the workers, so a worker that is down or unable to reach Elasticsearch or OpenSearch will look like a connector fault. Check that dependencies (Elasticsearch or OpenSearch, Redis, RabbitMQ and S3-compatible storage) meet the minimum versions in the deployment documentation and that the platform can reach them. The step closes when a test entity can be created in the UI and the worker count matches the plan. Confirm the worker-to-platform ratio against the current deployment overview.
Enable the MITRE ATT&CK connector first
Start with the MITRE ATT&CK connector because it loads a widely referenced, relatively stable set of attack patterns, intrusion sets and relationships that later data can attach to. Record the connector's configuration, the version of the ATT&CK data it pulls and the scope options you chose, then run one import. Check that the expected entities appear in the knowledge graph, that relationships resolve and that no import errors are logged by the connector or workers. Confirm the connector's options and data source details against its own documentation, since they change between releases.
Add the MISP connector with an agreed scope
Enable the MISP connector only after the ATT&CK import is clean, and limit it to the event tags, organizations or distribution levels agreed in the inventory. Run a limited import and compare entity and observable counts in OpenCTI against the same filtered view in MISP, recording both figures. Differences usually come from filtering, unsupported attribute types or deduplication, so investigate each gap before widening the scope. The step closes when counts reconcile for the agreed scope and the team can explain every exception. Confirm the connector's filter and mapping options in its documentation for your version.
Add enrichment connectors one at a time
Add each enrichment connector separately, not in a batch, so that any rate-limit errors, failed lookups or unexpected volume can be traced to a single service. For each one, record the API credentials location, the rate limit set on the connector, the owner of the account and the expected request volume. Run a small test set of observables and confirm the enrichment results appear on the right entities without duplicates. Wait until the connector has run cleanly before enabling the next one. Confirm rate limit and credential settings against the provider's terms and the connector's documentation.
Set deduplication and retention rules
Before data volume grows, decide how duplicate entities will be merged, how long each source's data will be kept and which entity types are exempt from automatic cleanup. Apply these settings to the existing data and check a sample of merged entities to confirm that merges kept the correct relationships and sources. Document the rules with their owners so that analysts understand why an indicator disappeared or was consolidated. The step closes when a deduplication test and a retention test both return the expected result. Confirm the available deduplication and retention options in the current OpenCTI documentation before setting them.
Add stream and export connectors last
Enable stream consumption and export connectors only after every import path has run stably through the previous steps, because exports republish whatever the platform holds and errors there reach downstream tools. Start with one export to a test consumer, confirm the message count and content match the platform, then connect the production consumer. Record each consumer's owner, the data scope it receives and how it is revoked. The step closes when the downstream tool confirms receipt and the team has a written list of all active connectors with their scope, credentials location and owner. Confirm each connector's export format and consumer requirements in its documentation.
How many workers OpenCTI connectors need and where the queue backs up
When an OpenCTI import runs slowly, the connector is often not the problem. Connector output reaches the platform as messages, the platform places them on RabbitMQ queues, and Python workers consume those messages to perform the asynchronous writes into the data store. A connector can read its source quickly and still stall if too few workers drain the queue, because the backlog grows and the data does not appear in the platform until the workers catch up. Before you tune the connector, check the queue first.
The documented starting point is at least one platform node for every three workers. Use it as a minimum for planning, then adjust from observed behavior. Count workers per deployment, not per connector, because all connectors that write through the same queues compete for the same consumers. Confirm for the release you run how worker concurrency is configured, how many messages each worker prefetches, and whether queues can be assigned to specific worker groups. These settings change between releases, so read them from the documentation for your version instead of copying values from an older deployment.
Three signals tell you whether to add workers. Queue depth shows how many messages are waiting; a depth that rises during a feed run and does not fall back before the next run points to too little capacity. Worker backlog, meaning messages delivered but not yet acknowledged, shows whether workers are busy or stuck. Write latency, the time between a message being queued and the object appearing in the platform, shows what the analyst actually experiences. If depth is high and workers are fully busy, add workers. If depth is high but workers are idle or slow, the bottleneck is likely the search cluster or Redis, so check their load before adding anything.
Heavy import connectors and enrichment connectors have different timing needs, so they should not share a single path by default. A large scheduled feed can fill the queue with thousands of messages, and an enrichment request an analyst is waiting on then queues behind them. Decide the split by source volume and urgency: schedule bulk imports for quiet periods, and give enrichment its own worker capacity or queue assignment where your release supports it. Ask whether the connector list for your deployment has been reviewed for this, because the answer determines how many workers you need, not only how fast each connector runs.
Queue and memory settings must be confirmed against the release in use before you change them. Relevant items include worker concurrency and prefetch, RabbitMQ memory and disk alarm thresholds, worker memory limits, and the heap settings of the search cluster. The documented minimums for RabbitMQ (3.11 or later) and Redis (7.1 or later) are a floor for compatibility, not a tuning guide. Record your queue depth and write latency before and after each change, and repeat the check after every platform upgrade, since a release can change defaults that you depend on.
What drives OpenCTI connectors setup effort and how to keep each part small
This table lists the decisions that set how much work a connector rollout takes and the habit that keeps each one small. Read each row as a driver, then as the control you set before enabling anything. The main takeaway is that most effort comes from choices made before enablement and from ongoing review, not from the clicks needed to switch a connector on.
| Driver | Why it changes effort | How to keep it small |
|---|---|---|
| Number of sources | Each feed adds a configuration, a credential, a mapping check and an owner who watches it | Start with a short list of feeds tied to a named use case, and add others only after the first ones behave |
| Volume and update frequency per feed | High-volume or frequently updated feeds drive worker load, index growth and noisy objects to triage | Set import scope and schedule per feed, and confirm worker capacity against the documented sizing before turning on large feeds |
| Enrichment services and credentials | Each enrichment service needs its own key, rate limits, failure handling and rotation schedule | Limit enrichment to services analysts use, and standardize how credentials are stored, named and rotated |
| Number of environments | Development, test and production each need matching connector settings, secrets and worker pools | Keep one connector definition in version control and change only environment values between stages |
| Custom connector code | Bespoke code needs build, testing, upgrade checks against new platform releases and a named maintainer | Write custom connectors only where no existing connector fits, and reuse the same connector template for each one |
| Data sharing rules between organizations | Each rule decides which objects a connector may create, share or restrict, and must be checked after changes | Define sharing and marking rules once per organization pair, and review them when a new feed or partner is added |
| Compliance evidence for who connected what and when | Assessors expect a record of connector owners, approvals, changes and enablement dates that matches the running system | Keep one connector inventory with owner, source, credential reference, environment, approval and change history, and review it on a fixed schedule |
| Ongoing review after go-live | Feeds change, credentials expire and platform releases alter connector behavior, so setup work recurs | Schedule periodic reviews of enabled connectors, disable unused ones and record each change in the inventory |
How deduplication and retention keep OpenCTI connector data volume manageable
Connector data volume in OpenCTI is driven less by how many feeds you enable than by how much of their content overlaps. Two sources that describe the same malicious domain, file hash or threat actor will each push an observable, an indicator and relationships into the platform. If those objects do not share consistent identifiers and are not modeled the same way in STIX2, OpenCTI may store near-copies that look like separate intelligence to analysts and grow the Elasticsearch or OpenSearch index without adding value. Deduplication therefore starts with the connectors' output format, not with a cleanup job run later. Before you enable a second source for the same entity type, confirm in each connector's documentation how it generates identifiers and whether it merges with existing objects on import.
Several controls should be decided before the first production connector runs. Set a source priority so that when two connectors report conflicting scores, labels or descriptions for the same object, the team knows which one should win and which should be treated as corroboration. Use import filters to limit what each connector brings in, for example by indicator type, confidence threshold, label or age, so that a broad feed does not flood the graph with low-value indicators. Tag or mark the output of every connector with a dedicated label or marking definition, so the team can trace which source created an object and remove everything that source contributed if it proves noisy or is retired. Without this traceability, bulk cleanup becomes a manual investigation.
Retention and cleanup policy is the control that keeps volume stable over time. Indicators are time-bound by nature, so decide how long an indicator stays active after its last sighting, when it is revoked, and when it is removed from the platform altogether. Keep these rules separate for indicators, observables and reports, because analysts often need historical context for the latter long after the former have expired. Record the policy in writing, assign an owner, and check that the platform's own expiration and cleanup behavior matches it in your version. Confirm the exact settings and default behavior in the OpenCTI documentation for your release, since these features change between versions.
Test every source in a non-production instance before it reaches analysts. Run the connector against a representative time window, then measure how many objects it creates, how many duplicates it produces against existing data, how many relationships it adds, and how quickly the index grows. Check that the tags and markings appear as expected, that removal by source works, and that import filters behave as you intended. Repeat the test after a connector update, because changes to mapping logic can alter deduplication results. Ask your implementation partner to include this test in the written scope, and to document the observed results so the decision to enable a source rests on evidence rather than on the connector's description alone.
How to limit connector credentials, permissions and network reach
Each OpenCTI connector holds credentials, talks to the platform and may reach an external service, so each one widens your attack surface. The cards below cover how to scope identities, keep secrets out of configuration files, restrict outbound traffic, protect internal dependencies and record what each connector does.
Dedicated identity per connector
Create a separate platform user and API token for each connector instead of sharing one administrator token across all of them. Grant each identity only the capabilities its import, enrichment or export job needs, so a compromised connector cannot edit settings or read data outside its scope. Check the permissions of every identity after each connector change, because connectors added later tend to inherit broader rights by habit.
Secrets kept out of plain configuration
Connector API keys for external feeds and enrichment services, along with platform tokens, should come from a secrets store or injected environment variables rather than files committed to version control. Confirm with your platform team which secrets manager fits your environment, and confirm that container logs and startup output do not echo these values. Restrict who can read the secrets store, and record which connector owns each secret.
Rotation planned before it is needed
Plan a rotation schedule for every connector token and external API key before the first deployment, and record the owner and the steps for each one. Test rotation in a non-production instance so a changed key does not silently stop an import job or enrichment queue. Ask your vendors how long old keys remain valid after replacement, since that window determines how you sequence the change.
Outbound access limited to each feed
Allow each connector to reach only the external feed, MISP instance or enrichment service it actually uses, and only on the required ports. Enrichment connectors that call third-party lookups are the most common source of unexpected egress, so review their destinations before enabling them. Where a provider publishes fixed endpoints or address ranges, use those in egress rules and document the exceptions.
Dependencies isolated from connectors
Keep Elasticsearch or OpenSearch, Redis, RabbitMQ and object storage on a network segment that connectors cannot reach directly, with access allowed only from the platform and worker components that need it. Connectors should communicate with the platform through its API rather than writing to message queues or search indexes themselves. Verify this by testing connectivity from each connector host to each dependency port.
TLS and connector action logging
Encrypt connector traffic to the platform and to external services, and confirm certificate validation is enabled rather than disabled for convenience. Keep platform and worker logs that show which connector created, updated or deleted each object, and forward them to your central log store. Enterprise Edition activity monitoring and audit logs can help show which connector wrote what, if you have licensed that edition. Broader hardening guidance is covered on the OpenCTI security hardening page.
How connector setup changes in single node, HA and air-gapped builds
A single node build runs the platform, workers, connectors and dependencies on one host or one tightly bound set of hosts. Setup is simpler, but every connector shares the same RabbitMQ queues and the same worker pool, so connector load must be scheduled on purpose. The documented sizing guidance recommends at least one platform node for every 3 workers, which makes a large worker pool on a single node worth checking against that ratio.
- Schedule heavy imports: stagger large feed imports and full enrichment runs so they do not drain the same queues at the same time. Confirm how the release handles scheduling for each connector.
- Size workers to connector count: confirm how many worker processes the chosen release starts by default and how many connectors each worker can serve.
- Watch queue depth: confirm which RabbitMQ metrics the release exposes and set alerts on sustained backlog growth.
- Share memory deliberately: confirm how Elasticsearch or OpenSearch memory is divided between connector indexing and analyst queries.
Before go-live, run your largest expected import and check whether queue backlog, search responsiveness and the web interface stay acceptable for analysts.
In a high availability build, platform nodes are stateless, so several of them can serve the UI and GraphQL API behind a load balancer. Multiple workers consume connector messages from the shared RabbitMQ cluster, which spreads consumption across hosts. The hard part is connector instances: if the same connector runs on two hosts, both may attempt to write the same objects, so instance coordination has to be designed and tested before production use.
- Unique connector identity: confirm that each connector instance has its own identifier and whether a duplicate registration is refused, flagged or silently accepted.
- Scheduled runs: confirm whether a scheduled import runs once across the cluster or on every node that hosts the connector.
- Worker placement: spread workers across separate hosts or failure domains while keeping the platform-to-worker ratio in view.
- Clustered dependencies: confirm the clustering model for Elasticsearch or OpenSearch, Redis and RabbitMQ, and test connector behavior during a broker failover.
- Redelivery after failure: confirm whether messages in flight are redelivered after a worker crash and whether a redelivery can create duplicate writes.
Test a deliberate worker restart and a duplicate connector start in a non-production cluster, then record what the platform shows and what ends up in the data.
An air-gapped build has no route to the internet, so connectors that normally pull from external feeds or call hosted enrichment services need either an internal mirror or a controlled manual transfer. The team must also confirm, connector by connector, that each one can run without outbound access. Anything that silently assumes an external endpoint will fail quietly or retry forever, so the inventory should come before the installation.
- Feed inventory: list every connector, its upstream source and whether that source is an API, a file download or a hosted service.
- Mirror or transfer decision: choose, feed by feed, between an internal mirror and a transfer process, and name who approves each transfer.
- Enrichment services: identify internal equivalents for any hosted enrichment service, or disable the connectors that depend on it.
- Images and updates: confirm how connector images and dependency updates enter the isolated network and how their integrity is verified.
- License validation: for LTS builds, confirm how the license key is validated when the network cannot reach external services.
Close the review by testing each connector in the isolated network and confirming that no connector attempts an outbound connection during a full run.
How to confirm connectors work and fail safely before and after go-live
Before any connector feeds production, confirm that it imports what the source actually sends and that a failure in one connector cannot stall the rest of the platform. Start with a sample window, such as a few days of a feed you already know well. Compare the number of entities OpenCTI creates for each STIX object type against the count in the source export or the vendor's own dashboard. Expect differences from filtering, revoked indicators and skipped malformed objects, and record each one so the explanation exists before an analyst asks. Run the same comparison for a feed that overlaps another one, because overlap is where silent inflation starts. Next, check the relationships. For connectors that map to MITRE ATT&CK, open a sample of attack patterns and confirm that the "uses" and related relationships resolve to the expected techniques and that no objects are left pointing at placeholder or unknown references. Then test deduplication deliberately. Feed the same indicator or report through two connectors, or replay one file twice, and confirm that OpenCTI merges the objects under a single identity instead of creating copies. Check the result through the GraphQL API as well as the interface, since your later automation will read the API. Failure behavior needs its own test. For each enrichment connector that calls an external service, block that service at the network level in a test environment and submit a batch of observables. The expected result is that enrichment requests fail, the connector records errors and the queue keeps moving, so that imports and analyst work continue. If a failed enrichment stalls the import workers or fills RabbitMQ, the connector's configuration or your worker allocation needs to change before go-live. Ask your DeployOpen team or the connector documentation to confirm which timeout and retry settings apply to each connector. After go-live, monitor four signals: queue depth in RabbitMQ, connector run status and last successful run, error rates per connector, and growth in stored data. Queue depth that rises and does not recover indicates that workers are undersized or that a connector is producing more messages than expected. Data growth should track the volume you planned for in your sizing. Alert on sustained deviation rather than single spikes, and review the thresholds after the first few weeks, when the baseline becomes clear. Back up the connector configuration, including the list of enabled connectors, their scopes and their schedules, together with an inventory that records the owner, source, purpose and version of each one. Store both outside the platform. Rollback should be routine. To remove a misbehaving connector, disable it first so no new messages are produced. Then decide whether to delete the data it created or move it to a quarantine marking that analysts cannot use for decisions. Quarantine is usually safer because it keeps evidence for review. Restoring configuration and inventory is only useful if it has been tested, so rehearse the full restore in a non-production environment, timing each step and recording the gaps, before you depend on it.
Questions teams ask before hiring help with OpenCTI connectors
How much effort does OpenCTI connector setup take?
Effort depends on how many sources you connect, how much data each one sends, whether enrichment services are involved, and how many environments need the same setup. Each connector needs its configuration, credentials, a worker to process its messages, and a test run that confirms objects arrive correctly. One internal feed is a small job. A set of commercial feeds, MISP sharing and enrichment services across development, test and production is a much larger one. Deduplication rules and data volume tuning add review work from analysts. Ask any provider for a per-source breakdown in a written scope so you can see which items drive the total.
Can our own team set up OpenCTI connectors without a partner?
Yes, if the work has a named owner, a connector inventory and time to test. The owner makes decisions on feed priority and signs off on results. The inventory lists each source, its owner, its credentials, the data type it sends and its target environment, so nothing is configured twice. Testing time matters because connectors can add objects faster than analysts can review them. The platform dependencies must run first: Elasticsearch 8.0 or OpenSearch 2.9 or later, Redis 7.1 or later, RabbitMQ 3.11 or later, and S3-compatible storage. OpenCTI's documented sizing recommends at least one platform node for every 3 workers, so plan worker count from the connector list.
What do we need to provide before connector work starts?
Most of the work depends on people outside the platform team. Expect to provide source owners who can confirm each feed's terms and contacts, credentials for each source issued with the least access needed, data sharing rules that state which intelligence may be stored, enriched or shared outside your organization, and test access to a non-production platform. You also need a decision on which feeds matter to your analysts. Without that decision, the scope tends to grow to every available source. Agree in advance who approves credential issuance and who signs off test results, so delays do not come from waiting for answers.
How long does an OpenCTI connector project usually take?
No general duration applies, because the schedule depends on how many sources you connect and how long each one takes to test. The number of sources, whether enrichment services need separate accounts, how many environments need the same setup, and how quickly source owners respond all change the timeline. Ask for milestones in the written scope, with a testing window for each group of connectors. Most DeployOpen engagements are fixed-scope, with scope, deliverables and timelines agreed in writing before work starts. Confirm any duration you hear in a conversation against that document before you plan around it.
Does OpenCTI connector setup require the Enterprise Edition?
Check the current feature list before you assume either way. The Community Edition is licensed under Apache License 2.0, and the Enterprise Edition is licensed separately. Since OpenCTI 7.260224.0, defining and using authentication strategies, including SSO, is an Enterprise Edition feature. The Enterprise Edition also adds audit logs, playbooks, organization-based data segregation and priority intelligence requirements. If your connector plan depends on any of these, such as segregating data by team, confirm it against the edition you intend to run. LTS releases also require a specific LTS license key, so include that in the licensing check.
How do we keep OpenCTI data volume under control?
Start with a short list of sources and add feeds as analysts show a use for them. Each connector adds objects, relationships and background work, so volume grows faster than the source count suggests. Deduplication behavior decides whether the same indicator from several feeds becomes one object or several, so test it in a non-production environment before the first full import. Worker capacity sets how quickly messages clear from RabbitMQ. If queues keep growing, add workers or narrow what a connector imports. Set scope filters, such as import windows or object types, before the first full run, and monitor queue depth and platform load after each change.
Which OpenCTI connectors should we switch on first?
Start with sources that match a current analyst workflow. The MITRE ATT&CK connector is a common first choice for shared technique data, and MISP is a sensible early step if your organization already exchanges indicators through it. OpenCTI integrates with MISP and TheHive, so check whether those links fit your existing tooling. Prefer feeds with a named owner, a known license and clear sharing terms. Leave high-volume or enrichment-heavy sources for a second wave, once the first connectors have run cleanly. Confirm that each connector is available in the release you run, because connector availability changes with releases.
How DeployOpen scopes, builds and hands over OpenCTI connector setup
DeployOpen starts every OpenCTI connector engagement with a written scope, because the connector list drives most of the decisions that follow. The scope names each source (for example a MITRE ATT&CK import, a MISP instance, a commercial feed or an enrichment service), the OpenCTI environment it lands in, the connector type it needs (import, enrichment, export or stream), the account or API key it uses, and the acceptance checks that prove it works. Connectors that consume the same feed are grouped so duplicate data is planned for before anything is switched on. The scope also records who owns each source, since a connector is only as trustworthy as the feed behind it and someone must decide whether a source is allowed in at all.
The build follows a fixed sequence. DeployOpen first confirms the platform and its dependencies are running in the client's infrastructure: Elasticsearch or OpenSearch, Redis, RabbitMQ and S3-compatible storage at the versions OpenCTI documents. Worker capacity is then set for the planned connector count, with the documented guidance of at least one platform node for every three workers used as a starting point rather than a ceiling. Connectors are enabled one at a time, not in bulk. Each one is run against a test scope, its import volume and object counts are measured, and deduplication behavior is checked by re-running the same feed and confirming that existing entities are updated rather than duplicated. Only then is the connector moved to its scheduled interval. Connectors that produce noisy or low-value data are either filtered or left off, and the decision is recorded in the scope.
Handover is a set of documents and results the client keeps. These include the connector inventory (name, source, connector type, schedule, owning team and the worker pool it runs on), runbooks for enabling, disabling and re-running each connector and for diagnosing a stalled queue, and a credential register listing every API key or service account, where it is stored, who can rotate it and when it was last changed. The verification results show each acceptance check with the date it was run and the outcome. Clients should ask for the credential register to hold references to secret stores, not the secrets themselves, and should confirm that the runbooks name the people who can approve a new source.
Ongoing work is optional and usually sold as a retainer. Common retainer items are monitoring of connector health, rotation of credentials, review of data volume as new sources are added, and testing of connectors against new OpenCTI releases before an upgrade. Whether a retainer is needed depends on how many sources the team expects to add and how quickly the platform will change. DeployOpen's work is normally fixed scope: scope, deliverables and timelines are agreed in writing before the build starts, and a quote follows from that written scope. Clients should ask for the quote to list each connector, each acceptance check, each handover document and any retainer hours separately, so the cost of each source is visible when they decide what to add next.

