New to Claude Skills? Learn how to install them →

mukul975 on GitHub

Kubernetes Pod Security Standards

Free

Enforce security standards for Kubernetes pods effectively.

Get this skill

Free · Opens the source repo

What Kubernetes Pod Security Standards does

Implementing Kubernetes Pod Security Standards provides a structured approach to enhance the security of your Kubernetes clusters. This skill allows you to enforce three distinct security profiles—Privileged, Baseline, and Restricted—using the built-in Pod Security Admission (PSA) controller available in Kubernetes version 1.25 and later. By applying these standards, you can mitigate risks associated with privilege escalation and ensure compliance with security best practices across your namespaces.

The skill guides you through the process of labeling namespaces to enforce security policies at a granular level. You can choose from three enforcement modes: enforce, audit, and warn, allowing for flexible security management tailored to your deployment needs. This is particularly useful for organizations transitioning from the deprecated PodSecurityPolicy to the more robust PSA framework, ensuring that your security posture remains strong during the migration.

For those involved in security assessments or architecture improvements, this skill provides practical workflows and examples to create compliant pod specifications. It helps you establish security controls aligned with compliance requirements, making it a valuable tool for DevOps teams and security professionals looking to bolster their Kubernetes security practices.

When to use it

Use this skill when deploying Kubernetes clusters that require strict pod security measures, especially in production environments.

When not to use it

This skill may not be suitable for environments using Kubernetes versions earlier than 1.25, or for users unfamiliar with Kubernetes security contexts and capabilities.

What you can build with it

Transitioning to Pod Security Admission

Use this skill to effectively transition from PodSecurityPolicy to Pod Security Admission in a Kubernetes cluster.

Implementing Compliance Controls

Establish and enforce pod security standards to meet compliance requirements in production environments.

Conducting Security Assessments

Utilize the workflows provided to assess and improve the security architecture of your Kubernetes deployments.

How to install Kubernetes Pod Security Standards

View source

1. Install with the skills CLI

npx skills add mukul975/anthropic-cybersecurity-skills/implementing-kubernetes-pod-security-standards --agent claude-code

2. Or install it manually

Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.

Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs

Inside SKILL.md

Written by mukul975

Implementing Kubernetes Pod Security Standards

Overview

Pod Security Standards (PSS) define three levels of security policies -- Privileged, Baseline, and Restricted -- enforced by the Pod Security Admission (PSA) controller built into Kubernetes 1.25+. PSA replaces the deprecated PodSecurityPolicy and provides namespace-level enforcement with three modes: enforce, audit, and warn.

When to Use

  • When deploying or configuring implementing kubernetes pod security standards capabilities in your environment
  • When establishing security controls aligned to compliance requirements
  • When building or improving security architecture for this domain
  • When conducting security assessments that require this implementation

Prerequisites

  • Kubernetes cluster 1.25+ (PSA GA)
  • kubectl configured with cluster-admin access
  • Understanding of Linux capabilities and security contexts

Core Concepts

Three Security Profiles

ProfilePurposeRestrictions
PrivilegedUnrestricted, system workloadsNone
BaselinePrevents known escalationsNo hostNetwork, hostPID, hostIPC, privileged containers, dangerous capabilities
RestrictedHardened best practicesNon-root, drop ALL caps, seccomp required, read-only rootfs recommended

Three Enforcement Modes

ModeBehavior
enforceRejects pods that violate the policy
auditLogs violations in audit log but allows pod
warnReturns warning to user but allows pod

Workflow

Step 1: Label Namespaces for PSA

# Restricted namespace - production workloads
apiVersion: v1
kind: Namespace
metadata:
  name: production
  labels:
    pod-security.kubernetes.io/enforce: restricted
    pod-security.kubernetes.io/enforce-version: latest
    pod-security.kubernetes.io/audit: restricted
    pod-security.kubernetes.io/audit-version: latest
    pod-security.kubernetes.io/warn: restricted
    pod-security.kubernetes.io/warn-version: latest
# Baseline namespace - general workloads
apiVersion: v1
kind: Namespace
metadata:
  name: staging
  labels:
    pod-security.kubernetes.io/enforce: baseline
    pod-security.kubernetes.io/enforce-version: latest
    pod-security.kubernetes.io/audit: restricted
    pod-security.kubernetes.io/audit-version: latest
    pod-security.kubernetes.io/warn: restricted
    pod-security.kubernetes.io/warn-version: latest
