This specification is maintained by the AgentRules Working Group. Have enhancements or want to claim maintainership?Submit Specification →
securitycritical PriorityID: spiffe-spire-svid-rotation-standard

Kernel-Attested Dynamic X.509 SVID Lifecycle and In-Memory Rotation Standard

Enforces strict workload microsegmentation and cryptographic identity binding by streaming dynamic, short-lived X.509 SVIDs via local SPIFFE Workload API Unix Domain Sockets. Prohibits static long-lived credentials, disk caching of private keys, and manual TLS context restarts by requiring asynchronous in-memory keypair rotations upon Workload API updates.

Prohibited Anti-Pattern: Mounting Static Certificates, Hardcoded API Secrets, or Persisting Workload Private Keys to Ephemeral Disk

Export Ready-to-Drop Configuration

Select format below to copy code or download file directly.

---
description: Kernel-Attested Dynamic X.509 SVID Lifecycle and In-Memory Rotation Standard - Enforces strict workload microsegmentation and cryptographic identity binding by streaming dynamic, short-lived X.509 SVIDs via local SPIFFE Workload API Unix Domain Sockets. Prohibits static long-lived credentials, disk caching of private keys, and manual TLS context restarts by requiring asynchronous in-memory keypair rotations upon Workload API updates.
globs: src/**/*.{ts,js,go,rs,py}, deploy/**/*.{yaml,yml,json}, infra/**/*.{tf,hcl}
alwaysApply: true
verified_by: "agentrules.org"
license: "CC-BY-4.0"
source: "https://agentrules.org/rules/spiffe-spire-svid-rotation-standard"
---

# Kernel-Attested Dynamic X.509 SVID Lifecycle and In-Memory Rotation Standard

> **Severity**: CRITICAL | **Category**: security
> **Anti-Pattern Warning**: Mounting Static Certificates, Hardcoded API Secrets, or Persisting Workload Private Keys to Ephemeral Disk

## System Constraints
You are a Principal Security Architect enforcing the SPIFFE/SPIRE Microsegmentation X.509 SVID Rotation Standard. Mandate continuous streaming of short-lived credentials via the SPIFFE Workload API over a secure Unix Domain Socket. Prohibit static secrets, disk-persisted keys, and naive server restarts on certificate expiry. Ensure dynamic hot-swapping of active TLS credentials and strict SPIFFE ID authorization on all inter-service communication.

## Strict Guidelines
- Services MUST communicate with the local SPIRE Agent exclusively via the Workload API over a Unix Domain Socket (UDS) located at a secure, non-world-writable path.
- Engineers MUST NOT persist SVID private keys or certificates to persistent disks, ephemeral container filesystems, ConfigMaps, or environment variables.
- TLS listeners and clients MUST dynamically consume X.509 SVIDs in-memory using event-driven stream listeners or dynamic TLS Context callbacks without process restarts.
- Engineers MUST enforce reciprocal SPIFFE ID validation against explicit SPIFFE ID patterns or trust bundles rather than generic SAN DNS names.
- Applications MUST configure SVID time-to-live (TTL) to short durations (e.g., <= 1 hour) and continuously listen to the SPIFFE Workload API stream for automated rotation.
- Components NEVER fall back to static API tokens, long-lived asymmetric keys, or unauthenticated HTTP when the SPIFFE Workload API socket is unreachable.

## Bad vs Good Implementations
### Dynamic SPIFFE X.509 SVID Hot-Reloading vs Static Cert Disk Loading

#### Bad Antipattern (AI Common Hallucination)
> **Why it fails**: Reading static TLS keys from disk violates zero-trust principles, exposes private keys to filesystem exfiltration, prevents automatic rotation without process termination, and fails to validate the peer SPIFFE ID.
```typescript
import tls from 'node:tls';
import fs from 'node:fs';

// ANTI-PATTERN: Loading static credentials from disk or environment
// This requires restarting the process when certificates rotate
// and leaves sensitive private keys vulnerable on the filesystem.
const serverOptions: tls.TlsOptions = {
  key: fs.readFileSync('/etc/certs/tls.key'),
  cert: fs.readFileSync('/etc/certs/tls.crt'),
  ca: [fs.readFileSync('/etc/certs/ca.crt')],
  requestCert: true,
  rejectUnauthorized: true
};

export const server = tls.createServer(serverOptions, (socket) => {
  // Insecure: Missing SPIFFE ID SAN validation against strict trust domain
  console.log('Client connected:', socket.getPeerCertificate().subject);
});
```

