This specification is maintained by the AgentRules Working Group. Have enhancements or want to claim maintainership?Submit Specification →
securitycritical PriorityID: sigstore-ephemeral-oidc-slsa3-attestation-invariant

Sigstore Ephemeral OIDC Workload Identity & SLSA Level 3 Provenance Invariant

Mandates keyless, short-lived OIDC-backed Fulcio certificates and Rekor transparency log entries for all containerized build artifacts emitted from isolated CI/CD workflows. Prohibits static long-lived private keys, service account secrets, and unverified build provenance in favor of non-forgeable SLSA Level 3 predicate generation. Guarantees immutable supply chain traceability from source commit SHA to container digest without secret leakage risks.

Prohibited Anti-Pattern: Static Secret Signing and Unattested Container Emission in CI Pipelines

Export Ready-to-Drop Configuration

Select format below to copy code or download file directly.

---
description: Sigstore Ephemeral OIDC Workload Identity & SLSA Level 3 Provenance Invariant - Mandates keyless, short-lived OIDC-backed Fulcio certificates and Rekor transparency log entries for all containerized build artifacts emitted from isolated CI/CD workflows. Prohibits static long-lived private keys, service account secrets, and unverified build provenance in favor of non-forgeable SLSA Level 3 predicate generation. Guarantees immutable supply chain traceability from source commit SHA to container digest without secret leakage risks.
globs: .github/workflows/**/*.{yml,yaml}, scripts/release/**/*.{ts,js}, build/ci/**/*.{ts,js}, deploy/**/*.{yml,yaml}
alwaysApply: true
verified_by: "agentrules.org"
license: "CC-BY-4.0"
source: "https://agentrules.org/rules/sigstore-ephemeral-oidc-slsa3-attestation-invariant"
---

# Sigstore Ephemeral OIDC Workload Identity & SLSA Level 3 Provenance Invariant

> **Severity**: CRITICAL | **Category**: security
> **Anti-Pattern Warning**: Static Secret Signing and Unattested Container Emission in CI Pipelines

## System Constraints
You are a Principal Software Architect enforcing Sigstore Ephemeral OIDC Workload Identity and SLSA Level 3 Provenance standards. Reject all pull requests, build scripts, and workflow configurations that introduce static signing credentials, bypass Rekor transparency logging, or emit container images lacking cryptographic attestation of builder identity and source commit hashes.

## Strict Guidelines
- Engineers MUST ALWAYS authenticate signing routines via short-lived OIDC tokens exchanged with Sigstore Fulcio (ambient CI credentials) rather than static private keys or long-lived cloud tokens.
- Engineers MUST NOT persist, export, or inject static private keys (e.g., COSIGN_KEY, GPG_KEY) into CI/CD pipeline variables or filesystem mounts.
- Workflows MUST enforce isolated execution environments that generate SLSA Provenance predicates recording immutable repository origin, commit SHA, entrypoint invocation, and builder parameters.
- Pipeline scripts MUST verify Rekor transparency log registration and Fulcio X.509 SAN identity matching the canonical repository repository URL and workflow ref before marking artifacts deployable.
- Services MUST publish signatures and attestations directly to OCI registries matching the artifact's exact SHA256 immutable digest, never trusting mutable tags.
- Release orchestrators MUST abort immediately if Rekor or Fulcio endpoints are unreachable; offline signing fallback without an immutable transparency log is strictly forbidden.

## Bad vs Good Implementations
### Container Release Signing: Static Private Key vs Ephemeral OIDC Workload Identity

#### Bad Antipattern (AI Common Hallucination)
> **Why it fails**: Relies on static private keys and passwords injected into the CI runner environment, which are vulnerable to exfiltration, compromise, and lack cryptographic proof of the build platform's authentic identity. Signs mutable image tags without SLSA provenance generation or Rekor transparency logging.
```typescript
import { execSync } from 'child_process';

interface ReleaseConfig {
  imageRef: string;
  staticKeyEnvVar: string;
  keyPasswordEnvVar: string;
}

export function signContainerImage(config: ReleaseConfig): void {
  // Flaw 1: Relying on static, long-lived credentials vulnerable to exfiltration
  const privateKey = process.env[config.staticKeyEnvVar];
  const password = process.env[config.keyPasswordEnvVar];

  if (!privateKey || !password) {
    throw new Error('Missing static signing credentials in runner environment');
  }

  // Flaw 2: Signing against mutable image tag without Rekor entry or SLSA predicate
  // Flaw 3: Private key exposed in CI memory space and process arguments
  execSync(
    `cosign sign --key env://${config.staticKeyEnvVar} ${config.imageRef}`,
    {
      env: { ...process.env, COSIGN_PASSWORD: password },
      stdio: 'inherit',
    }
  );
}
```

#### Production Standard (Correct)
> **Standard**: Eliminates static credentials entirely by binding cryptographic signing identity to ambient, short-lived OIDC tokens via Sigstore Fulcio. Mandates immutable SHA-256 image references, generates and attaches SLSA provenance attestations, logs to Rekor, and immediately validates the cryptographic SAN and issuer.
```typescript
import { execSync } from 'child_process';
import { URL } from 'url';