# Privileged namespace - system components only
apiVersion: v1
kind: Namespace
metadata:
  name: kube-system
  labels:
    pod-security.kubernetes.io/enforce: privileged
    pod-security.kubernetes.io/enforce-version: latest

Step 2: Apply Labels to Existing Namespaces

# Apply restricted enforcement to production
kubectl label namespace production \
  pod-security.kubernetes.io/enforce=restricted \
  pod-security.kubernetes.io/audit=restricted \
  pod-security.kubernetes.io/warn=restricted \
  --overwrite

# Apply baseline to staging with restricted warnings
kubectl label namespace staging \
  pod-security.kubernetes.io/enforce=baseline \
  pod-security.kubernetes.io/audit=restricted \
  pod-security.kubernetes.io/warn=restricted \
  --overwrite

# Check labels on all namespaces
kubectl get namespaces -L pod-security.kubernetes.io/enforce

Step 3: Create Compliant Pod Specs

# Restricted-compliant deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: secure-app
  namespace: production
spec:
  replicas: 3
  selector:
    matchLabels:
      app: secure-app
  template:
    metadata:
      labels:
        app: secure-app
    spec:
      automountServiceAccountToken: false
      securityContext:
        runAsNonRoot: true
        runAsUser: 65534
        runAsGroup: 65534
        fsGroup: 65534
        seccompProfile:
          type: RuntimeDefault
      containers:
        - name: app
          image: myregistry.com/myapp:v1.0.0@sha256:abc123
          ports:
            - containerPort: 8080
              protocol: TCP
          securityContext:
            allowPrivilegeEscalation: false
            readOnlyRootFilesystem: true
            capabilities:
              drop:
                - ALL
            runAsNonRoot: true
            runAsUser: 65534
          resources:
            requests:
              memory: "64Mi"
              cpu: "100m"
            limits:
              memory: "256Mi"
              cpu: "500m"
          volumeMounts:
            - name: tmp
              mountPath: /tmp
            - name: cache
              mountPath: /var/cache
      volumes:
        - name: tmp
          emptyDir:
            sizeLimit: 100Mi
        - name: cache
          emptyDir:
            sizeLimit: 50Mi

Step 4: Gradual Migration Strategy

# Phase 1: Audit mode - discover violations without blocking
kubectl label namespace my-namespace \
  pod-security.kubernetes.io/audit=restricted \
  pod-security.kubernetes.io/warn=restricted

# Check audit logs for violations
kubectl logs -n kube-system -l component=kube-apiserver | grep "pod-security"

# Phase 2: Enforce baseline, warn on restricted
kubectl label namespace my-namespace \
  pod-security.kubernetes.io/enforce=baseline \
  pod-security.kubernetes.io/warn=restricted \
  --overwrite

# Phase 3: Full restricted enforcement
kubectl label namespace my-namespace \
  pod-security.kubernetes.io/enforce=restricted \
  --overwrite

Step 5: Dry-Run Enforcement Testing

# Test what would happen with restricted enforcement
kubectl label --dry-run=server --overwrite namespace my-namespace \
  pod-security.kubernetes.io/enforce=restricted

# Example output:
# Warning: existing pods in namespace "my-namespace" violate the new
# PodSecurity enforce level "restricted:latest"
# Warning: nginx-xxx: allowPrivilegeEscalation != false,
#   unrestricted capabilities, runAsNonRoot != true, seccompProfile

Baseline Profile Restrictions

ControlRestrictedRequirement
HostProcessMust not setPods cannot use Windows HostProcess
Host NamespacesMust not setNo hostNetwork, hostPID, hostIPC
PrivilegedMust not setNo privileged: true
CapabilitiesBaseline list onlyOnly NET_BIND_SERVICE, drop ALL for restricted
HostPath VolumesMust not useNo hostPath volume mounts
Host PortsMust not useNo hostPort in container spec
AppArmorDefault/runtimeCannot set to unconfined
SELinuxLimited typesOnly container_t, container_init_t, container_kvm_t
/proc Mount TypeDefault onlyMust use Default proc mount
SeccompRuntimeDefault or LocalhostMust specify seccomp profile (restricted)
SysctlsSafe set onlyLimited to safe sysctls

Validation Commands

# Verify namespace labels
kubectl get ns --show-labels | grep pod-security

# Test pod creation against policy
kubectl run test-pod --image=nginx --namespace=production --dry-run=server

# Check for violations in audit logs
kubectl get events --field-selector reason=FailedCreate -A

# Scan with Kubescape for PSS compliance
kubescape scan framework nsa --namespace production

References

Frequently asked questions about Kubernetes Pod Security Standards

Similar skills