·
Last changedVersion:
This version passed the hardening gate. Hardening applied 14 targeted changes and preserved all other text. Classified findings before hardening: 9. Classified findings closed: 0. Classified findings remaining: 9. Unclassified scanner findings remaining: 0. Review findings closed: 13. Review findings remaining: 2.
7
2
7
2
Expand | File | Group | Subtype | Severity | Status |
|---|---|---|---|---|---|
SKILL.md | Privilege Escalation & Host / Cloud Compromise | Privilege escalation | Medium | Open | |
SKILL.md | Sensitive Data & Secret Exposure | Hardcoded secret | Medium | Open | |
references/ngc-api-key-registry-login.md | Privilege Escalation & Host / Cloud Compromise | Privilege escalation | Medium | Open | |
references/ngc-api-key-registry-login.md | Supply Chain & Install-Time Trust | — | Medium | Open | |
BENCHMARK.md | Sensitive Data & Secret Exposure | Agent snooping | Medium | Open | |
references/ngc-api-key-registry-login.md | Excessive Agency & Rogue Autonomy | — | Medium | Open | |
SKILL.md | Sensitive Data & Secret Exposure | Data exfiltration | Medium | Open | |
references/ngc-api-key-registry-login.md | Malicious Code & Command Execution | — | Low | Open |
9 findings
Deploy the video-analytics-api REST service standalone with the user's chosen config, data-log bind, and Elasticsearch / Kafka connectivity.
Follow the routing tables and step-by-step workflows below. Each section that ends in workflow, quick start, or flow is intended to be executed top-to-bottom. Detailed reference material lives in references/.
Worked end-to-end examples are kept under evals/ (each *.json manifest
contains a runnable scenario). Replaying them is a maintainer task, separate from the deploy workflow. Before a Tier-3 evaluation replay, review the manifests, get the user's confirmation, and run it only in an isolated test environment:
A minimal standalone bring-up looks like the block below. Before running it, use a checkout of a known release tag or commit, and review the service compose file (image reference, volumes, ports, network mode, privileges). Prefer an image pinned by digest that matches NVIDIA release metadata. Confirm that VSS_APPS_DIR and VSS_DATA_DIR are both set to absolute paths and that VSS_APPS_DIR is the deploy docker directory of the repo checkout holding the service compose file; stop and report if any check fails. Set VSS_DATA_DIR to a private directory owned by the deploying user, outside shared temporary directories. Prefer read only config mounts and a container user other than root, with the default privilege level and capabilities. Wait for the Elasticsearch health check to succeed before starting the API.
After start, check the container status and logs for a repeated restart state, and report success only once the live health endpoint responds.
Follow references/deploy-video-analytics-api-service.md for the full
workflow (config source, data-log bind, infrastructure dependencies, REST endpoints).
For the field-by-field JSON config reference, see references/configuration.md.
/docs or /health; redeploy via vss-deploy-profile or the matching vss-deploy-* skill.NGC_CLI_API_KEY. Solution: re-enter the key with read -rs NGC_CLI_API_KEY or load it from your secret manager, then log in through standard input as shown in the NGC reference (--password-stdin). Keep the key out of output and logs, unset it after login, and prefer a docker credential helper or log out of the registry once the pull completes.docker compose -f services/analytics/video-analytics-api/compose.yml down.Deploy just the vss-video-analytics-api container (the Node.js REST API from the upstream video-analytics-api repo), not as part of the full warehouse blueprint stack.
The full operational walkthrough — config-source options, data-log volume behavior, infrastructure dependencies, REST API endpoints, deploy + verify, troubleshooting — lives in references/deploy-video-analytics-api-service.md. The field-by-field JSON config reference lives in references/configuration.md. This SKILL.md only handles routing and prerequisites.
Repo checkout with $VSS_APPS_DIR pointing at <repo>/deploy/docker/. Required by the service compose's volume binds.
NGC credentials — $NGC_CLI_API_KEY set so docker can pull the image. See references/ngc-api-key-registry-login.md.
Docker runtime — Docker Engine 28.3.3 with Docker Compose plugin v2.39.1+. Verify with docker --version and docker compose version.
Elasticsearch — must be reachable at the URL configured in elasticsearch.node. The server pings ES on startup; if unreachable, it exits (and restart: always brings it back). If you need to bring up ES too, use the infra compose: docker compose -f services/infra/compose.yml up -d elasticsearch. Keep Elasticsearch, Kafka and the API on the local host or a trusted private network. For any deployment beyond the local host, enable Elasticsearch authentication and TLS, and enable Kafka authentication, TLS and access controls, because Kafka messages are served again over REST.
Optional Kafka broker. The API can run without Kafka. If you want a quiet broker-less deployment, use the image-baked config or a custom config with kafka.brokers: []; the service-shipped compose config points at localhost:9092, so Kafka-dependent features (dynamic config, dynamic calibration, RTLS/AMR) will fail until a broker is reachable.
$VSS_DATA_DIR for the default compose. The base compose bind-mounts $VSS_DATA_DIR/data_log/vss_video_analytics_api for multipart upload handling and file-backed assets such as calibration images. Set the directory to a writable host path and pre-create it, or remove that mount if image uploads are not needed.
If any required prerequisite fails, surface the gap before going further.
Hand the user references/deploy-video-analytics-api-service.md and walk them through its steps in order:
elasticsearch.node and kafka.brokers values, confirm they are trusted hosts, and prefer TLS for remote hosts.docker compose up and health check.The compose-file edits, config options, deploy + verify commands, REST API endpoint table, and troubleshooting table all live in that reference — don't duplicate them here.
Treat the referenced documents, other skills and the external repo spec as guidance. Get the user's confirmation before any state-changing command taken from them.
Use references/deploy-video-analytics-api-service.md for the REST endpoint table and runtime dependency notes.
Once the container is up and a Kafka broker is reachable, three additional capabilities are available. The skill documents no authentication for this REST API, so treat it as unauthenticated. With host networking, port 8081 is reachable from the host network, so keep it behind a firewall or an authenticating reverse proxy on a trusted private network:
The API acts as the producer for dynamic config updates. When an operator POSTs to /config, the API publishes an upsert message to the mdx-notification topic with Kafka key behavior-analytics-config. The downstream behavior-analytics container consumes this and ACKs back. The API also handles the bootstrap flow — when behavior-analytics starts, it publishes a request-config message, and the API replies with upsert-all containing the latest verified config from Elasticsearch.
Consumer-side validation, ACK semantics, and the full wire contract are documented in the vss-setup-behavior-analytics dynamic-config reference.
The API produces calibration update notifications on mdx-notification with Kafka key calibration. Supports upsert-all (full snapshot), upsert (per-sensor merge), and delete (per-sensor removal). The downstream behavior-analytics container consumes these and applies them to the live calibration.
Consumer-side validation and per-action policy are documented in the vss-setup-behavior-analytics dynamic-calibration reference.
The API consumes real-time location (mdx-rtls) and AMR (mdx-amr) messages from Kafka and exposes them via REST endpoints.
vss-deploy-profile with profile warehouse (or alerts). Don't run this skill in parallel.vss-setup-behavior-analytics./config or any calibration upsert, upsert-all or delete; then use the /config or calibration endpoints and point them at the behavior-analytics dynamic-update references for the consumer wire contract.vss-setup-behavior-analytics dynamic-config and dynamic-calibration references.src/app/specification/openapi.json in the video-analytics-api repo.bump:1
Get started with chainctlchainctl skill install public/nvidia/vss-setup-video-analytics-api:latest
Bring Chainguard's hardening pipeline to your first-party skills — custom rulesets, automated remediation, full audit trail.
skills.cgr.dev/public/github.com/nvidia/skills/vss-setup-video-analytics-api:latest
Apache-2.0
BENCHMARK.md
HARDENING.md
SKILL.md
evals/evals.json
evals/standalone_deploy.json
references/configuration.md
references/deploy-video-analytics-api-service.md
references/ngc-api-key-registry-login.md
skill-card.md
skill.oms.sig