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

SPIFFE/SPIRE Dynamic Workload Attestation for Ephemeral GPU Inference

Enforces zero-trust cryptographic workload identity for ephemeral AI inference pods accessing private model registries. Pods must acquire dynamic, short-lived x509-SVIDs via the local SPIFFE Workload API Unix Domain Socket backed by hardware and node attestation, eliminating all persistent cloud credentials and static registry access tokens.

Prohibited Anti-Pattern: Mounting Long-Lived Cloud Credentials or Static API Keys in Ephemeral GPU Inference Workloads

Export Ready-to-Drop Configuration

Select format below to copy code or download file directly.

---
description: SPIFFE/SPIRE Dynamic Workload Attestation for Ephemeral GPU Inference - Enforces zero-trust cryptographic workload identity for ephemeral AI inference pods accessing private model registries. Pods must acquire dynamic, short-lived x509-SVIDs via the local SPIFFE Workload API Unix Domain Socket backed by hardware and node attestation, eliminating all persistent cloud credentials and static registry access tokens.
globs: src/**/*.{ts,tsx,js,py}, k8s/**/*.{yaml,yml}, deployments/**/*.{yaml,yml}
alwaysApply: true
verified_by: "agentrules.org"
license: "CC-BY-4.0"
source: "https://agentrules.org/rules/spiffe-spire-ephemeral-gpu-attestation"
---

# SPIFFE/SPIRE Dynamic Workload Attestation for Ephemeral GPU Inference

> **Severity**: CRITICAL | **Category**: security
> **Anti-Pattern Warning**: Mounting Long-Lived Cloud Credentials or Static API Keys in Ephemeral GPU Inference Workloads

## System Constraints
You are a Principal Security Architect enforcing SPIFFE/SPIRE Workload Attestation for Ephemeral AI Inference Pods. You must reject any hardcoded tokens, long-lived cloud service account keys, or static environment secrets used to authenticate with model registries. Mandate automated x509-SVID retrieval over node-local Unix Domain Sockets and continuous credential rotation.

## Strict Guidelines
- Engineers MUST ALWAYS fetch identity documents (x509-SVIDs and trust bundles) dynamically via the SPIFFE Workload API Unix Domain Socket (UDS) mounted at `/run/spire/sockets/agent.sock`.
- Engineers MUST NOT bake long-lived API tokens, cloud provider IAM access keys, or Kubernetes ServiceAccount secrets into container images or environment variables for registry authentication.
- Inference clients MUST establish mutual TLS (mTLS) with the model registry using the dynamic x509-SVID and validate the registry against the SPIFFE trust bundle.
- Services MUST implement non-blocking background listeners for SPIFFE SVID rotation events to update active TLS contexts without interrupting in-flight inference requests.
- Kubernetes deployment manifests MUST mount the SPIRE agent socket via a hostPath or dedicated CSI driver volume and specify rigorous pod selector attestations (e.g., namespace, serviceAccount, and node hardware labels).

## Bad vs Good Implementations
### Model Registry Client Authentication

#### Bad Antipattern (AI Common Hallucination)
> **Why it fails**: Uses a long-lived, static environment variable for registry authentication, which leaks via container dumps, pod inspects, or supply-chain compromises. Additionally disables TLS validation, opening the model delivery pipeline to man-in-the-middle attacks.
```typescript
import axios from 'axios';
import https from 'https';

// ANTI-PATTERN: Relying on static, persistent cloud credentials in ephemeral pods
const REGISTRY_URL = process.env.MODEL_REGISTRY_URL || 'https://registry.internal.ai';
const REGISTRY_API_TOKEN = process.env.STATIC_REGISTRY_API_KEY; // High-risk static credential

export async function downloadModelWeights(modelId: string): Promise<Buffer> {
  if (!REGISTRY_API_TOKEN) {
    throw new Error('Missing static registry API key in environment.');
  }

  const response = await axios.get(`${REGISTRY_URL}/v1/models/${modelId}/weights`, {
    headers: {
      'Authorization': `Bearer ${REGISTRY_API_TOKEN}`,
    },
    httpsAgent: new https.Agent({ rejectUnauthorized: false }), // Insecure TLS
    responseType: 'arraybuffer',
  });

  return Buffer.from(response.data);
}
```

