Concelier CISA ICS Connector - Operations Runbook
This runbook is for operators who configure, validate, and operate the CISA Industrial Control Systems (ICS) connector (source:ics-cisa:*) in a Stella Ops Concelier instance. The connector defaults to CISA’s public ICS RSS feeds. GovDelivery remains available for operators that need the older personalised-topic feeds or an internal mirror that preserves that shape.
1. Feed Mode
Default mode:
usePublicFeeds: truepublicFeedUris:https://www.cisa.gov/cybersecurity-advisories/ics-advisories.xmlhttps://www.cisa.gov/cybersecurity-advisories/ics-medical-advisories.xml
GovDelivery mode is optional. Use it only when an operator has a confirmed personalised subscription code or when a local relay exposes GovDelivery-compatible topic feeds:
- Create a service mailbox reachable by the Ops crew (shared mailbox recommended).
- Browse to
https://public.govdelivery.com/accounts/USDHSCISA/subscriber/newand subscribe the mailbox to the following GovDelivery topics:USDHSCISA_16— ICS-CERT advisories (legacy numbering:ICSA-YY-###).USDHSCISA_19— ICS medical advisories (ICSMA-YY-###).USDHSCISA_17— ICS alerts (IR-ALERT-YY-###) for completeness.
- Complete the verification email. After confirmation, note the personalised subscription code included in the “Manage Preferences” link. It has the shape
code=AB12CD34EF. - Store the code in the shared secret vault (or Offline Kit secrets bundle) as
concelier/sources/icscisa/govdelivery/code.
ℹ️ GovDelivery does not expose a one-time API key; the personalised code is what authenticates the RSS pull. Never commit it to git.
2. Feed Validation
Use the following commands to confirm the selected feed mode is reachable before wiring it into Concelier.
Public mode:
curl -H "User-Agent: StellaOpsConcelier/ics-cisa" \
"https://www.cisa.gov/cybersecurity-advisories/ics-advisories.xml"
GovDelivery mode (substitute <CODE> with the personalised value):
curl -H "User-Agent: StellaOpsConcelier/ics-cisa" \
"https://content.govdelivery.com/accounts/USDHSCISA/topics/ICS-CERT/feed.rss?format=xml&code=<CODE>"
If the endpoint returns HTTP 200 and an RSS payload, archive the sample response (and any attachment URL schema) under docs/artifacts/icscisa/ as the connector’s document inventory. In GovDelivery mode, HTTP 403 or 406 usually means the subscription was not confirmed or the code was mistyped.
3. Configuration Snippet
Add the connector configuration to concelier.yaml (or equivalent environment variables):
concelier:
sources:
icscisa:
usePublicFeeds: true
publicFeedUris:
- "https://www.cisa.gov/cybersecurity-advisories/ics-advisories.xml"
- "https://www.cisa.gov/cybersecurity-advisories/ics-medical-advisories.xml"
requestDelay: "00:00:01"
failureBackoff: "00:05:00"
GovDelivery override:
concelier:
sources:
icscisa:
usePublicFeeds: false
govDelivery:
code: "${CONCELIER_ICS_CISA_GOVDELIVERY_CODE}"
topics:
- "USDHSCISA_16"
- "USDHSCISA_19"
- "USDHSCISA_17"
rssBaseUri: "https://content.govdelivery.com/accounts/USDHSCISA"
requestDelay: "00:00:01"
failureBackoff: "00:05:00"
Environment variable example:
export CONCELIER_SOURCES_ICSCISA_GOVDELIVERY_CODE="AB12CD34EF"
Concelier automatically registers the public feed, GovDelivery, detail-page, and configured attachment hosts with the Source.Common HTTP allow-list when the connector assembly is loaded.
Optional tuning keys (set only when needed):
proxyUri— HTTP/HTTPS proxy URL used when Akamai blocks direct pulls.requestVersion/requestVersionPolicy— override HTTP negotiation when the proxy requires HTTP/1.1.enableDetailScrape— toggle HTML detail fallback (defaults to true).captureAttachments— collect PDF attachments from detail pages (defaults to true).detailBaseUri— alternate host for detail enrichment if CISA changes their layout.
4. Seeding Without Live RSS
If public egress or GovDelivery credentials are not available, populate the connector with the community CSV dataset before enabling the live fetch:
- Run
./devops/tools/fetch-ics-cisa-seed.sh(or.ps1) to download the latestCISA_ICS_ADV_*.csvfiles intosrc/__Tests/__Datasets/seed-data/ics-cisa/. - Copy the CSVs (and the generated
.sha256files) into your Offline Kit staging area so they ship alongside the other feeds. - Import the kit as usual. The connector can parse the seed data for historical context; fresh advisories require either public CISA RSS egress or a configured GovDelivery/internal mirror feed.
- Once the live path is available, update
concelier:sources:icscisaand re-triggersource:ics-cisa:fetch.
The CSVs are licensed under ODbL 1.0 by the ICS Advisory Project. Preserve the attribution when redistributing them.
5. Integration Validation
- Ensure the selected public/GovDelivery/mirror feed is reachable and restart the Concelier workers.
- Run a dry-run fetch/parse/map chain:
stella db fetch --source ics-cisa --stage fetch stella db fetch --source ics-cisa --stage parse stella db fetch --source ics-cisa --stage map - Confirm logs contain
ics-cisa detail fetchentries and that new documents/DTOs include attachments (seedocs/artifacts/icscisa). Canonical advisories should expose PDF links asreferences.kind == "attachment"and affected packages should surfaceprimitives.semVer.exactValuefor single-version hits. - If Akamai blocks direct fetches, set
concelier:sources:icscisa:proxyUrito your allow-listed egress proxy and rerun the dry-run.
6. Rotation & Incident Response
- Review GovDelivery access quarterly. Rotate the personalised code whenever Ops changes the service mailbox password or membership.
- Revoking the subscription in GovDelivery invalidates the code immediately; update the vault and configuration in the same change.
- If the code leaks, remove the subscription (
https://public.govdelivery.com/accounts/USDHSCISA/subscriber/manage_preferences?code=<CODE>), resubscribe, and distribute the new value via the vault.
7. Offline Kit Handling
For GovDelivery mode, include the personalised code in offline-kit/secrets/concelier/icscisa.env:
CONCELIER_SOURCES_ICSCISA_GOVDELIVERY_CODE=AB12CD34EF
The Offline Kit deployment script copies this file into the container secret directory mounted at /run/secrets/concelier. Ensure permissions are 600 and ownership matches the Concelier runtime user.
8. Telemetry & Monitoring
The connector emits metrics under the meter StellaOps.Concelier.Connector.Ics.Cisa. They allow operators to track Akamai fallbacks, detail enrichment health, and advisory fan-out.
icscisa.fetch.*– counters forattempts,success,failures,not_modified, andfallbacks, plus histogramicscisa.fetch.documentsshowing documents added per topic pull (tags:concelier.source,icscisa.topic).icscisa.parse.*– counters forsuccess/failuresand histogramsicscisa.parse.advisories,icscisa.parse.attachments,icscisa.parse.detail_fetchesto monitor enrichment workload per feed document.icscisa.detail.*– counterssuccess/failuresper advisory (tagged withicscisa.advisory) to alert when Akamai blocks detail pages.icscisa.map.*– counters forsuccess/failuresand histogramsicscisa.map.references,icscisa.map.packages,icscisa.map.aliasescapturing canonical fan-out.
Suggested alerts:
increase(icscisa.fetch.failures_total[15m]) > 0orincrease(icscisa.fetch.fallbacks_total[15m]) > 5— sustained Akamai or proxy issues.increase(icscisa.detail.failures_total[30m]) > 0— detail enrichment breaking (potential HTML layout change).histogram_quantile(0.95, rate(icscisa.map.references_bucket[1h]))trending sharply higher — sudden advisory reference explosion worth investigating.- Keep an eye on shared HTTP metrics (
concelier.source.http.*{concelier.source="ics-cisa"}) for request latency and retry patterns.
9. Related Operations
- Advisory source credential entry — shared workflow for storing the GovDelivery code and other source secrets.
- Mirror operations — staging and verifying mirrored feeds for offline and air-gapped deployments.