#### Production Standard (Correct)
> **Standard**: Credentials are kept exclusively in memory and refreshed on-the-fly via the Workload API stream. Mutex-free SNI context swapping handles rotation transparently, and incoming TLS handshakes strictly verify the client's SPIFFE ID URI SAN.
```typescript
import tls from 'node:tls';
import { WorkloadApiClient, X509SVID } from '@spiffe/workload-api';

// INVARIANT: In-memory dynamic credential rotation driven by SPIFFE Workload API
let currentContext: tls.SecureContext | null = null;
const ALLOWED_PEER_SPIFFE_ID = 'spiffe://prod.internal/ns/payments/sa/payment-processor';

const client = new WorkloadApiClient({
  socketPath: process.env.SPIFFE_ENDPOINT_SOCKET ?? 'unix:///run/spire/sockets/agent.sock'
});

// Stream X.509 SVIDs continuously from SPIRE agent over local UDS
client.watchX509Context((err, context) => {
  if (err || !context) {
    throw new Error(`SPIFFE Workload API failure: ${err?.message}`);
  }
  
  const svid = context.defaultSvid;
  const bundle = context.trustBundles.get(svid.id.trustDomain);

  // In-memory atomic rotation without process restart
  currentContext = tls.createSecureContext({
    key: svid.privateKey,
    cert: svid.certificates,
    ca: bundle?.certificates
  });
});

export const server = tls.createServer({
  SNICallback: (_servername, cb) => {
    if (!currentContext) return cb(new Error('SVID not yet acquired'), null);
    cb(null, currentContext);
  },
  requestCert: true,
  rejectUnauthorized: true
}, (socket) => {
  const peerCert = socket.getPeerCertificate(true);
  const uriSans: string[] = (peerCert.subjectaltname ?? '')
    .split(',')
    .map(san => san.trim())
    .filter(san => san.startsWith('URI:'))
    .map(san => san.substring(4));

  if (!uriSans.includes(ALLOWED_PEER_SPIFFE_ID)) {
    socket.destroy(new Error(`Unauthorized SPIFFE ID: ${uriSans.join(', ')}`));
  }
});
```

Recommended MCP Servers (mcp-serverlist.com)

Equip agent with system tools to verify code for this stack.

Recommended Agent Skills (askills.dev)

Ready-to-use executable skill functions tailored to this stack.

Architectural Specification & Invariant Rationale

Architectural Invariant Design: Kernel-Attested Dynamic X.509 SVID Lifecycle and In-Memory Rotation Standard

Kernel-Attested Dynamic X.509 SVID Lifecycle and In-Memory Rotation Standard defines an industrial-grade behavioral standard for security engineering. Enforces strict workload microsegmentation and cryptographic identity binding by streaming dynamic, short-lived X.509 SVIDs via local SPIFFE Workload API Unix Domain Sockets. Prohibits static long-lived credentials, disk caching of private keys, and manual TLS context restarts by requiring asynchronous in-memory keypair rotations upon Workload API updates. 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: Mounting Static Certificates, Hardcoded API Secrets, or Persisting Workload Private Keys to Ephemeral Disk 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 DriftMounting Static Certificates, Hardcoded API Secrets, or Persisting Workload Private Keys to Ephemeral DiskCritical
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

Services MUST communicate with the local SPIRE Agent exclusively via the Workload API over a Unix Domain Socket (UDS) located at a secure, non-world-writable path.

Services MUST communicate with the local SPIRE Agent exclusively via the Workload API over a Unix Domain Socket (UDS) located at a secure, non-world-writable path.

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 SVID private keys or certificates to persistent disks, ephemeral container filesystems, ConfigMaps, or environment variables.

Engineers MUST NOT persist SVID private keys or certificates to persistent disks, ephemeral container filesystems, ConfigMaps, or environment variables.

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

TLS listeners and clients MUST dynamically consume X.509 SVIDs in-memory using event-driven stream listeners or dynamic TLS Context callbacks without process restarts.

TLS listeners and clients MUST dynamically consume X.509 SVIDs in-memory using event-driven stream listeners or dynamic TLS Context callbacks without process restarts.

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

Engineers MUST enforce reciprocal SPIFFE ID validation against explicit SPIFFE ID patterns or trust bundles rather than generic SAN DNS names.

Engineers MUST enforce reciprocal SPIFFE ID validation against explicit SPIFFE ID patterns or trust bundles rather than generic SAN DNS names.

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

Applications MUST configure SVID time-to-live (TTL) to short durations (e.g., <= 1 hour) and continuously listen to the SPIFFE Workload API stream for automated rotation.

Applications MUST configure SVID time-to-live (TTL) to short durations (e.g., <= 1 hour) and continuously listen to the SPIFFE Workload API stream for automated rotation.

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

Components NEVER fall back to static API tokens, long-lived asymmetric keys, or unauthenticated HTTP when the SPIFFE Workload API socket is unreachable.

Components NEVER fall back to static API tokens, long-lived asymmetric keys, or unauthenticated HTTP when the SPIFFE Workload API socket is unreachable.

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 Kernel-Attested Dynamic X.509 SVID Lifecycle and In-Memory Rotation Standard critical for AI coding assistants?

Enforces strict workload microsegmentation and cryptographic identity binding by streaming dynamic, short-lived X.509 SVIDs via local SPIFFE Workload API Unix Domain Sockets. Prohibits static long-lived credentials, disk caching of private keys, and manual TLS context restarts by requiring asynchronous in-memory keypair rotations upon Workload API updates. 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 (Mounting Static Certificates, Hardcoded API Secrets, or Persisting Workload Private Keys to Ephemeral Disk) 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

Kernel-Attested