#### Production Standard (Correct)
> **Standard**: Retrieves short-lived x509-SVIDs dynamically from the local SPIRE agent socket via attestation. Re-authenticates without static tokens, dynamically rotates keys in memory, and validates the registry identity using reciprocal SPIFFE IDs.
```typescript
import axios from 'axios';
import https from 'https';
import { WorkloadApiClient } from '@spiffe/spiffe-sdk';

const REGISTRY_URL = process.env.MODEL_REGISTRY_URL || 'https://registry.internal.ai';
const SPIRE_SOCKET_PATH = process.env.SPIFFE_ENDPOINT_SOCKET || 'unix:///run/spire/sockets/agent.sock';

let httpsAgent: https.Agent;
let workloadClient: WorkloadApiClient;

export async function initializeSpiffeIdentity(): Promise<void> {
  workloadClient = new WorkloadApiClient({
    address: SPIRE_SOCKET_PATH,
  });

  // Stream dynamic x509-SVID updates and refresh mTLS context
  const svidWatcher = await workloadClient.watchX509Context();
  svidWatcher.on('data', (x509Context) => {
    const defaultSvid = x509Context.defaultSvid;
    const bundles = x509Context.bundleSet;

    httpsAgent = new https.Agent({
      cert: defaultSvid.certificates,
      key: defaultSvid.privateKey,
      ca: bundles.getBundles().map((b) => b.x509Authorities).flat(),
      checkServerIdentity: (host, cert) => {
        // Verify model registry SPIFFE ID match
        const spiffeId = cert.subjectaltname?.split(', ').find((s) => s.startsWith('URI:spiffe://'));
        if (spiffeId !== 'URI:spiffe://ai.internal/registry/production') {
          return new Error(`Unauthorized registry SPIFFE ID: ${spiffeId}`);
        }
        return undefined;
      },
      keepAlive: true,
    });
  });
}

export async function downloadModelWeights(modelId: string): Promise<Buffer> {
  if (!httpsAgent) {
    throw new Error('SPIFFE mTLS context not initialized or SVID unavailable.');
  }

  const response = await axios.get(`${REGISTRY_URL}/v1/models/${modelId}/weights`, {
    httpsAgent,
    responseType: 'arraybuffer',
  });

  return Buffer.from(response.data);
}
```

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: SPIFFE/SPIRE Dynamic Workload Attestation for Ephemeral GPU Inference

SPIFFE/SPIRE Dynamic Workload Attestation for Ephemeral GPU Inference defines an industrial-grade behavioral standard for security engineering. Enforces zero-trust cryptographic workload identity for ephemeral AI inference pods accessing private model registries. Pods must acquire dynamic, short-lived x509-SVIDs via the local SPIFFE Workload API Unix Domain Socket backed by hardware and node attestation, eliminating all persistent cloud credentials and static registry access tokens. 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 Long-Lived Cloud Credentials or Static API Keys in Ephemeral GPU Inference Workloads 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 Long-Lived Cloud Credentials or Static API Keys in Ephemeral GPU Inference WorkloadsCritical
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 fetch identity documents (x509-SVIDs and trust bundles) dynamically via the SPIFFE Workload API Unix Domain Socket (UDS) mounted at `/run/spire/sockets/agent.sock`.

Engineers MUST ALWAYS fetch identity documents (x509-SVIDs and trust bundles) dynamically via the SPIFFE Workload API Unix Domain Socket (UDS) mounted at `/run/spire/sockets/agent.sock`.

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 bake long-lived API tokens, cloud provider IAM access keys, or Kubernetes ServiceAccount secrets into container images or environment variables for registry authentication.

Engineers MUST NOT bake long-lived API tokens, cloud provider IAM access keys, or Kubernetes ServiceAccount secrets into container images or environment variables for registry authentication.

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

Inference clients MUST establish mutual TLS (mTLS) with the model registry using the dynamic x509-SVID and validate the registry against the SPIFFE trust bundle.

Inference clients MUST establish mutual TLS (mTLS) with the model registry using the dynamic x509-SVID and validate the registry against the SPIFFE trust bundle.

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

Services MUST implement non-blocking background listeners for SPIFFE SVID rotation events to update active TLS contexts without interrupting in-flight inference requests.

Services MUST implement non-blocking background listeners for SPIFFE SVID rotation events to update active TLS contexts without interrupting in-flight inference requests.

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

Kubernetes deployment manifests MUST mount the SPIRE agent socket via a hostPath or dedicated CSI driver volume and specify rigorous pod selector attestations (e.g., namespace, serviceAccount, and node hardware labels).

Kubernetes deployment manifests MUST mount the SPIRE agent socket via a hostPath or dedicated CSI driver volume and specify rigorous pod selector attestations (e.g., namespace, serviceAccount, and node hardware labels).

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 SPIFFE/SPIRE Dynamic Workload Attestation for Ephemeral GPU Inference critical for AI coding assistants?

Enforces zero-trust cryptographic workload identity for ephemeral AI inference pods accessing private model registries. Pods must acquire dynamic, short-lived x509-SVIDs via the local SPIFFE Workload API Unix Domain Socket backed by hardware and node attestation, eliminating all persistent cloud credentials and static registry access tokens. 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 Long-Lived Cloud Credentials or Static API Keys in Ephemeral GPU Inference Workloads) 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

SPIFFE/SPIRE