enforce-slsa — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited enforce-slsa (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 SLSA Verification (SlsaVerification) step to an existing Harness pipeline. The step verifies SLSA provenance attestations (when enabled) and optionally evaluates OPA policy sets against provenance data.
This skill only works with existing pipelines — do not create standalone verification-only pipelines.
Prerequisites: SLSA provenance must already exist for the artifact (typically from a provenance step via /generate-slsa — UI label SLSA Generation). Optional policy sets for provenance enforcement (/create-policy, harness_list policy_set).
Supported stages: CI, CD (Deployment), and Security. CD requires a containerized step group. Unlike SBOM enforcement, CI and CD both use `SlsaVerification` (no separate CD step type).
Guide the user through a step-by-step interactive wizard (same UX as /generate-slsa):
references/interactive-wizard-flow.mdreferences/slsa-verification-step.mdskills/generate-slsa/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.provenance (SLSA Generation) and connectors.provenance step exists (or identifier: slsageneration), reuse its source (map repo → image_path, lowercase → PascalCase types).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).
Full phase prompts: references/interactive-wizard-flow.md.
| Phase | Breadcrumb | Action |
|---|---|---|
| 0 | Pipeline | AskQuestion: pipeline URL ready? |
| 1 | Pipeline | Collect URL → harness_get |
| 2 | Pipeline | Display structure; note missing provenance (SLSA Generation) step |
| 3 | Placement | AskQuestion: after generation, CD before deploy, etc. |
| 3b | Placement (CD) | Service, env, infra, step group if new Deploy stage |
| 4 | Source | Infer from generation or pick registry tile |
| 5 | Source | Registry provider (Third-Party only) |
| 6 | Details | Connector (skip if obvious) |
| 7 | Details | Image / image_path (default from generation) |
| 8 | Verify | AskQuestion: verify attestation method |
| 9 | Policy | AskQuestion: policy set(s) or skip |
| 10 | Submit | AskQuestion: confirm pipeline update |
After Phase 10 confirm → insert step, harness_update, then provide summary (do not run the pipeline).
| Stage type | Step type | Placement notes |
|---|---|---|
CI | SlsaVerification | After provenance / slsageneration in the same stage |
Deployment | SlsaVerification | Containerized step group; before deploy |
Security | SlsaVerification | After generation when artifact is in registry |
If no Deployment stage and user chose CD verify:
No CD Deploy stage yet. We can add a Deployment stage with a containerized step group and place SLSA Verification before deploy.
Run Phase 3b (service, environment, infrastructure, stepGroupInfra) — mirror /generate-slsa Phase 3b. Use skills/generate-slsa/references/cd-containerized-step-group.md with SlsaVerification.
#### Check prerequisites
type: provenance (SLSA Generation) or user confirms provenance exists.harness_list(resource_type="policy_set"). If user wants policyenforcement and none exist, direct to /create-policy before continuing.
#### Extract context from pipeline YAML
From provenance step (if present — also match identifier: slsageneration), copy and transform:
| Generation | Verification |
|---|---|
source.type: docker | source.type: Docker |
source.spec.repo | source.spec.image_path |
source.spec.connector | source.spec.connector |
spec.attestation | matching verify_attestation (private → public key for keybased) |
#### Generate SLSA verification step YAML
CI / Security — Docker Registry, keyless verify:
- step:
identifier: slsaverification
name: SLSA Verification
type: SlsaVerification
spec:
source:
type: Docker
spec:
connector: lavakush07
image_path: lavakush07/easy-buggy-app:blog
verify_attestation:
type: keyless
spec:
oidcProvider: harness
timeout: 15mKey-based verify (generation used keybased + private key):
verify_attestation:
type: keybased
spec:
publicKey: account.cosign_public_keyIf API validation rejects flat keyless / keybased, retry with nested cosign wrapper — see references/slsa-verification-step.md.
Policy enforcement (Advanced tab — step-level enforce):
enforce:
policySets:
- slsa_provenance_rulesNo attestation verify (policy-only): omit verify_attestation.
CD Deploy — same step type inside containerized stepGroup; use <+artifact.image> for image_path when verifying service artifacts.
Full provider mapping: references/slsa-verification-step.md.
#### Insert step into pipeline YAML
slsageneration when possible.slsaverification (use slsaverification_cd in CD when CI already has one).#### 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, check PascalCase source.type, image_path vs repo, and verify_attestation shape (prefer flat keyless; fallback nested cosign).
#### Provide summary
Report the results to the user (same pattern as /configure-repo-scan — do not execute the pipeline):
## SLSA Verification Configured
**Pipeline:** <pipeline_name>
**Step:** SLSA Verification (SlsaVerification)
**Location:** Stage "<stage_name>", <position>
**Source:** Docker — <connector> — <image_path>
**Verify attestation:** Keyless (Harness OIDC) — or as configured
**Policy sets:** <list or none>
**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 SLSA Verification step in Pipeline Studio to adjust Advanced settings.
### Next Steps
1. Run the pipeline via `/run-pipeline` to verify SLSA verification executes successfully
2. If the run fails, diagnose with `/debug-pipeline`
3. View verification outcome on the execution **Supply Chain** tab
4. If **Failed** due to policy deny, tune policies via `/create-policy`
5. Add generation with `/generate-slsa` if provenance 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-slsa
Add SLSA verification after slsa-generation — keyless verify, policy set slsa_prod_rules/enforce-slsa
Verify SLSA in deploy stage before K8s rolling deploy for easy-buggy-app:blog/enforce-slsa
Verify SLSA with public key account.cosign_public_key — same image as generation steptype: provenance or identifier: slsageneration; map repo → image_path, lowercase → PascalCase types.Docker) — generation uses lowercase (docker).verifyAttestation). Prefer flat type: keyless + oidcProvider (same shape as generation attestation).spec.policy like SBOM enforcement.policy_set via MCP — do not invent identifiers.skills/generate-slsa/references/cd-containerized-step-group.md./run-pipeline after configuration (same as /configure-repo-scan)./generate-slsa (generate) and /create-policy (OPA rules)./generate-slsa first with attestation enabled (type: provenance in YAML)..att in registry or provenance in SCS Artifacts.provenance steps — not SlsaGeneration (API uses provenance).keyless vs keybased).image_path as generation repo field.enforce.policySets.source.type must be PascalCase for verification (Docker, not docker).image_path, not repo.verify_attestation: use flat type: keyless + spec.oidcProvider: harness — not nested cosign unless API rejects flat shape.DUPLICATE_IDENTIFIER — rename slsaverification.stepGroup with stepGroupInfra — not top-level execution.steps.skills/generate-slsa/references/cd-containerized-step-group.md./run-pipeline to execute and /debug-pipeline to diagnose failures/run-pipeline or Harness UI RunCONNECTOR_NOT_FOUND — verify connector in Project Settings.ACCESS_DENIED — PAT needs pipeline edit and policy read permissions.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.