enforce-sbom — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited enforce-sbom (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Add an SBOM Policy Enforcement (SscaEnforcement / CdSscaEnforcement) step to an existing Harness pipeline. The step verifies SBOM attestations (when enabled) and evaluates SBOM OPA policy sets against the artifact's bill of materials.
This skill only works with existing pipelines — do not create standalone enforcement-only pipelines.
Prerequisites: An SBOM must already exist for the artifact (typically from SscaOrchestration via /create-sbom or SBOM ingestion). SBOM policy sets must exist (/create-policy).
Supported stages: CI, CD (Deployment), and Security — same as SBOM Orchestration. CD requires a containerized step group with container-based execution.
Guide the user through a step-by-step interactive wizard (same UX as /create-sbom):
references/interactive-wizard-flow.mdreferences/sbom-enforcement-step.mdskills/create-sbom/references/cd-containerized-step-group.mdAskQuestion when available; otherwise numbered options with (Recommended).Pipeline · Placement · Source · Details · Verify · Policy · Submit
harness_get before placement/source questions.SscaOrchestration and connectors.source and image.harness_update only after user confirms.harness_update, provide a configuration summary andpoint the user to /run-pipeline to execute. Do not call harness_execute, poll executions, or run harness_diagnose in this skill (same pattern as /configure-repo-scan).
cd_before_deploy, add_cd_stage, or similar) on a CI-only pipeline, do not reject or force CI-only. Run Phase 3b to add a Deployment stage with a containerized step group and CdSscaEnforcement before deploy (same prerequisites as /create-sbom).Full phase prompts: references/interactive-wizard-flow.md.
| Phase | Breadcrumb | Action |
|---|---|---|
| 0 | Pipeline | AskQuestion: pipeline URL ready? |
| 1 | Pipeline | Collect URL or org/project/id → harness_get |
| 2 | Pipeline | Display structure; note missing SscaOrchestration |
| 3 | Placement | AskQuestion: after SBOM step, CD before deploy, add CD stage, etc. |
| 3b | Placement (CD only) | If no Deployment stage: service, environment, infra, stepGroupInfra — then add stage + CdSscaEnforcement |
| 4 | Source | AskQuestion: infer from pipeline or pick tile |
| 5 | Source | AskQuestion: registry provider (Third-Party only) |
| 6 | Details | Connector (skip if obvious) |
| 7 | Details | Image / repo (free text; default from orchestration) |
| 8 | Verify | AskQuestion: verify attestation method |
| 9 | Policy | AskQuestion: policy set(s) — harness_list policy_set |
| 10 | Submit | AskQuestion: confirm pipeline update |
After Phase 10 confirm → insert step, harness_update, then provide summary (do not run the pipeline).
| Stage type (YAML) | Step type | Placement notes |
|---|---|---|
CI | SscaEnforcement | After SscaOrchestration in the same stage |
Deployment | CdSscaEnforcement | Containerized step group; before deploy |
Security | SscaEnforcement | After SBOM generation when artifact is known |
Use when Placement targets CD (cd_before_deploy, add_cd_stage, or an existing Deployment stage).
#### Phase 2 — CI-only pipeline
If there is no type: Deployment stage, note it in the structure table and add:
This pipeline has no CD Deploy stage yet. You can still enforce SBOM in CD — we will add a Deployment stage with a containerized step group and place SBOM Policy Enforcement before the deploy step.
Do not tell the user CD is invalid for this pipeline. If they chose CD in Phase 3, continue to Phase 3b.
#### Phase 3b — CD prerequisites (no Deploy stage yet)
Mirror /create-sbom Phase 3b — one topic per turn:
| Step | Action |
|---|---|
| Service | harness_list (service) → serviceRef |
| Environment | harness_list (environment) → environmentRef |
| Infrastructure | harness_list (infrastructure, params: { environment_id }); create if missing per /create-infrastructure |
| Step group infra | K8s connector + namespace for stepGroupInfra |
| Deploy step | Default K8sRollingDeploy for Kubernetes services |
| CI enforcement | Optional: keep CI SscaEnforcement and add CD enforce_sbom_cd, or CD-only — confirm in Phase 10 |
Append a Deploy stage with containerized group containing CdSscaEnforcement before K8sRollingDeploy. Full YAML patterns: skills/create-sbom/references/cd-containerized-step-group.md (use CdSscaEnforcement instead of SscaOrchestration).
CD image / source: prefer <+artifact.image> from the service primary artifact; reuse connector from CI SscaOrchestration or service artifact source. Verify attestation must match the CI generation step (e.g. keyless Harness OIDC).
Step id: use enforce_sbom_cd when CI already has enforce_sbom.
#### Check prerequisites
SscaOrchestration (or user confirms SBOM was ingested).harness_list(resource_type="policy_set", org_id, project_id). If empty, direct user to /create-policy (SBOM entity, onstep event) before continuing.#### Extract context from pipeline YAML
From SscaOrchestration (if present), copy:
spec.source (type + spec)spec.attestation (use matching verifyAttestation when user chooses verify)connector / image / registryFrom build/push steps: connectorRef in BuildAndPushDockerRegistry, Run, Plugin.
#### Generate SBOM enforcement step YAML
Use only wizard answers. Default: verify SBOM + keyless Harness OIDC + policy sets from Phase 9.
CI / Security — `SscaEnforcement` (Third-Party Docker):
- step:
identifier: enforce_sbom
name: SBOM Policy Enforcement
type: SscaEnforcement
spec:
source:
type: docker
spec:
connector: <docker_registry_connector>
image: <org>/<repo>:<tag>
verifyAttestation:
type: cosign
spec:
type: keyless
spec:
oidcProvider: harness
policy:
policySets:
- <sbom_policy_set_identifier>
timeout: 15mPolicy sets only (UI Policy Configuration):
policy:
policySets:
- sbom_license_allowlist
- sbom_deny_criticalNo verification (when user unchecks Verify SBOM):
policy:
policySets:
- <sbom_policy_set_identifier>Omit verifyAttestation.
Repository source — add overrideConnectorRef on spec (see reference doc).
CD `Deployment` — use CdSscaEnforcement inside a containerized stepGroup (stepGroupInfra); include spec.infrastructure matching that group (see references/sbom-enforcement-step.md and skills/create-sbom/references/cd-containerized-step-group.md). When adding a new Deploy stage, place enforcement in stepGroup.steps before the deploy step — not at top-level execution.steps.
Source types (docker, ecr, gcr, gar, acr, har, repository) match /create-sbom — see skills/create-sbom/references/sbom-orchestration-step.md for provider-specific source.spec fields.
Full UI mapping: references/sbom-enforcement-step.md.
#### Insert step into pipeline YAML
generate_sbom / SscaOrchestration when possible.enforce_sbom (rename if duplicate).spec.execution.steps list as orchestration.#### Update pipeline via MCP
harness_update
resource_type: pipeline
resource_id: <pipeline_identifier>
org_id: <organization>
project_id: <project>
body: { yamlPipeline: "<updated pipeline YAML>" }On validation errors, read the API message, fix fields (often verifyAttestation shape or policy.policySets), retry.
#### Provide summary
Report the results to the user (same pattern as /configure-repo-scan — do not execute the pipeline):
## SBOM Policy Enforcement Configured
**Pipeline:** <pipeline_name>
**Step:** SBOM Policy Enforcement (SscaEnforcement | CdSscaEnforcement)
**Location:** Stage "<stage_name>", <position>
**Source:** <type> — <connector/registry> — <image or repo>
**Verify attestation:** Keyless (Harness OIDC) — or as configured
**Policy sets:** <list>
**Pipeline URL:** https://app.harness.io/ng/account/<account_id>/module/ci/orgs/<org_id>/projects/<project_id>/pipelines/<pipeline_id>/pipeline-studio/
**Note:** Review the SBOM Policy Enforcement step in Pipeline Studio to adjust Advanced settings.
### Next Steps
1. Run the pipeline via `/run-pipeline` to verify enforcement executes successfully
2. If the run fails, diagnose with `/debug-pipeline`
3. View policy evaluation on the execution **Supply Chain** tab and Artifacts → **Policy Violations**
4. If **Failed** due to policy deny, tune policies via `/create-policy` (entity-sbom.md)
5. Add or adjust SBOM generation with `/create-sbom` if SBOM was missing
6. Automate with `/create-trigger`CD pipelines: note in the summary if runtime inputs (service artifact, environment, infrastructure) will be required at run time — the user provides those via /run-pipeline or Harness UI Run.
/enforce-sbom
Add SBOM policy enforcement to backend-api pipeline after Generate SBOM — keyless verify, policy set sbom_prod_rules/enforce-sbom
Enforce SBOM policies in deploy stage before K8s rolling deploy for myapp:v7/enforce-sbom
Use defaults — same image as SBOM orchestration step, Harness OIDC verifyreferences/interactive-wizard-flow.md.SscaOrchestration source + image when present — avoids drift from generation step.policy_set via MCP before Phase 9 — do not invent policy set identifiers.CdSscaEnforcement only in containerized step groups./run-pipeline after configuration (same as /configure-repo-scan)./create-sbom (generate) and /create-policy (OPA rules)./create-sbom first, or ingest SBOM per Harness docs.harness_list(resource_type="policy_set") at project/org/account scope.package sbom) and a policy set with onstep via /create-policy.skills/create-policy/references/entity-sbom.md).source.spec.image as SscaOrchestration.CdSscaEnforcement requires spec.infrastructure and containerized execution.stepGroup with stepGroupInfra — not top-level execution.steps on a Deployment stage.skills/create-sbom/references/cd-containerized-step-group.md.SscaOrchestration or ingestion); enforcement in CD uses the same artifact image/expression.DUPLICATE_IDENTIFIER — rename enforce_sbom.policy.policySets — use policy set identifiers, not display names.verifyAttestation shape — align with upstream attestation; see reference doc.CONNECTOR_NOT_FOUND — verify connector in Project Settings.ACCESS_DENIED — PAT needs pipeline edit and policy read permissions./run-pipeline to execute and /debug-pipeline to diagnose failures/run-pipeline or Harness UI Run~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.