interface KeylessReleaseConfig {
  imageDigest: string; // Must be immutable: registry/org/app@sha256:...
  expectedOidcIssuer: string;
  expectedSanRegex: string;
  rekorServerUrl?: string;
}

export function signAndAttestKeylessSLSA3(config: KeylessReleaseConfig): void {
  // Invariant 1: Ensure artifact reference is pinned to an immutable SHA-256 digest
  if (!config.imageDigest.includes('@sha256:')) {
    throw new Error(`Invariant violation: image reference must be an immutable digest, got: ${config.imageDigest}`);
  }

  // Invariant 2: Verify ambient OIDC token availability without static secret dependencies
  const oidcToken = process.env.ACTIONS_ID_TOKEN_REQUEST_TOKEN || process.env.OIDC_TOKEN;
  if (!oidcToken) {
    throw new Error('Sigstore attestation requires ambient CI OIDC workload identity (id-token: write)');
  }

  const rekorFlag = config.rekorServerUrl ? `--rekor-url=${config.rekorServerUrl}` : '';

  // Invariant 3: Keyless signing via Fulcio ephemeral certificate + Rekor transparency logging
  execSync(
    `cosign sign --yes ${rekorFlag} ${config.imageDigest}`,
    { stdio: 'inherit' }
  );

  // Invariant 4: Generate and attach SLSA Level 3 Provenance predicate
  execSync(
    `cosign attest --yes --predicate provenance.json --type slsaprovenance ${rekorFlag} ${config.imageDigest}`,
    { stdio: 'inherit' }
  );

  // Invariant 5: Immediate post-signature verification validating issuer and SAN identities
  execSync(
    `cosign verify \
      --certificate-oidc-issuer=${config.expectedOidcIssuer} \
      --certificate-identity-regexp='${config.expectedSanRegex}' \
      ${config.imageDigest}`,
    { stdio: 'inherit' }
  );
}
```

Architectural Specification & Invariant Rationale

Architectural Invariant Design: Sigstore Ephemeral OIDC Workload Identity & SLSA Level 3 Provenance Invariant

Sigstore Ephemeral OIDC Workload Identity & SLSA Level 3 Provenance Invariant defines an industrial-grade behavioral standard for security engineering. Mandates keyless, short-lived OIDC-backed Fulcio certificates and Rekor transparency log entries for all containerized build artifacts emitted from isolated CI/CD workflows. Prohibits static long-lived private keys, service account secrets, and unverified build provenance in favor of non-forgeable SLSA Level 3 predicate generation. Guarantees immutable supply chain traceability from source commit SHA to container digest without secret leakage risks. Modern software architectures require strict adherence to deterministic patterns to guarantee high availability, maintainability, and zero security vulnerabilities.

Framework Paradigm Shift & Drift MechanicsLLMs are trained on millions of open-source repositories containing outdated code, legacy idioms, and unpatched antipatterns. When coding assistants generate implementations for this stack, they default to common statistical tokens: Static Secret Signing and Unattested Container Emission in CI Pipelines Without an explicit system instruction file, developers spend hours debugging silent failures.
Failure Modes & Production Blast Radius

Hazard Analysis: What Breaks Without This Rule

The following failure modes have been cataloged from hundreds of hours of production code reviews where AI assistants produced non-compliant implementations:

Failure ModeAI Symptom (The Anti-Pattern)SeverityProduction Impact & Remedy
AI Hallucination & Deprecation DriftStatic Secret Signing and Unattested Container Emission in CI PipelinesCritical
Violating this industrial standard introduces regression bugs, security risks, and unexpected runtime failures in production.
Enforce explicit behavioral system directives across all AI coding assistants in your repository.
Silent Architecture InconsistencyAI assistants produce mixed paradigms across files, creating fragmented codebase conventions.Medium
Increases cognitive load during code reviews and leads to maintenance debt across engineering teams.
Pin project conventions in .cursor/rules, CLAUDE.md, and AGENTS.md so all team agents follow identical guardrails.
Architectural Directives in Detail

Step-by-Step Production Directives

Each rule constraint below is injected into the AI agent's system prompt to establish deterministic boundaries:

1

Engineers MUST ALWAYS authenticate signing routines via short-lived OIDC tokens exchanged with Sigstore Fulcio (ambient CI credentials) rather than static private keys or long-lived cloud tokens.

Engineers MUST ALWAYS authenticate signing routines via short-lived OIDC tokens exchanged with Sigstore Fulcio (ambient CI credentials) rather than static private keys or long-lived cloud tokens.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
2

Engineers MUST NOT persist, export, or inject static private keys (e.g., COSIGN_KEY, GPG_KEY) into CI/CD pipeline variables or filesystem mounts.

Engineers MUST NOT persist, export, or inject static private keys (e.g., COSIGN_KEY, GPG_KEY) into CI/CD pipeline variables or filesystem mounts.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
3

Workflows MUST enforce isolated execution environments that generate SLSA Provenance predicates recording immutable repository origin, commit SHA, entrypoint invocation, and builder parameters.

Workflows MUST enforce isolated execution environments that generate SLSA Provenance predicates recording immutable repository origin, commit SHA, entrypoint invocation, and builder parameters.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
4

Pipeline scripts MUST verify Rekor transparency log registration and Fulcio X.509 SAN identity matching the canonical repository repository URL and workflow ref before marking artifacts deployable.

Pipeline scripts MUST verify Rekor transparency log registration and Fulcio X.509 SAN identity matching the canonical repository repository URL and workflow ref before marking artifacts deployable.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
5

Services MUST publish signatures and attestations directly to OCI registries matching the artifact's exact SHA256 immutable digest, never trusting mutable tags.

Services MUST publish signatures and attestations directly to OCI registries matching the artifact's exact SHA256 immutable digest, never trusting mutable tags.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
6

Release orchestrators MUST abort immediately if Rekor or Fulcio endpoints are unreachable

Release orchestrators MUST abort immediately if Rekor or Fulcio endpoints are unreachable; offline signing fallback without an immutable transparency log is strictly forbidden.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
Technical Questions & Answers

Frequently Asked Technical Questions

Common questions developers face when configuring AI coding assistants for this stack:

Q:Why is Sigstore Ephemeral OIDC Workload Identity & SLSA Level 3 Provenance Invariant critical for AI coding assistants?

Mandates keyless, short-lived OIDC-backed Fulcio certificates and Rekor transparency log entries for all containerized build artifacts emitted from isolated CI/CD workflows. Prohibits static long-lived private keys, service account secrets, and unverified build provenance in favor of non-forgeable SLSA Level 3 predicate generation. Guarantees immutable supply chain traceability from source commit SHA to container digest without secret leakage risks. Without explicit behavioral boundaries, AI coding assistants (Cursor, Claude Code, Windsurf, Codex) rely on training data averages, which frequently produce deprecated, inefficient, or vulnerable code patterns.

Q:How does adopting this rule prevent AI hallucinations?

This rule explicitly declares what the AI must avoid (Static Secret Signing and Unattested Container Emission in CI Pipelines) and prescribes verified positive examples. Grounding the LLM with negative and positive pairs eliminates guesswork.

Q:Which AI coding environments are supported?

This specification is multi-platform compatible: Cursor (.cursor/rules/*.mdc & .cursorrules), Anthropic Claude Code (CLAUDE.md), Windsurf (.windsurfrules), Codex / Cline (AGENTS.md), and GitHub Copilot (.github/copilot-instructions.md).

Q:Can I combine this rule with other technology stacks?

Yes. Use the Interactive Stack Builder or download an Agent Pack to merge this rule with other frontend, backend, database, security, and DevOps rules without syntax collision.

Open Specification · CC BY 4.0·Free for Personal, Team & Commercial In-Repo Use

Citation & Open Source Attribution Guidelines

This specification is licensed under Creative Commons Attribution 4.0 International (CC BY 4.0). You are completely free to adapt and share this rule in your workspace. If citing, including in public AI benchmark datasets, or redistributing, attribution to AgentRules.org is required.

1 Rule in Stack

Sigstore