@raishin/vanguard-frontier-agentic 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +231 -113
- package/agents/AGENTS.md +263 -21
- package/agents/argocd/README.md +46 -0
- package/agents/argocd/argo-rollouts-progressive-delivery-review-agent/AGENT.md +55 -0
- package/agents/argocd/argo-rollouts-progressive-delivery-review-agent/harnesses/claude-code.agent.md +35 -0
- package/agents/argocd/argo-rollouts-progressive-delivery-review-agent/harnesses/codex.toml +29 -0
- package/agents/argocd/argo-rollouts-progressive-delivery-review-agent/harnesses/copilot.agent.md +35 -0
- package/agents/argocd/argo-rollouts-progressive-delivery-review-agent/harnesses/cursor.agent.md +35 -0
- package/agents/argocd/argo-rollouts-progressive-delivery-review-agent/harnesses/gemini.agent.md +35 -0
- package/agents/argocd/argo-rollouts-progressive-delivery-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/argocd/argo-rollouts-progressive-delivery-review-agent/harnesses/kiro-ide.agent.md +35 -0
- package/agents/argocd/argo-rollouts-progressive-delivery-review-agent/metadata.json +31 -0
- package/agents/argocd/argocd-gitops-review-agent/AGENT.md +55 -0
- package/agents/argocd/argocd-gitops-review-agent/harnesses/claude-code.agent.md +38 -0
- package/agents/argocd/argocd-gitops-review-agent/harnesses/codex.toml +32 -0
- package/agents/argocd/argocd-gitops-review-agent/harnesses/copilot.agent.md +38 -0
- package/agents/argocd/argocd-gitops-review-agent/harnesses/cursor.agent.md +38 -0
- package/agents/argocd/argocd-gitops-review-agent/harnesses/gemini.agent.md +38 -0
- package/agents/argocd/argocd-gitops-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/argocd/argocd-gitops-review-agent/harnesses/kiro-ide.agent.md +38 -0
- package/agents/argocd/argocd-gitops-review-agent/metadata.json +30 -0
- package/agents/aws/aws-live-deployment-guarded-operator-agent/metadata.json +10 -1
- package/agents/aws/aws-live-ecs-rollout-guard-agent/metadata.json +10 -1
- package/agents/aws/aws-live-iac-change-guard-agent/metadata.json +10 -1
- package/agents/aws/aws-live-pipeline-approval-operator-agent/metadata.json +10 -1
- package/agents/aws/aws-live-serverless-release-guard-agent/metadata.json +10 -1
- package/agents/aws/aws-private-ca-issuer-review-agent/AGENT.md +53 -0
- package/agents/aws/aws-private-ca-issuer-review-agent/harnesses/claude-code.agent.md +36 -0
- package/agents/aws/aws-private-ca-issuer-review-agent/harnesses/codex.toml +27 -0
- package/agents/aws/aws-private-ca-issuer-review-agent/harnesses/copilot.agent.md +36 -0
- package/agents/aws/aws-private-ca-issuer-review-agent/harnesses/cursor.agent.md +36 -0
- package/agents/aws/aws-private-ca-issuer-review-agent/harnesses/gemini.agent.md +36 -0
- package/agents/aws/aws-private-ca-issuer-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/aws/aws-private-ca-issuer-review-agent/harnesses/kiro-ide.agent.md +36 -0
- package/agents/aws/aws-private-ca-issuer-review-agent/metadata.json +37 -0
- package/agents/azure/README.md +45 -0
- package/agents/azure/azure-keyvault-certificate-issuer-review-agent/AGENT.md +53 -0
- package/agents/azure/azure-keyvault-certificate-issuer-review-agent/harnesses/claude-code.agent.md +36 -0
- package/agents/azure/azure-keyvault-certificate-issuer-review-agent/harnesses/codex.toml +27 -0
- package/agents/azure/azure-keyvault-certificate-issuer-review-agent/harnesses/copilot.agent.md +36 -0
- package/agents/azure/azure-keyvault-certificate-issuer-review-agent/harnesses/cursor.agent.md +36 -0
- package/agents/azure/azure-keyvault-certificate-issuer-review-agent/harnesses/gemini.agent.md +36 -0
- package/agents/azure/azure-keyvault-certificate-issuer-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/azure/azure-keyvault-certificate-issuer-review-agent/harnesses/kiro-ide.agent.md +36 -0
- package/agents/azure/azure-keyvault-certificate-issuer-review-agent/metadata.json +36 -0
- package/agents/azure/azure-live-aks-rollout-guard-agent/metadata.json +10 -1
- package/agents/azure/azure-live-app-service-slot-swap-guard-agent/metadata.json +10 -1
- package/agents/azure/azure-live-arm-deployment-stack-guard-agent/metadata.json +10 -1
- package/agents/azure/azure-live-cost-budget-action-guard-agent/metadata.json +10 -1
- package/agents/azure/azure-live-entra-role-assignment-guard-agent/AGENT.md +59 -0
- package/agents/azure/azure-live-entra-role-assignment-guard-agent/harnesses/claude-code.agent.md +42 -0
- package/agents/azure/azure-live-entra-role-assignment-guard-agent/harnesses/codex.toml +34 -0
- package/agents/azure/azure-live-entra-role-assignment-guard-agent/harnesses/copilot.agent.md +55 -0
- package/agents/azure/azure-live-entra-role-assignment-guard-agent/harnesses/cursor.agent.md +44 -0
- package/agents/azure/azure-live-entra-role-assignment-guard-agent/harnesses/gemini.agent.md +43 -0
- package/agents/azure/azure-live-entra-role-assignment-guard-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/azure/azure-live-entra-role-assignment-guard-agent/harnesses/kiro-ide.agent.md +42 -0
- package/agents/azure/azure-live-entra-role-assignment-guard-agent/metadata.json +37 -0
- package/agents/azure/azure-live-keyvault-rotation-purge-guard-agent/metadata.json +10 -1
- package/agents/azure/azure-live-pim-jit-activation-guard-agent/metadata.json +11 -2
- package/agents/backstage/README.md +36 -0
- package/agents/backstage/backstage-scaffolder-template-review-agent/AGENT.md +54 -0
- package/agents/backstage/backstage-scaffolder-template-review-agent/harnesses/claude-code.agent.md +37 -0
- package/agents/backstage/backstage-scaffolder-template-review-agent/harnesses/codex.toml +31 -0
- package/agents/backstage/backstage-scaffolder-template-review-agent/harnesses/copilot.agent.md +37 -0
- package/agents/backstage/backstage-scaffolder-template-review-agent/harnesses/cursor.agent.md +37 -0
- package/agents/backstage/backstage-scaffolder-template-review-agent/harnesses/gemini.agent.md +37 -0
- package/agents/backstage/backstage-scaffolder-template-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/backstage/backstage-scaffolder-template-review-agent/harnesses/kiro-ide.agent.md +37 -0
- package/agents/backstage/backstage-scaffolder-template-review-agent/metadata.json +30 -0
- package/agents/cert-manager/README.md +46 -0
- package/agents/cert-manager/cert-manager-issuer-trust-review-agent/AGENT.md +55 -0
- package/agents/cert-manager/cert-manager-issuer-trust-review-agent/harnesses/claude-code.agent.md +35 -0
- package/agents/cert-manager/cert-manager-issuer-trust-review-agent/harnesses/codex.toml +29 -0
- package/agents/cert-manager/cert-manager-issuer-trust-review-agent/harnesses/copilot.agent.md +35 -0
- package/agents/cert-manager/cert-manager-issuer-trust-review-agent/harnesses/cursor.agent.md +35 -0
- package/agents/cert-manager/cert-manager-issuer-trust-review-agent/harnesses/gemini.agent.md +35 -0
- package/agents/cert-manager/cert-manager-issuer-trust-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/cert-manager/cert-manager-issuer-trust-review-agent/harnesses/kiro-ide.agent.md +35 -0
- package/agents/cert-manager/cert-manager-issuer-trust-review-agent/metadata.json +31 -0
- package/agents/cilium/README.md +46 -0
- package/agents/cilium/cilium-network-policy-review-agent/AGENT.md +55 -0
- package/agents/cilium/cilium-network-policy-review-agent/harnesses/claude-code.agent.md +38 -0
- package/agents/cilium/cilium-network-policy-review-agent/harnesses/codex.toml +32 -0
- package/agents/cilium/cilium-network-policy-review-agent/harnesses/copilot.agent.md +38 -0
- package/agents/cilium/cilium-network-policy-review-agent/harnesses/cursor.agent.md +38 -0
- package/agents/cilium/cilium-network-policy-review-agent/harnesses/gemini.agent.md +38 -0
- package/agents/cilium/cilium-network-policy-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/cilium/cilium-network-policy-review-agent/harnesses/kiro-ide.agent.md +38 -0
- package/agents/cilium/cilium-network-policy-review-agent/metadata.json +37 -0
- package/agents/falco/README.md +36 -0
- package/agents/falco/falco-runtime-threat-rules-review-agent/AGENT.md +49 -0
- package/agents/falco/falco-runtime-threat-rules-review-agent/harnesses/claude-code.agent.md +33 -0
- package/agents/falco/falco-runtime-threat-rules-review-agent/harnesses/codex.toml +31 -0
- package/agents/falco/falco-runtime-threat-rules-review-agent/harnesses/copilot.agent.md +33 -0
- package/agents/falco/falco-runtime-threat-rules-review-agent/harnesses/cursor.agent.md +33 -0
- package/agents/falco/falco-runtime-threat-rules-review-agent/harnesses/gemini.agent.md +33 -0
- package/agents/falco/falco-runtime-threat-rules-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/falco/falco-runtime-threat-rules-review-agent/harnesses/kiro-ide.agent.md +33 -0
- package/agents/falco/falco-runtime-threat-rules-review-agent/metadata.json +31 -0
- package/agents/finops/README.md +27 -0
- package/agents/finops/finops-cloud-price-advisor-agent/metadata.json +10 -1
- package/agents/fluxcd/README.md +39 -0
- package/agents/fluxcd/fluxcd-kustomization-helmrelease-review-agent/AGENT.md +55 -0
- package/agents/fluxcd/fluxcd-kustomization-helmrelease-review-agent/harnesses/claude-code.agent.md +38 -0
- package/agents/fluxcd/fluxcd-kustomization-helmrelease-review-agent/harnesses/codex.toml +32 -0
- package/agents/fluxcd/fluxcd-kustomization-helmrelease-review-agent/harnesses/copilot.agent.md +38 -0
- package/agents/fluxcd/fluxcd-kustomization-helmrelease-review-agent/harnesses/cursor.agent.md +38 -0
- package/agents/fluxcd/fluxcd-kustomization-helmrelease-review-agent/harnesses/gemini.agent.md +38 -0
- package/agents/fluxcd/fluxcd-kustomization-helmrelease-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/fluxcd/fluxcd-kustomization-helmrelease-review-agent/harnesses/kiro-ide.agent.md +38 -0
- package/agents/fluxcd/fluxcd-kustomization-helmrelease-review-agent/metadata.json +31 -0
- package/agents/istio/README.md +46 -0
- package/agents/istio/istio-ambient-mesh-review-agent/AGENT.md +55 -0
- package/agents/istio/istio-ambient-mesh-review-agent/harnesses/claude-code.agent.md +38 -0
- package/agents/istio/istio-ambient-mesh-review-agent/harnesses/codex.toml +32 -0
- package/agents/istio/istio-ambient-mesh-review-agent/harnesses/copilot.agent.md +38 -0
- package/agents/istio/istio-ambient-mesh-review-agent/harnesses/cursor.agent.md +38 -0
- package/agents/istio/istio-ambient-mesh-review-agent/harnesses/gemini.agent.md +38 -0
- package/agents/istio/istio-ambient-mesh-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/istio/istio-ambient-mesh-review-agent/harnesses/kiro-ide.agent.md +38 -0
- package/agents/istio/istio-ambient-mesh-review-agent/metadata.json +30 -0
- package/agents/kubernetes/README.md +143 -0
- package/agents/kubernetes/external-secrets-operator-review-agent/AGENT.md +49 -0
- package/agents/kubernetes/external-secrets-operator-review-agent/harnesses/claude-code.agent.md +33 -0
- package/agents/kubernetes/external-secrets-operator-review-agent/harnesses/codex.toml +31 -0
- package/agents/kubernetes/external-secrets-operator-review-agent/harnesses/copilot.agent.md +33 -0
- package/agents/kubernetes/external-secrets-operator-review-agent/harnesses/cursor.agent.md +33 -0
- package/agents/kubernetes/external-secrets-operator-review-agent/harnesses/gemini.agent.md +33 -0
- package/agents/kubernetes/external-secrets-operator-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/kubernetes/external-secrets-operator-review-agent/harnesses/kiro-ide.agent.md +33 -0
- package/agents/kubernetes/external-secrets-operator-review-agent/metadata.json +31 -0
- package/agents/kubernetes/kubecost-chargeback-allocation-review-agent/AGENT.md +56 -0
- package/agents/kubernetes/kubecost-chargeback-allocation-review-agent/harnesses/claude-code.agent.md +39 -0
- package/agents/kubernetes/kubecost-chargeback-allocation-review-agent/harnesses/codex.toml +34 -0
- package/agents/kubernetes/kubecost-chargeback-allocation-review-agent/harnesses/copilot.agent.md +39 -0
- package/agents/kubernetes/kubecost-chargeback-allocation-review-agent/harnesses/cursor.agent.md +39 -0
- package/agents/kubernetes/kubecost-chargeback-allocation-review-agent/harnesses/gemini.agent.md +39 -0
- package/agents/kubernetes/kubecost-chargeback-allocation-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/kubernetes/kubecost-chargeback-allocation-review-agent/harnesses/kiro-ide.agent.md +39 -0
- package/agents/kubernetes/kubecost-chargeback-allocation-review-agent/metadata.json +31 -0
- package/agents/kubernetes/kubernetes-live-admission-policy-guard-agent/AGENT.md +59 -0
- package/agents/kubernetes/kubernetes-live-admission-policy-guard-agent/harnesses/claude-code.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-admission-policy-guard-agent/harnesses/codex.toml +33 -0
- package/agents/kubernetes/kubernetes-live-admission-policy-guard-agent/harnesses/copilot.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-admission-policy-guard-agent/harnesses/cursor.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-admission-policy-guard-agent/harnesses/gemini.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-admission-policy-guard-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/kubernetes/kubernetes-live-admission-policy-guard-agent/harnesses/kiro-ide.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-admission-policy-guard-agent/metadata.json +36 -0
- package/agents/kubernetes/kubernetes-live-argocd-sync-guard-agent/AGENT.md +59 -0
- package/agents/kubernetes/kubernetes-live-argocd-sync-guard-agent/harnesses/claude-code.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-argocd-sync-guard-agent/harnesses/codex.toml +33 -0
- package/agents/kubernetes/kubernetes-live-argocd-sync-guard-agent/harnesses/copilot.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-argocd-sync-guard-agent/harnesses/cursor.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-argocd-sync-guard-agent/harnesses/gemini.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-argocd-sync-guard-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/kubernetes/kubernetes-live-argocd-sync-guard-agent/harnesses/kiro-ide.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-argocd-sync-guard-agent/metadata.json +36 -0
- package/agents/kubernetes/kubernetes-live-mesh-policy-guard-agent/AGENT.md +59 -0
- package/agents/kubernetes/kubernetes-live-mesh-policy-guard-agent/harnesses/claude-code.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-mesh-policy-guard-agent/harnesses/codex.toml +33 -0
- package/agents/kubernetes/kubernetes-live-mesh-policy-guard-agent/harnesses/copilot.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-mesh-policy-guard-agent/harnesses/cursor.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-mesh-policy-guard-agent/harnesses/gemini.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-mesh-policy-guard-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/kubernetes/kubernetes-live-mesh-policy-guard-agent/harnesses/kiro-ide.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-mesh-policy-guard-agent/metadata.json +36 -0
- package/agents/kubernetes/kubernetes-live-network-policy-guard-agent/AGENT.md +59 -0
- package/agents/kubernetes/kubernetes-live-network-policy-guard-agent/harnesses/claude-code.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-network-policy-guard-agent/harnesses/codex.toml +33 -0
- package/agents/kubernetes/kubernetes-live-network-policy-guard-agent/harnesses/copilot.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-network-policy-guard-agent/harnesses/cursor.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-network-policy-guard-agent/harnesses/gemini.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-network-policy-guard-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/kubernetes/kubernetes-live-network-policy-guard-agent/harnesses/kiro-ide.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-network-policy-guard-agent/metadata.json +36 -0
- package/agents/kubernetes/kubernetes-live-rbac-mutation-guard-agent/AGENT.md +59 -0
- package/agents/kubernetes/kubernetes-live-rbac-mutation-guard-agent/harnesses/claude-code.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-rbac-mutation-guard-agent/harnesses/codex.toml +34 -0
- package/agents/kubernetes/kubernetes-live-rbac-mutation-guard-agent/harnesses/copilot.agent.md +55 -0
- package/agents/kubernetes/kubernetes-live-rbac-mutation-guard-agent/harnesses/cursor.agent.md +44 -0
- package/agents/kubernetes/kubernetes-live-rbac-mutation-guard-agent/harnesses/gemini.agent.md +43 -0
- package/agents/kubernetes/kubernetes-live-rbac-mutation-guard-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/kubernetes/kubernetes-live-rbac-mutation-guard-agent/harnesses/kiro-ide.agent.md +42 -0
- package/agents/kubernetes/kubernetes-live-rbac-mutation-guard-agent/metadata.json +36 -0
- package/agents/kubernetes/kubernetes-live-velero-restore-guard-agent/AGENT.md +62 -0
- package/agents/kubernetes/kubernetes-live-velero-restore-guard-agent/harnesses/claude-code.agent.md +43 -0
- package/agents/kubernetes/kubernetes-live-velero-restore-guard-agent/harnesses/codex.toml +35 -0
- package/agents/kubernetes/kubernetes-live-velero-restore-guard-agent/harnesses/copilot.agent.md +43 -0
- package/agents/kubernetes/kubernetes-live-velero-restore-guard-agent/harnesses/cursor.agent.md +43 -0
- package/agents/kubernetes/kubernetes-live-velero-restore-guard-agent/harnesses/gemini.agent.md +43 -0
- package/agents/kubernetes/kubernetes-live-velero-restore-guard-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/kubernetes/kubernetes-live-velero-restore-guard-agent/harnesses/kiro-ide.agent.md +43 -0
- package/agents/kubernetes/kubernetes-live-velero-restore-guard-agent/metadata.json +37 -0
- package/agents/kubernetes/kubernetes-maestro-agent/AGENT.md +55 -0
- package/agents/kubernetes/kubernetes-maestro-agent/harnesses/claude-code.agent.md +38 -0
- package/agents/kubernetes/kubernetes-maestro-agent/harnesses/codex.toml +34 -0
- package/agents/kubernetes/kubernetes-maestro-agent/harnesses/copilot.agent.md +38 -0
- package/agents/kubernetes/kubernetes-maestro-agent/harnesses/cursor.agent.md +38 -0
- package/agents/kubernetes/kubernetes-maestro-agent/harnesses/gemini.agent.md +38 -0
- package/agents/kubernetes/kubernetes-maestro-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/kubernetes/kubernetes-maestro-agent/harnesses/kiro-ide.agent.md +38 -0
- package/agents/kubernetes/kubernetes-maestro-agent/metadata.json +40 -0
- package/agents/kubernetes/kubernetes-pod-spec-review-agent/AGENT.md +54 -0
- package/agents/kubernetes/kubernetes-pod-spec-review-agent/harnesses/claude-code.agent.md +37 -0
- package/agents/kubernetes/kubernetes-pod-spec-review-agent/harnesses/codex.toml +27 -0
- package/agents/kubernetes/kubernetes-pod-spec-review-agent/harnesses/copilot.agent.md +37 -0
- package/agents/kubernetes/kubernetes-pod-spec-review-agent/harnesses/cursor.agent.md +37 -0
- package/agents/kubernetes/kubernetes-pod-spec-review-agent/harnesses/gemini.agent.md +37 -0
- package/agents/kubernetes/kubernetes-pod-spec-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/kubernetes/kubernetes-pod-spec-review-agent/harnesses/kiro-ide.agent.md +37 -0
- package/agents/kubernetes/kubernetes-pod-spec-review-agent/metadata.json +38 -0
- package/agents/kubernetes/kubernetes-psa-review-agent/AGENT.md +55 -0
- package/agents/kubernetes/kubernetes-psa-review-agent/harnesses/claude-code.agent.md +36 -0
- package/agents/kubernetes/kubernetes-psa-review-agent/harnesses/codex.toml +29 -0
- package/agents/kubernetes/kubernetes-psa-review-agent/harnesses/copilot.agent.md +36 -0
- package/agents/kubernetes/kubernetes-psa-review-agent/harnesses/cursor.agent.md +36 -0
- package/agents/kubernetes/kubernetes-psa-review-agent/harnesses/gemini.agent.md +36 -0
- package/agents/kubernetes/kubernetes-psa-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/kubernetes/kubernetes-psa-review-agent/harnesses/kiro-ide.agent.md +36 -0
- package/agents/kubernetes/kubernetes-psa-review-agent/metadata.json +37 -0
- package/agents/kubernetes/kubernetes-rbac-review-agent/AGENT.md +55 -0
- package/agents/kubernetes/kubernetes-rbac-review-agent/harnesses/claude-code.agent.md +38 -0
- package/agents/kubernetes/kubernetes-rbac-review-agent/harnesses/codex.toml +32 -0
- package/agents/kubernetes/kubernetes-rbac-review-agent/harnesses/copilot.agent.md +51 -0
- package/agents/kubernetes/kubernetes-rbac-review-agent/harnesses/cursor.agent.md +40 -0
- package/agents/kubernetes/kubernetes-rbac-review-agent/harnesses/gemini.agent.md +39 -0
- package/agents/kubernetes/kubernetes-rbac-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/kubernetes/kubernetes-rbac-review-agent/harnesses/kiro-ide.agent.md +38 -0
- package/agents/kubernetes/kubernetes-rbac-review-agent/metadata.json +36 -0
- package/agents/kubernetes/kubernetes-workload-identity-review-agent/AGENT.md +55 -0
- package/agents/kubernetes/kubernetes-workload-identity-review-agent/harnesses/claude-code.agent.md +37 -0
- package/agents/kubernetes/kubernetes-workload-identity-review-agent/harnesses/codex.toml +29 -0
- package/agents/kubernetes/kubernetes-workload-identity-review-agent/harnesses/copilot.agent.md +37 -0
- package/agents/kubernetes/kubernetes-workload-identity-review-agent/harnesses/cursor.agent.md +37 -0
- package/agents/kubernetes/kubernetes-workload-identity-review-agent/harnesses/gemini.agent.md +37 -0
- package/agents/kubernetes/kubernetes-workload-identity-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/kubernetes/kubernetes-workload-identity-review-agent/harnesses/kiro-ide.agent.md +37 -0
- package/agents/kubernetes/kubernetes-workload-identity-review-agent/metadata.json +37 -0
- package/agents/kyverno/README.md +46 -0
- package/agents/kyverno/kyverno-policy-review-agent/AGENT.md +55 -0
- package/agents/kyverno/kyverno-policy-review-agent/harnesses/claude-code.agent.md +38 -0
- package/agents/kyverno/kyverno-policy-review-agent/harnesses/codex.toml +32 -0
- package/agents/kyverno/kyverno-policy-review-agent/harnesses/copilot.agent.md +38 -0
- package/agents/kyverno/kyverno-policy-review-agent/harnesses/cursor.agent.md +38 -0
- package/agents/kyverno/kyverno-policy-review-agent/harnesses/gemini.agent.md +38 -0
- package/agents/kyverno/kyverno-policy-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/kyverno/kyverno-policy-review-agent/harnesses/kiro-ide.agent.md +38 -0
- package/agents/kyverno/kyverno-policy-review-agent/metadata.json +30 -0
- package/agents/oci/README.md +45 -0
- package/agents/oci/oci-certificates-issuer-review-agent/AGENT.md +53 -0
- package/agents/oci/oci-certificates-issuer-review-agent/harnesses/claude-code.agent.md +36 -0
- package/agents/oci/oci-certificates-issuer-review-agent/harnesses/codex.toml +27 -0
- package/agents/oci/oci-certificates-issuer-review-agent/harnesses/copilot.agent.md +36 -0
- package/agents/oci/oci-certificates-issuer-review-agent/harnesses/cursor.agent.md +36 -0
- package/agents/oci/oci-certificates-issuer-review-agent/harnesses/gemini.agent.md +36 -0
- package/agents/oci/oci-certificates-issuer-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/oci/oci-certificates-issuer-review-agent/harnesses/kiro-ide.agent.md +36 -0
- package/agents/oci/oci-certificates-issuer-review-agent/metadata.json +36 -0
- package/agents/oci/oci-live-autonomous-db-lifecycle-guard-agent/metadata.json +11 -2
- package/agents/oci/oci-live-cost-budget-runaway-guard-agent/metadata.json +11 -2
- package/agents/oci/oci-live-iam-policy-compartment-guard-agent/metadata.json +10 -1
- package/agents/oci/oci-live-network-security-rule-guard-agent/AGENT.md +59 -0
- package/agents/oci/oci-live-network-security-rule-guard-agent/harnesses/claude-code.agent.md +42 -0
- package/agents/oci/oci-live-network-security-rule-guard-agent/harnesses/codex.toml +34 -0
- package/agents/oci/oci-live-network-security-rule-guard-agent/harnesses/copilot.agent.md +55 -0
- package/agents/oci/oci-live-network-security-rule-guard-agent/harnesses/cursor.agent.md +44 -0
- package/agents/oci/oci-live-network-security-rule-guard-agent/harnesses/gemini.agent.md +43 -0
- package/agents/oci/oci-live-network-security-rule-guard-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/oci/oci-live-network-security-rule-guard-agent/harnesses/kiro-ide.agent.md +42 -0
- package/agents/oci/oci-live-network-security-rule-guard-agent/metadata.json +37 -0
- package/agents/oci/oci-live-oke-rollout-guard-agent/metadata.json +11 -2
- package/agents/oci/oci-live-resource-manager-stack-guard-agent/metadata.json +10 -1
- package/agents/oci/oci-live-vault-key-destruction-guard-agent/metadata.json +10 -1
- package/agents/opentelemetry/README.md +37 -0
- package/agents/opentelemetry/opentelemetry-collector-config-review-agent/AGENT.md +55 -0
- package/agents/opentelemetry/opentelemetry-collector-config-review-agent/harnesses/claude-code.agent.md +38 -0
- package/agents/opentelemetry/opentelemetry-collector-config-review-agent/harnesses/codex.toml +32 -0
- package/agents/opentelemetry/opentelemetry-collector-config-review-agent/harnesses/copilot.agent.md +38 -0
- package/agents/opentelemetry/opentelemetry-collector-config-review-agent/harnesses/cursor.agent.md +38 -0
- package/agents/opentelemetry/opentelemetry-collector-config-review-agent/harnesses/gemini.agent.md +38 -0
- package/agents/opentelemetry/opentelemetry-collector-config-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/opentelemetry/opentelemetry-collector-config-review-agent/harnesses/kiro-ide.agent.md +38 -0
- package/agents/opentelemetry/opentelemetry-collector-config-review-agent/metadata.json +37 -0
- package/agents/prometheus/README.md +36 -0
- package/agents/prometheus/prometheus-alerting-cardinality-review-agent/AGENT.md +48 -0
- package/agents/prometheus/prometheus-alerting-cardinality-review-agent/harnesses/claude-code.agent.md +32 -0
- package/agents/prometheus/prometheus-alerting-cardinality-review-agent/harnesses/codex.toml +31 -0
- package/agents/prometheus/prometheus-alerting-cardinality-review-agent/harnesses/copilot.agent.md +32 -0
- package/agents/prometheus/prometheus-alerting-cardinality-review-agent/harnesses/cursor.agent.md +32 -0
- package/agents/prometheus/prometheus-alerting-cardinality-review-agent/harnesses/gemini.agent.md +32 -0
- package/agents/prometheus/prometheus-alerting-cardinality-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/prometheus/prometheus-alerting-cardinality-review-agent/harnesses/kiro-ide.agent.md +32 -0
- package/agents/prometheus/prometheus-alerting-cardinality-review-agent/metadata.json +31 -0
- package/agents/sigstore/README.md +38 -0
- package/agents/sigstore/sigstore-cosign-supply-chain-review-agent/AGENT.md +55 -0
- package/agents/sigstore/sigstore-cosign-supply-chain-review-agent/harnesses/claude-code.agent.md +35 -0
- package/agents/sigstore/sigstore-cosign-supply-chain-review-agent/harnesses/codex.toml +29 -0
- package/agents/sigstore/sigstore-cosign-supply-chain-review-agent/harnesses/copilot.agent.md +35 -0
- package/agents/sigstore/sigstore-cosign-supply-chain-review-agent/harnesses/cursor.agent.md +35 -0
- package/agents/sigstore/sigstore-cosign-supply-chain-review-agent/harnesses/gemini.agent.md +35 -0
- package/agents/sigstore/sigstore-cosign-supply-chain-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/sigstore/sigstore-cosign-supply-chain-review-agent/harnesses/kiro-ide.agent.md +35 -0
- package/agents/sigstore/sigstore-cosign-supply-chain-review-agent/metadata.json +31 -0
- package/agents/terraform/README.md +29 -0
- package/agents/terraform/terraform-reviewer/harnesses/claude-code.agent.md +29 -0
- package/agents/terraform/terraform-reviewer/harnesses/codex.toml +29 -0
- package/agents/terraform/terraform-reviewer/harnesses/copilot.agent.md +42 -0
- package/agents/terraform/terraform-reviewer/harnesses/cursor.agent.md +31 -0
- package/agents/terraform/terraform-reviewer/harnesses/gemini.agent.md +30 -0
- package/agents/terraform/terraform-reviewer/harnesses/kiro-cli.agent.json +5 -0
- package/agents/terraform/terraform-reviewer/harnesses/kiro-ide.agent.md +29 -0
- package/agents/terraform/terraform-reviewer/metadata.json +10 -1
- package/agents/velero/README.md +41 -0
- package/assets/logos/vanguard-frontier-agentic-logo.png +0 -0
- package/catalog/agents.json +1452 -634
- package/catalog/install-roles.json +455 -0
- package/catalog/skill-manifest.json +757 -3
- package/catalog/skills.json +1298 -528
- package/package.json +11 -1
- package/scripts/export-marketplace-agents.mjs +100 -9
- package/scripts/update-catalog-new-agents.py +88 -0
- package/skills/argocd/README.md +30 -0
- package/skills/argocd/argo-rollouts-progressive-delivery-review/SKILL.md +40 -0
- package/skills/argocd/argo-rollouts-progressive-delivery-review/metadata.json +22 -0
- package/skills/argocd/argo-rollouts-progressive-delivery-review/references/workflow-and-output.md +248 -0
- package/skills/argocd/argocd-gitops-review/SKILL.md +43 -0
- package/skills/argocd/argocd-gitops-review/metadata.json +30 -0
- package/skills/argocd/argocd-gitops-review/references/mcp-and-evidence.md +53 -0
- package/skills/argocd/argocd-gitops-review/references/official-sources.md +32 -0
- package/skills/argocd/argocd-gitops-review/references/workflow-and-output.md +120 -0
- package/skills/aws/README.md +3 -1
- package/skills/aws/aws-maestro/references/workflow-and-output.md +2 -0
- package/skills/aws/aws-private-ca-issuer-review/SKILL.md +39 -0
- package/skills/aws/aws-private-ca-issuer-review/metadata.json +21 -0
- package/skills/aws/aws-private-ca-issuer-review/references/official-sources.md +22 -0
- package/skills/aws/aws-private-ca-issuer-review/references/safety-checklist.md +30 -0
- package/skills/aws/aws-private-ca-issuer-review/references/workflow-and-output.md +214 -0
- package/skills/azure/README.md +3 -1
- package/skills/azure/azure-keyvault-certificate-issuer-review/SKILL.md +37 -0
- package/skills/azure/azure-keyvault-certificate-issuer-review/metadata.json +20 -0
- package/skills/azure/azure-keyvault-certificate-issuer-review/references/workflow-and-output.md +190 -0
- package/skills/azure/azure-live-entra-role-assignment-guard/SKILL.md +56 -0
- package/skills/azure/azure-live-entra-role-assignment-guard/metadata.json +28 -0
- package/skills/azure/azure-live-entra-role-assignment-guard/references/official-sources.md +21 -0
- package/skills/azure/azure-live-entra-role-assignment-guard/references/permission-model.md +70 -0
- package/skills/azure/azure-live-entra-role-assignment-guard/references/preflight-commands.md +69 -0
- package/skills/azure/azure-live-entra-role-assignment-guard/references/rollback-playbook.md +51 -0
- package/skills/backstage/backstage-scaffolder-template-review/SKILL.md +39 -0
- package/skills/backstage/backstage-scaffolder-template-review/metadata.json +21 -0
- package/skills/backstage/backstage-scaffolder-template-review/references/workflow-and-output.md +179 -0
- package/skills/cert-manager/cert-manager-issuer-trust-review/SKILL.md +40 -0
- package/skills/cert-manager/cert-manager-issuer-trust-review/metadata.json +22 -0
- package/skills/cert-manager/cert-manager-issuer-trust-review/references/workflow-and-output.md +222 -0
- package/skills/cilium/README.md +30 -0
- package/skills/cilium/cilium-network-policy-review/SKILL.md +43 -0
- package/skills/cilium/cilium-network-policy-review/metadata.json +30 -0
- package/skills/cilium/cilium-network-policy-review/references/mcp-and-evidence.md +52 -0
- package/skills/cilium/cilium-network-policy-review/references/official-sources.md +30 -0
- package/skills/cilium/cilium-network-policy-review/references/workflow-and-output.md +130 -0
- package/skills/falco/falco-runtime-threat-rules-review/SKILL.md +37 -0
- package/skills/falco/falco-runtime-threat-rules-review/metadata.json +22 -0
- package/skills/falco/falco-runtime-threat-rules-review/references/workflow-and-output.md +249 -0
- package/skills/finops/README.md +30 -0
- package/skills/fluxcd/fluxcd-kustomization-helmrelease-review/SKILL.md +40 -0
- package/skills/fluxcd/fluxcd-kustomization-helmrelease-review/metadata.json +22 -0
- package/skills/fluxcd/fluxcd-kustomization-helmrelease-review/references/workflow-and-output.md +243 -0
- package/skills/istio/README.md +28 -0
- package/skills/istio/istio-ambient-mesh-review/SKILL.md +43 -0
- package/skills/istio/istio-ambient-mesh-review/metadata.json +30 -0
- package/skills/istio/istio-ambient-mesh-review/references/mcp-and-evidence.md +59 -0
- package/skills/istio/istio-ambient-mesh-review/references/official-sources.md +32 -0
- package/skills/istio/istio-ambient-mesh-review/references/workflow-and-output.md +128 -0
- package/skills/kubernetes/README.md +30 -0
- package/skills/kubernetes/external-secrets-operator-review/SKILL.md +37 -0
- package/skills/kubernetes/external-secrets-operator-review/metadata.json +22 -0
- package/skills/kubernetes/external-secrets-operator-review/references/workflow-and-output.md +280 -0
- package/skills/kubernetes/kubecost-chargeback-allocation-review/SKILL.md +40 -0
- package/skills/kubernetes/kubecost-chargeback-allocation-review/metadata.json +22 -0
- package/skills/kubernetes/kubecost-chargeback-allocation-review/references/workflow-and-output.md +215 -0
- package/skills/kubernetes/kubernetes-live-rbac-mutation-guard/SKILL.md +57 -0
- package/skills/kubernetes/kubernetes-live-rbac-mutation-guard/metadata.json +27 -0
- package/skills/kubernetes/kubernetes-live-rbac-mutation-guard/references/official-sources.md +18 -0
- package/skills/kubernetes/kubernetes-live-rbac-mutation-guard/references/permission-model.md +78 -0
- package/skills/kubernetes/kubernetes-live-rbac-mutation-guard/references/preflight-commands.md +81 -0
- package/skills/kubernetes/kubernetes-live-rbac-mutation-guard/references/rollback-playbook.md +61 -0
- package/skills/kubernetes/kubernetes-maestro/SKILL.md +45 -0
- package/skills/kubernetes/kubernetes-maestro/metadata.json +24 -0
- package/skills/kubernetes/kubernetes-maestro/references/safety-checklist.md +78 -0
- package/skills/kubernetes/kubernetes-maestro/references/workflow-and-output.md +206 -0
- package/skills/kubernetes/kubernetes-pod-security-admission-review/SKILL.md +43 -0
- package/skills/kubernetes/kubernetes-pod-security-admission-review/metadata.json +28 -0
- package/skills/kubernetes/kubernetes-pod-security-admission-review/references/mcp-and-evidence.md +49 -0
- package/skills/kubernetes/kubernetes-pod-security-admission-review/references/official-sources.md +26 -0
- package/skills/kubernetes/kubernetes-pod-security-admission-review/references/workflow-and-output.md +129 -0
- package/skills/kubernetes/kubernetes-pod-spec-review/SKILL.md +38 -0
- package/skills/kubernetes/kubernetes-pod-spec-review/metadata.json +22 -0
- package/skills/kubernetes/kubernetes-pod-spec-review/references/workflow-and-output.md +229 -0
- package/skills/kubernetes/kubernetes-rbac-review/SKILL.md +38 -0
- package/skills/kubernetes/kubernetes-rbac-review/metadata.json +27 -0
- package/skills/kubernetes/kubernetes-rbac-review/references/mcp-and-evidence.md +34 -0
- package/skills/kubernetes/kubernetes-rbac-review/references/official-sources.md +22 -0
- package/skills/kubernetes/kubernetes-rbac-review/references/workflow-and-output.md +44 -0
- package/skills/kubernetes/kubernetes-workload-identity-review/SKILL.md +43 -0
- package/skills/kubernetes/kubernetes-workload-identity-review/metadata.json +29 -0
- package/skills/kubernetes/kubernetes-workload-identity-review/references/mcp-and-evidence.md +57 -0
- package/skills/kubernetes/kubernetes-workload-identity-review/references/official-sources.md +47 -0
- package/skills/kubernetes/kubernetes-workload-identity-review/references/workflow-and-output.md +166 -0
- package/skills/kyverno/README.md +30 -0
- package/skills/kyverno/kyverno-policy-review/SKILL.md +43 -0
- package/skills/kyverno/kyverno-policy-review/metadata.json +30 -0
- package/skills/kyverno/kyverno-policy-review/references/mcp-and-evidence.md +49 -0
- package/skills/kyverno/kyverno-policy-review/references/official-sources.md +31 -0
- package/skills/kyverno/kyverno-policy-review/references/workflow-and-output.md +106 -0
- package/skills/oci/README.md +63 -0
- package/skills/oci/oci-certificates-issuer-review/SKILL.md +37 -0
- package/skills/oci/oci-certificates-issuer-review/metadata.json +20 -0
- package/skills/oci/oci-certificates-issuer-review/references/workflow-and-output.md +207 -0
- package/skills/oci/oci-live-network-security-rule-guard/SKILL.md +57 -0
- package/skills/oci/oci-live-network-security-rule-guard/metadata.json +28 -0
- package/skills/oci/oci-live-network-security-rule-guard/references/official-sources.md +21 -0
- package/skills/oci/oci-live-network-security-rule-guard/references/permission-model.md +65 -0
- package/skills/oci/oci-live-network-security-rule-guard/references/preflight-commands.md +69 -0
- package/skills/oci/oci-live-network-security-rule-guard/references/rollback-playbook.md +79 -0
- package/skills/opentelemetry/README.md +31 -0
- package/skills/opentelemetry/opentelemetry-collector-config-review/SKILL.md +44 -0
- package/skills/opentelemetry/opentelemetry-collector-config-review/metadata.json +30 -0
- package/skills/opentelemetry/opentelemetry-collector-config-review/references/mcp-and-evidence.md +49 -0
- package/skills/opentelemetry/opentelemetry-collector-config-review/references/official-sources.md +31 -0
- package/skills/opentelemetry/opentelemetry-collector-config-review/references/workflow-and-output.md +155 -0
- package/skills/prometheus/prometheus-alerting-cardinality-review/SKILL.md +38 -0
- package/skills/prometheus/prometheus-alerting-cardinality-review/metadata.json +22 -0
- package/skills/prometheus/prometheus-alerting-cardinality-review/references/workflow-and-output.md +221 -0
- package/skills/sigstore/sigstore-cosign-supply-chain-review/SKILL.md +39 -0
- package/skills/sigstore/sigstore-cosign-supply-chain-review/metadata.json +22 -0
- package/skills/sigstore/sigstore-cosign-supply-chain-review/references/workflow-and-output.md +196 -0
- package/skills/terraform/README.md +29 -0
- package/skills/velero/velero-backup-restore-guard/SKILL.md +41 -0
- package/skills/velero/velero-backup-restore-guard/metadata.json +21 -0
- package/skills/velero/velero-backup-restore-guard/references/safety-checklist.md +40 -0
- package/skills/velero/velero-backup-restore-guard/references/workflow-and-output.md +202 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "kubernetes-pod-security-admission-review",
|
|
3
|
+
"name": "Kubernetes Pod Security Admission Review",
|
|
4
|
+
"type": "skill",
|
|
5
|
+
"provider": "kubernetes",
|
|
6
|
+
"harnesses": [
|
|
7
|
+
"codex",
|
|
8
|
+
"claude-code",
|
|
9
|
+
"cursor",
|
|
10
|
+
"gemini",
|
|
11
|
+
"kiro",
|
|
12
|
+
"other"
|
|
13
|
+
],
|
|
14
|
+
"summary": "Review Kubernetes Pod Security Admission posture across namespace labels, the three profiles (privileged, baseline, restricted), enforce/audit/warn modes, version pinning, exemptions, and the migration from deprecated PodSecurityPolicy.",
|
|
15
|
+
"source_type": "original",
|
|
16
|
+
"official_docs": [
|
|
17
|
+
"https://kubernetes.io/docs/concepts/security/pod-security-admission/",
|
|
18
|
+
"https://kubernetes.io/docs/concepts/security/pod-security-standards/",
|
|
19
|
+
"https://kubernetes.io/docs/tasks/configure-pod-container/enforce-standards-namespace-labels/",
|
|
20
|
+
"https://kubernetes.io/docs/tasks/configure-pod-container/enforce-standards-admission-controller/",
|
|
21
|
+
"https://kubernetes.io/docs/concepts/security/security-checklist/"
|
|
22
|
+
],
|
|
23
|
+
"security_notes": "A production namespace with no PSA label inherits cluster default which is privileged unless overridden. enforce-version latest changes semantics on every Kubernetes minor upgrade. audit and warn without enforce only log violations. PSP migration via kubectl-psp-to-psa shifts enforcement boundary; verify before disabling PSP webhooks.",
|
|
24
|
+
"last_verified": "2026-05-01",
|
|
25
|
+
"path": "skills/kubernetes/kubernetes-pod-security-admission-review",
|
|
26
|
+
"author": "github: Raishin",
|
|
27
|
+
"version": "0.1.0"
|
|
28
|
+
}
|
package/skills/kubernetes/kubernetes-pod-security-admission-review/references/mcp-and-evidence.md
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Evidence Path and Tooling
|
|
2
|
+
|
|
3
|
+
## Evidence path
|
|
4
|
+
|
|
5
|
+
1. Prefer live cluster evidence (`kubectl get namespaces --show-labels`, `kubectl get pods -n <ns> -o yaml`, and the cluster's `AdmissionConfiguration` if accessible).
|
|
6
|
+
2. Fall back to the official Kubernetes documentation: Pod Security Admission, Pod Security Standards, and namespace-label enforcement guide.
|
|
7
|
+
3. Ask only for sanitized namespace YAML, sanitized pod spec excerpts (focus on `securityContext`, `volumes`, `hostNetwork`, `hostPID`, `hostIPC`), and the cluster's PSA admission configuration when current-state proof matters.
|
|
8
|
+
4. Label conclusions as `live evidence`, `documentation-based`, `sanitized user evidence`, or `inference`.
|
|
9
|
+
|
|
10
|
+
## Useful live-evidence commands
|
|
11
|
+
|
|
12
|
+
```shell
|
|
13
|
+
# View PSA labels on every namespace
|
|
14
|
+
kubectl get namespaces --show-labels | grep -E 'pod-security|^NAME'
|
|
15
|
+
|
|
16
|
+
# Detailed namespace labels and annotations
|
|
17
|
+
kubectl get namespace <ns> -o yaml | grep -A20 metadata
|
|
18
|
+
|
|
19
|
+
# Check whether running pods would still admit at a stricter profile
|
|
20
|
+
# (use kubectl-pod-security plugin or apply dry-run with the new label)
|
|
21
|
+
kubectl label namespace <ns> pod-security.kubernetes.io/warn=restricted --overwrite --dry-run=server
|
|
22
|
+
|
|
23
|
+
# Audit-mode violations end up in the audit log (cluster-admin access required)
|
|
24
|
+
# Look for pod-security violations in apiserver audit log
|
|
25
|
+
|
|
26
|
+
# Cluster default PSA configuration (if user has access to control plane)
|
|
27
|
+
kubectl -n kube-system get pod -l component=kube-apiserver -o yaml | grep -A20 admission
|
|
28
|
+
|
|
29
|
+
# Pod security context inspection
|
|
30
|
+
kubectl get pod -n <ns> <pod> -o jsonpath='{.spec.securityContext}'
|
|
31
|
+
kubectl get pod -n <ns> <pod> -o jsonpath='{.spec.containers[*].securityContext}'
|
|
32
|
+
|
|
33
|
+
# List pods that would fail restricted profile
|
|
34
|
+
kubectl get pods -A -o jsonpath='{range .items[?(@.spec.containers[*].securityContext.privileged==true)]}{.metadata.namespace}/{.metadata.name}{"\n"}{end}'
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Cluster state to confirm before review
|
|
38
|
+
|
|
39
|
+
- **Kubernetes version** (`kubectl version`) — PSA stable in 1.25; profile semantics evolve; pin `enforce-version` to a specific minor.
|
|
40
|
+
- **Cluster default profile** (cluster's `AdmissionConfiguration`) — when a namespace has no label, this is what applies.
|
|
41
|
+
- **Cluster exemptions** — the `AdmissionConfiguration` can exempt usernames, runtime classes, and namespaces by name (different from per-namespace label override).
|
|
42
|
+
- **Whether PSP (PodSecurityPolicy) admission is still active** — PSP was removed in 1.25 but some clusters run a PSP-equivalent webhook. Migration tools include `kubectl-psp-to-psa`.
|
|
43
|
+
- **Whether other admission policies (Kyverno, OPA Gatekeeper) layer on top** — PSA is the floor; other engines can be stricter but must not weaken it.
|
|
44
|
+
|
|
45
|
+
## Sanitization rules
|
|
46
|
+
|
|
47
|
+
- Never request kubeconfig contents or apiserver audit log access.
|
|
48
|
+
- Replace identifiable namespace names and pod names with placeholders unless the user provides them.
|
|
49
|
+
- Do not print pod environment variables, init container args, or volume secret content.
|
package/skills/kubernetes/kubernetes-pod-security-admission-review/references/official-sources.md
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Official Sources
|
|
2
|
+
|
|
3
|
+
Load these only when needed:
|
|
4
|
+
|
|
5
|
+
- [Pod Security Admission](https://kubernetes.io/docs/concepts/security/pod-security-admission/) — use as the entry point. Covers labels, modes, version pinning, and the admission controller behavior.
|
|
6
|
+
- [Pod Security Standards](https://kubernetes.io/docs/concepts/security/pod-security-standards/) — use for the exact field-level requirements of `privileged`, `baseline`, and `restricted` profiles.
|
|
7
|
+
- [Enforce Pod Security Standards via namespace labels](https://kubernetes.io/docs/tasks/configure-pod-container/enforce-standards-namespace-labels/) — use for the recommended rollout pattern (`warn` → `audit` → `enforce`).
|
|
8
|
+
- [Enforce Pod Security Standards by configuring the built-in admission controller](https://kubernetes.io/docs/tasks/configure-pod-container/enforce-standards-admission-controller/) — use for the cluster-wide `AdmissionConfiguration` syntax and exemption rules.
|
|
9
|
+
- [Migrating from PodSecurityPolicy](https://kubernetes.io/docs/tasks/configure-pod-container/migrate-from-psp/) — use when the cluster is moving from PSP to PSA.
|
|
10
|
+
- [Kubernetes Security Checklist](https://kubernetes.io/docs/concepts/security/security-checklist/) — use for the broader security context that PSA fits into (RBAC, NetworkPolicy, secrets, etc.).
|
|
11
|
+
- [Configure a Security Context for a Pod or Container](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/) — use when reviewing per-pod `securityContext` hardening (the actual fields PSA evaluates).
|
|
12
|
+
- [seccomp profile for a container](https://kubernetes.io/docs/tutorials/security/seccomp/) — use for `RuntimeDefault` vs `Localhost` profile semantics that the restricted profile requires.
|
|
13
|
+
- [Kubernetes API audit logs](https://kubernetes.io/docs/tasks/debug/debug-cluster/audit/) — use to find admission decisions when PSA mode is `audit`.
|
|
14
|
+
|
|
15
|
+
## Grounded insights worth carrying into the skill
|
|
16
|
+
|
|
17
|
+
- Pod Security Admission was introduced in 1.22 (alpha), promoted to beta in 1.23, and shipped stable in 1.25 — replacing the deprecated PodSecurityPolicy in the same release. Any cluster running 1.25 or later does not have PSP available.
|
|
18
|
+
- Three profiles enforce a fixed set of pod spec constraints: `privileged` (none), `baseline` (deny known escalations), `restricted` (current best-practice hardening). A namespace can have a different profile per mode (`enforce`, `audit`, `warn`).
|
|
19
|
+
- The most common rollout pattern is: set `warn` and `audit` to the target profile, observe admission warnings and audit log violations, fix workloads, then promote `enforce` to the target profile. This avoids breaking running workloads at flip time.
|
|
20
|
+
- A namespace with no PSA label inherits the cluster default. The Kubernetes default is `privileged` unless the cluster admin set a stricter default in `AdmissionConfiguration`. Many production clusters silently run with privileged-equivalent admission because no label was set.
|
|
21
|
+
- Profile semantics evolve across Kubernetes versions. The `enforce-version`, `audit-version`, `warn-version` labels pin profile semantics to a specific Kubernetes minor. Without pinning, a cluster upgrade can suddenly reject pods that previously admitted. Pinning is recommended.
|
|
22
|
+
- Exemptions via `AdmissionConfiguration` (cluster-wide) bypass PSA entirely for the matched username, runtime class, or namespace. These are the broadest escape hatches and should be reviewed regularly. Per-namespace label exemptions (`pod-security.kubernetes.io/enforce: privileged`) are scoped to one namespace and easier to audit.
|
|
23
|
+
- The restricted profile requires `runAsNonRoot: true`, `runAsUser != 0`, `allowPrivilegeEscalation: false`, no `capabilities.add` other than `NET_BIND_SERVICE`, `seccompProfile.type: RuntimeDefault` or `Localhost`, no host namespaces, no host paths, no `hostPort`, and no privileged or unsafe sysctls. Many off-the-shelf operators do not meet this.
|
|
24
|
+
- Kyverno and OPA Gatekeeper can layer on top of PSA — they evaluate after PSA admission. This means a Kyverno policy that allows what PSA denies cannot rescue the pod; PSA's denial is final. Conversely, Kyverno can deny what PSA allows, providing a stricter-than-PSA layer.
|
|
25
|
+
- The `kubectl-psp-to-psa` plugin (community-maintained) translates PSP definitions into the closest equivalent PSA labels. The translation is lossy when PSPs encoded per-pod constraints (e.g., specific `runAsUser` ranges).
|
|
26
|
+
- `system:masters` group bypasses all admission controllers including PSA. Only the cluster-control-plane bootstrap should hold this; never bind real workloads to it.
|
package/skills/kubernetes/kubernetes-pod-security-admission-review/references/workflow-and-output.md
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# Workflow and Output Contract
|
|
2
|
+
|
|
3
|
+
## Workflow
|
|
4
|
+
|
|
5
|
+
### Step 1 — Identify the target scope
|
|
6
|
+
|
|
7
|
+
PSA configuration lives in two places:
|
|
8
|
+
|
|
9
|
+
1. **Per-namespace labels** — `pod-security.kubernetes.io/<mode>: <profile>` and `pod-security.kubernetes.io/<mode>-version: <version>`.
|
|
10
|
+
2. **Cluster `AdmissionConfiguration`** — applies a default profile to namespaces that don't carry a label, and exempts specific namespaces, users, or runtime classes globally.
|
|
11
|
+
|
|
12
|
+
Confirm which scope the review covers — a namespace label change is reversible by flipping the label; a cluster `AdmissionConfiguration` change requires control-plane access and a kube-apiserver restart.
|
|
13
|
+
|
|
14
|
+
Reference: [Pod Security Admission](https://kubernetes.io/docs/concepts/security/pod-security-admission/) and [Enforce standards via namespace labels](https://kubernetes.io/docs/tasks/configure-pod-container/enforce-standards-namespace-labels/).
|
|
15
|
+
|
|
16
|
+
### Step 2 — Identify the active profile and mode
|
|
17
|
+
|
|
18
|
+
Three profiles, defined in [Pod Security Standards](https://kubernetes.io/docs/concepts/security/pod-security-standards/):
|
|
19
|
+
|
|
20
|
+
1. **`privileged`** — unrestricted. No security context constraints. Equivalent to no admission control. Appropriate ONLY for system-level workloads (CNI, CSI drivers, monitoring agents).
|
|
21
|
+
2. **`baseline`** — minimally restrictive. Disallows known privilege escalations. Allows most legitimate application workloads with minimal modification. Recommended floor for application namespaces.
|
|
22
|
+
3. **`restricted`** — heavily restricted, follows current pod hardening best practices. Requires `runAsNonRoot: true`, `seccompProfile: RuntimeDefault`, no capabilities except `NET_BIND_SERVICE`, no host paths or host network, etc.
|
|
23
|
+
|
|
24
|
+
Three modes, applied via labels:
|
|
25
|
+
|
|
26
|
+
1. **`enforce`** — admission denied on violation. Pods that violate are rejected.
|
|
27
|
+
2. **`audit`** — admission allowed; violation recorded in API server audit log.
|
|
28
|
+
3. **`warn`** — admission allowed; violation returned to the user as a warning header (visible in `kubectl apply` output).
|
|
29
|
+
|
|
30
|
+
Each mode/profile combination can have an independent version pin: `pod-security.kubernetes.io/enforce-version: v1.30`.
|
|
31
|
+
|
|
32
|
+
### Step 3 — Audit profile-mode combinations
|
|
33
|
+
|
|
34
|
+
Common configurations and their findings:
|
|
35
|
+
|
|
36
|
+
- **`enforce: restricted`** — production-tier hardening. Verify all running pods admit; otherwise, the next pod restart will fail.
|
|
37
|
+
- **`enforce: baseline`, `audit: restricted`, `warn: restricted`** — common migration pattern. Hard floor at baseline, with restricted violations surfaced for cleanup.
|
|
38
|
+
- **`enforce: baseline`** alone — application namespace minimum. Confirm PSP-equivalent constraints are not assumed by other tooling.
|
|
39
|
+
- **`enforce: privileged`** — only acceptable for system namespaces with documented justification.
|
|
40
|
+
- **No PSA labels at all** — namespace falls back to cluster default. **Critical finding** if cluster default is `privileged` (the Kubernetes default unless changed).
|
|
41
|
+
- **`audit` and/or `warn` set but no `enforce`** — security violations are logged, not blocked. Useful as observability but not as control.
|
|
42
|
+
|
|
43
|
+
### Step 4 — Check whether existing workloads would still admit
|
|
44
|
+
|
|
45
|
+
Before flipping a namespace from `baseline` to `restricted`, verify every running pod meets the stricter profile. Use `--dry-run=server` to ask the API server to evaluate without applying:
|
|
46
|
+
|
|
47
|
+
```shell
|
|
48
|
+
kubectl label namespace <ns> pod-security.kubernetes.io/enforce=restricted --overwrite --dry-run=server
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
This returns warnings for any pod that would be rejected. Review those pods before applying the label.
|
|
52
|
+
|
|
53
|
+
Alternative: set `warn: restricted` first, watch for warnings in apply outputs and audit logs, fix workloads, then promote to `enforce: restricted`.
|
|
54
|
+
|
|
55
|
+
Stress-tests:
|
|
56
|
+
|
|
57
|
+
- Pods with `securityContext.runAsUser: 0` — restricted profile rejects.
|
|
58
|
+
- Pods with `securityContext.privileged: true` — baseline AND restricted reject.
|
|
59
|
+
- Pods with `securityContext.allowPrivilegeEscalation: true` — restricted rejects (baseline allows by default).
|
|
60
|
+
- Pods with `volumes.hostPath` — baseline rejects (only specific paths allowed).
|
|
61
|
+
- Pods with `securityContext.capabilities.add` containing anything beyond `NET_BIND_SERVICE` — restricted rejects.
|
|
62
|
+
- Pods with `securityContext.seccompProfile` not set or set to `Unconfined` — restricted rejects (must be `RuntimeDefault` or `Localhost`).
|
|
63
|
+
|
|
64
|
+
### Step 5 — Audit version pinning
|
|
65
|
+
|
|
66
|
+
`enforce-version`, `audit-version`, `warn-version` pin the profile semantics to a specific Kubernetes minor. Findings:
|
|
67
|
+
|
|
68
|
+
- **No version pin** — profile follows cluster's Kubernetes version. Each upgrade may tighten requirements.
|
|
69
|
+
- **`*-version: latest`** — explicitly tracks the latest profile. Same risk as no pin but with more honesty.
|
|
70
|
+
- **`*-version: v1.24`** on a 1.30 cluster — pinned to an old, less strict version. May allow workloads the current docs say should be denied.
|
|
71
|
+
|
|
72
|
+
Recommended: pin to the cluster's current minor (`v1.30` on a 1.30 cluster) and explicitly bump the pin during cluster upgrade reviews.
|
|
73
|
+
|
|
74
|
+
### Step 6 — Audit cluster-level exemptions
|
|
75
|
+
|
|
76
|
+
`AdmissionConfiguration` exemptions:
|
|
77
|
+
|
|
78
|
+
```yaml
|
|
79
|
+
exemptions:
|
|
80
|
+
usernames: ["system:admin"]
|
|
81
|
+
runtimeClasses: ["sandboxed"]
|
|
82
|
+
namespaces: ["kube-system"]
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Findings:
|
|
86
|
+
|
|
87
|
+
- `usernames` exemption with broad bindings — the exempted user can run any pod regardless of namespace label.
|
|
88
|
+
- `runtimeClasses` exemption for non-sandboxed runtimes — exempts pods using that runtime class entirely.
|
|
89
|
+
- `namespaces` exemption for `kube-system` and operator namespaces — common, but every operator should be reviewed for whether it actually needs to run pods that violate baseline.
|
|
90
|
+
|
|
91
|
+
### Step 7 — Audit migration from PodSecurityPolicy
|
|
92
|
+
|
|
93
|
+
PSP was removed in Kubernetes 1.25. If the user is migrating:
|
|
94
|
+
|
|
95
|
+
- Use `kubectl-psp-to-psa` (or equivalent) to translate existing PSP definitions into PSA labels.
|
|
96
|
+
- The translation is not always exact — PSP allowed per-Pod conditions; PSA is per-namespace.
|
|
97
|
+
- Some PSP capabilities (e.g., specific `runAsUser` ranges, specific FSGroup ranges) cannot be expressed in PSA — Kyverno or OPA Gatekeeper is needed for these.
|
|
98
|
+
- Verify the old PSP webhook is removed AFTER PSA is enforced — running both simultaneously can produce conflicting decisions.
|
|
99
|
+
|
|
100
|
+
Reference: [Migrating from PodSecurityPolicy](https://kubernetes.io/docs/tasks/configure-pod-container/migrate-from-psp/).
|
|
101
|
+
|
|
102
|
+
### Step 8 — Stress-test operational hygiene
|
|
103
|
+
|
|
104
|
+
- Prefer `enforce: baseline` minimum for application namespaces; `enforce: restricted` for tiers without legacy workloads.
|
|
105
|
+
- Prefer pinned `*-version` matching cluster minor.
|
|
106
|
+
- Prefer namespace-by-namespace promotion (`warn` → `audit` → `enforce`) over cluster-wide flips.
|
|
107
|
+
- Prefer per-workload `securityContext` hardening over namespace exemption when one workload needs special access.
|
|
108
|
+
- Verify that other admission policies (Kyverno, OPA Gatekeeper) extend rather than weaken PSA — a downstream policy that allows what PSA denies still results in the pod being rejected by PSA first.
|
|
109
|
+
|
|
110
|
+
## Output
|
|
111
|
+
|
|
112
|
+
Return:
|
|
113
|
+
|
|
114
|
+
- **target**: namespace, namespace set, or cluster `AdmissionConfiguration`,
|
|
115
|
+
- **evidence level**: `live evidence` / `documentation-based` / `sanitized user evidence` / `inference`,
|
|
116
|
+
- **active configuration**: profile and mode per scope, with version pin,
|
|
117
|
+
- **admission impact**: which currently-running pods would be rejected at the proposed profile,
|
|
118
|
+
- **exemption posture**: cluster-level exemptions and per-namespace label overrides,
|
|
119
|
+
- **risk findings** (with severity: high / medium / low),
|
|
120
|
+
- **safest next actions** with sample manifest changes and the recommended `warn` → `audit` → `enforce` rollout,
|
|
121
|
+
- **rollback plan**: how to remove or weaken the label if running workloads break,
|
|
122
|
+
- **assumptions and missing facts**.
|
|
123
|
+
|
|
124
|
+
## Security notes
|
|
125
|
+
|
|
126
|
+
- Never recommend `enforce: privileged` for an application namespace.
|
|
127
|
+
- Never recommend removing the namespace PSA label without a documented replacement (cluster default or another admission engine).
|
|
128
|
+
- Never recommend exempting a namespace cluster-wide without confirming the workloads inside cannot be hardened.
|
|
129
|
+
- Do not print pod environment variables, init container args, or any pod content beyond the security context.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: kubernetes-pod-spec-review
|
|
3
|
+
description: Use this skill when reviewing a Kubernetes Pod spec, Deployment spec, or StatefulSet spec for correctness, security posture, and production-readiness. Trigger on any request to audit, validate, or score a workload manifest.
|
|
4
|
+
metadata:
|
|
5
|
+
author: "github: Raishin"
|
|
6
|
+
version: "0.1.0"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Kubernetes Pod Spec Review
|
|
10
|
+
|
|
11
|
+
## Purpose
|
|
12
|
+
|
|
13
|
+
Review Kubernetes Pod, Deployment, and StatefulSet specifications for probe correctness, resource QoS configuration, securityContext posture, image pull policy safety, secret consumption patterns, topology spread, and termination grace period alignment. Output a structured findings list with severity, evidence, and safe remediation steps — aligned with CKAD domain knowledge and production-readiness standards.
|
|
14
|
+
|
|
15
|
+
## Lean operating rules
|
|
16
|
+
|
|
17
|
+
- Check both `livenessProbe` and `readinessProbe`; flag missing probes as HIGH for Deployments receiving traffic. Flag aggressive `livenessProbe.failureThreshold` (<=2) that kills pods during GC pauses.
|
|
18
|
+
- Review `resources.requests` and `resources.limits`; flag missing requests (unschedulable under pressure) as MEDIUM and flag CPU limits without requests as Burstable QoS risk.
|
|
19
|
+
- Audit `securityContext` at both pod level (`runAsNonRoot`, `seccompProfile`) and container level (`allowPrivilegeEscalation: false`, `readOnlyRootFilesystem: true`, `capabilities.drop: [ALL]`).
|
|
20
|
+
- Flag `latest` image tag combined with `imagePullPolicy: IfNotPresent` as HIGH — image is never refreshed after first pull.
|
|
21
|
+
- Flag Secrets consumed via `envFrom.secretRef` (bulk-mount exposes all keys) as MEDIUM; recommend volume mounts or specific `env.valueFrom.secretKeyRef`.
|
|
22
|
+
- Check `topologySpreadConstraints` for multi-replica Deployments; flag absence as MEDIUM (single AZ failure = full outage).
|
|
23
|
+
- Review `terminationGracePeriodSeconds` against application drain time; flag default 30s for gRPC or database workloads as MEDIUM.
|
|
24
|
+
- Label all findings as live evidence, documentation-based, or inference.
|
|
25
|
+
|
|
26
|
+
## References
|
|
27
|
+
|
|
28
|
+
Load these only when needed:
|
|
29
|
+
|
|
30
|
+
- [Workflow and output contract](references/workflow-and-output.md)
|
|
31
|
+
|
|
32
|
+
## Response minimum
|
|
33
|
+
|
|
34
|
+
- Severity-labeled findings list (CRITICAL / HIGH / MEDIUM / LOW)
|
|
35
|
+
- Evidence source for each finding
|
|
36
|
+
- Specific field path that caused the finding (e.g., `spec.containers[0].livenessProbe`)
|
|
37
|
+
- Recommended remediation with example YAML snippet
|
|
38
|
+
- Overall production-readiness verdict
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "kubernetes-pod-spec-review",
|
|
3
|
+
"name": "Kubernetes Pod Spec Review",
|
|
4
|
+
"type": "skill",
|
|
5
|
+
"provider": "kubernetes",
|
|
6
|
+
"harnesses": ["codex", "claude-code", "cursor", "gemini", "kiro", "other"],
|
|
7
|
+
"summary": "Review Kubernetes Pod, Deployment, and StatefulSet specs for probe correctness, resource QoS, securityContext posture, image pull policy, secret consumption patterns, topology spread, and termination grace period against CKAD-aligned production-readiness standards.",
|
|
8
|
+
"source_type": "original",
|
|
9
|
+
"official_docs": [
|
|
10
|
+
"https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/",
|
|
11
|
+
"https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/",
|
|
12
|
+
"https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/",
|
|
13
|
+
"https://kubernetes.io/docs/concepts/security/pod-security-standards/",
|
|
14
|
+
"https://kubernetes.io/docs/concepts/scheduling-eviction/topology-spread-constraints/",
|
|
15
|
+
"https://kubernetes.io/docs/concepts/workloads/controllers/deployment/"
|
|
16
|
+
],
|
|
17
|
+
"security_notes": "Secrets mounted as environment variables appear in kubectl describe pod output and in /proc/self/environ, accessible to any process in the container. Root containers can write to host paths if hostPath volumes are present. Missing runAsNonRoot allows container breakout to node if combined with hostPath or privileged mode.",
|
|
18
|
+
"last_verified": "2026-05-02",
|
|
19
|
+
"path": "skills/kubernetes/kubernetes-pod-spec-review",
|
|
20
|
+
"author": "github: Raishin",
|
|
21
|
+
"version": "0.1.0"
|
|
22
|
+
}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
# Workflow and Output Contract
|
|
2
|
+
|
|
3
|
+
## Review Workflow
|
|
4
|
+
|
|
5
|
+
### Step 1 — Identify the workload type
|
|
6
|
+
|
|
7
|
+
Determine whether the input is a Pod, Deployment, StatefulSet, DaemonSet, Job, or CronJob spec. The review scope differs:
|
|
8
|
+
|
|
9
|
+
- **Pod / Deployment** — full probe, resource, securityContext, topology spread review
|
|
10
|
+
- **StatefulSet** — same as Deployment plus PVC template review, ordered startup considerations
|
|
11
|
+
- **DaemonSet** — probe review less critical; focus on host namespace usage, privileged mode, resource limits
|
|
12
|
+
- **Job / CronJob** — no readiness probe required; focus on `activeDeadlineSeconds`, `backoffLimit`, resource limits
|
|
13
|
+
|
|
14
|
+
### Step 2 — Probe review
|
|
15
|
+
|
|
16
|
+
```yaml
|
|
17
|
+
# Minimum production-ready probe configuration
|
|
18
|
+
livenessProbe:
|
|
19
|
+
httpGet:
|
|
20
|
+
path: /healthz
|
|
21
|
+
port: 8080
|
|
22
|
+
initialDelaySeconds: 15
|
|
23
|
+
periodSeconds: 20
|
|
24
|
+
failureThreshold: 3 # >=3 to tolerate GC pauses
|
|
25
|
+
timeoutSeconds: 5
|
|
26
|
+
|
|
27
|
+
readinessProbe:
|
|
28
|
+
httpGet:
|
|
29
|
+
path: /ready
|
|
30
|
+
port: 8080
|
|
31
|
+
initialDelaySeconds: 10
|
|
32
|
+
periodSeconds: 10
|
|
33
|
+
failureThreshold: 3
|
|
34
|
+
timeoutSeconds: 3
|
|
35
|
+
|
|
36
|
+
startupProbe: # required if startup > 30s
|
|
37
|
+
httpGet:
|
|
38
|
+
path: /healthz
|
|
39
|
+
port: 8080
|
|
40
|
+
failureThreshold: 30 # 30 * periodSeconds(10) = 300s max startup
|
|
41
|
+
periodSeconds: 10
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**Flags:**
|
|
45
|
+
- Missing `livenessProbe` on a long-running container — HIGH
|
|
46
|
+
- Missing `readinessProbe` on a Deployment that receives traffic — HIGH
|
|
47
|
+
- `livenessProbe.failureThreshold: 1` or `2` — HIGH (kills pod during GC pause)
|
|
48
|
+
- `readinessProbe.initialDelaySeconds` < known startup time — HIGH (probe fails before app ready)
|
|
49
|
+
- Missing `startupProbe` when app startup > 30s — MEDIUM
|
|
50
|
+
|
|
51
|
+
### Step 3 — Resource QoS review
|
|
52
|
+
|
|
53
|
+
```yaml
|
|
54
|
+
resources:
|
|
55
|
+
requests:
|
|
56
|
+
cpu: "250m"
|
|
57
|
+
memory: "256Mi"
|
|
58
|
+
limits:
|
|
59
|
+
cpu: "500m" # CPU limits cause throttling; consider removing if not required
|
|
60
|
+
memory: "512Mi"
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**QoS tier resolution:**
|
|
64
|
+
|
|
65
|
+
| Condition | QoS Class | Risk |
|
|
66
|
+
|-----------|-----------|------|
|
|
67
|
+
| `requests == limits` for all containers | Guaranteed | Lowest eviction priority |
|
|
68
|
+
| `requests` set, `limits` not equal | Burstable | Evicted under node pressure |
|
|
69
|
+
| No `requests`, no `limits` | BestEffort | First evicted under any pressure |
|
|
70
|
+
|
|
71
|
+
**Flags:**
|
|
72
|
+
- No `resources.requests` — MEDIUM (BestEffort QoS, evicted first)
|
|
73
|
+
- `limits.memory` without `requests.memory` — MEDIUM (Burstable, OOM killed under node pressure)
|
|
74
|
+
- `limits.cpu` set to a value significantly lower than typical usage — MEDIUM (CPU throttle)
|
|
75
|
+
- Critical workload without Guaranteed QoS (`requests != limits`) — MEDIUM
|
|
76
|
+
|
|
77
|
+
### Step 4 — securityContext review
|
|
78
|
+
|
|
79
|
+
```yaml
|
|
80
|
+
# Pod-level
|
|
81
|
+
spec:
|
|
82
|
+
securityContext:
|
|
83
|
+
runAsNonRoot: true
|
|
84
|
+
runAsUser: 1000
|
|
85
|
+
seccompProfile:
|
|
86
|
+
type: RuntimeDefault # K8s 1.22+
|
|
87
|
+
|
|
88
|
+
# Container-level
|
|
89
|
+
containers:
|
|
90
|
+
- name: app
|
|
91
|
+
securityContext:
|
|
92
|
+
allowPrivilegeEscalation: false
|
|
93
|
+
readOnlyRootFilesystem: true
|
|
94
|
+
capabilities:
|
|
95
|
+
drop:
|
|
96
|
+
- ALL
|
|
97
|
+
add: [] # only add specific caps if truly required
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
**Flags:**
|
|
101
|
+
- Missing `runAsNonRoot: true` — HIGH (runs as root by default)
|
|
102
|
+
- `allowPrivilegeEscalation: true` or missing — HIGH
|
|
103
|
+
- Missing `readOnlyRootFilesystem: true` — MEDIUM (writable filesystem enables malware persistence)
|
|
104
|
+
- Missing `capabilities.drop: [ALL]` — MEDIUM
|
|
105
|
+
- `privileged: true` — CRITICAL (host-level access)
|
|
106
|
+
- Missing `seccompProfile` — LOW (defaults to unconfined syscall access)
|
|
107
|
+
|
|
108
|
+
### Step 5 — Image pull policy and tag review
|
|
109
|
+
|
|
110
|
+
```yaml
|
|
111
|
+
# Correct for digest-pinned images
|
|
112
|
+
image: myregistry/myapp@sha256:abc123...
|
|
113
|
+
imagePullPolicy: IfNotPresent
|
|
114
|
+
|
|
115
|
+
# Correct for latest or mutable tags
|
|
116
|
+
image: myregistry/myapp:latest
|
|
117
|
+
imagePullPolicy: Always
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
**Flags:**
|
|
121
|
+
- `latest` tag with `imagePullPolicy: IfNotPresent` — HIGH (stale image after first pull)
|
|
122
|
+
- `latest` tag at all — MEDIUM (non-deterministic deployments)
|
|
123
|
+
- No image digest pinning for critical workloads — LOW
|
|
124
|
+
|
|
125
|
+
### Step 6 — Secret and ConfigMap consumption review
|
|
126
|
+
|
|
127
|
+
```yaml
|
|
128
|
+
# PREFERRED: Volume mount (secret not in env, not in describe output)
|
|
129
|
+
volumes:
|
|
130
|
+
- name: db-creds
|
|
131
|
+
secret:
|
|
132
|
+
secretName: db-credentials
|
|
133
|
+
containers:
|
|
134
|
+
- volumeMounts:
|
|
135
|
+
- name: db-creds
|
|
136
|
+
mountPath: /etc/secrets
|
|
137
|
+
readOnly: true
|
|
138
|
+
|
|
139
|
+
# ACCEPTABLE: Specific env var from secret key
|
|
140
|
+
env:
|
|
141
|
+
- name: DB_PASSWORD
|
|
142
|
+
valueFrom:
|
|
143
|
+
secretKeyRef:
|
|
144
|
+
name: db-credentials
|
|
145
|
+
key: password
|
|
146
|
+
|
|
147
|
+
# AVOID: Bulk-mount exposes ALL secret keys including unused ones
|
|
148
|
+
envFrom:
|
|
149
|
+
- secretRef:
|
|
150
|
+
name: db-credentials
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
**Flags:**
|
|
154
|
+
- `envFrom.secretRef` bulk-mount — MEDIUM (all keys exposed to process env and kubectl describe)
|
|
155
|
+
- `env.valueFrom.secretKeyRef` — ACCEPTABLE (only named key exposed)
|
|
156
|
+
- Secret as environment variable (either method) — NOTE (appears in /proc/self/environ)
|
|
157
|
+
|
|
158
|
+
### Step 7 — Topology spread and affinity review
|
|
159
|
+
|
|
160
|
+
```yaml
|
|
161
|
+
# Preferred: topology spread (K8s 1.19+)
|
|
162
|
+
topologySpreadConstraints:
|
|
163
|
+
- maxSkew: 1
|
|
164
|
+
topologyKey: topology.kubernetes.io/zone
|
|
165
|
+
whenUnsatisfiable: DoNotSchedule
|
|
166
|
+
labelSelector:
|
|
167
|
+
matchLabels:
|
|
168
|
+
app: myapp
|
|
169
|
+
|
|
170
|
+
# Also check podAntiAffinity for legacy configs
|
|
171
|
+
affinity:
|
|
172
|
+
podAntiAffinity:
|
|
173
|
+
preferredDuringSchedulingIgnoredDuringExecution:
|
|
174
|
+
- weight: 100
|
|
175
|
+
podAffinityTerm:
|
|
176
|
+
topologyKey: kubernetes.io/hostname
|
|
177
|
+
labelSelector:
|
|
178
|
+
matchLabels:
|
|
179
|
+
app: myapp
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
**Flags:**
|
|
183
|
+
- Multi-replica Deployment (>1 replica) with no `topologySpreadConstraints` and no `podAntiAffinity` — MEDIUM
|
|
184
|
+
- `topologySpreadConstraints` present but `topologyKey: kubernetes.io/hostname` only (no zone spread) — LOW
|
|
185
|
+
- `whenUnsatisfiable: ScheduleAnyway` on a critical workload — LOW (spread not enforced)
|
|
186
|
+
|
|
187
|
+
### Step 8 — Termination grace period review
|
|
188
|
+
|
|
189
|
+
```yaml
|
|
190
|
+
spec:
|
|
191
|
+
terminationGracePeriodSeconds: 60 # increase for gRPC, database draining
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
**Flags:**
|
|
195
|
+
- Default 30s for gRPC servers with long-lived streams — MEDIUM
|
|
196
|
+
- Default 30s for database pods (PostgreSQL, MySQL) that need checkpoint time — MEDIUM
|
|
197
|
+
- `terminationGracePeriodSeconds: 0` — HIGH (immediate SIGKILL, no graceful shutdown)
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## Output Format
|
|
202
|
+
|
|
203
|
+
Return findings in this structure:
|
|
204
|
+
|
|
205
|
+
### Finding: `<short title>`
|
|
206
|
+
|
|
207
|
+
| Field | Value |
|
|
208
|
+
|-------|-------|
|
|
209
|
+
| Severity | CRITICAL / HIGH / MEDIUM / LOW |
|
|
210
|
+
| Field path | `spec.containers[0].livenessProbe` |
|
|
211
|
+
| Evidence | documentation-based / live evidence / inference |
|
|
212
|
+
| Description | What is wrong and why it matters |
|
|
213
|
+
| Remediation | YAML snippet or command |
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
### Overall Verdict
|
|
218
|
+
|
|
219
|
+
| Category | Status |
|
|
220
|
+
|----------|--------|
|
|
221
|
+
| Probes | PASS / FAIL |
|
|
222
|
+
| Resource QoS | PASS / FAIL |
|
|
223
|
+
| Security context | PASS / FAIL |
|
|
224
|
+
| Image hygiene | PASS / FAIL |
|
|
225
|
+
| Secret consumption | PASS / FAIL |
|
|
226
|
+
| Topology spread | PASS / FAIL |
|
|
227
|
+
| Termination grace | PASS / FAIL |
|
|
228
|
+
|
|
229
|
+
**Production-ready:** YES / NO / CONDITIONAL (list conditions)
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: kubernetes-rbac-review
|
|
3
|
+
description: Use this skill for Kubernetes RBAC, Role, ClusterRole, RoleBinding, ClusterRoleBinding, ServiceAccount, workload identity, or least-privilege review tasks. Trigger when the user asks whether cluster access is too broad, how to grant workload permissions safely, or how to audit RBAC state.
|
|
4
|
+
metadata:
|
|
5
|
+
author: github: Raishin
|
|
6
|
+
version: 0.1.0
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Kubernetes RBAC Review
|
|
10
|
+
|
|
11
|
+
## Purpose
|
|
12
|
+
|
|
13
|
+
Review Kubernetes RBAC objects — Roles, ClusterRoles, RoleBindings, ClusterRoleBindings, and ServiceAccounts — against least privilege, namespace scope minimization, and operational safety.
|
|
14
|
+
|
|
15
|
+
## Lean operating rules
|
|
16
|
+
|
|
17
|
+
- Prefer live cluster evidence (`kubectl auth can-i`, `kubectl get rolebinding`, audit logs) when the active client exposes it; otherwise fall back to official Kubernetes documentation and sanitized user evidence.
|
|
18
|
+
- Separate confirmed facts from inference. If state was not queried or shown, say so.
|
|
19
|
+
- Challenge cluster-scoped access granted to workloads that only need namespace-scoped access.
|
|
20
|
+
- Challenge wildcard verbs (`*`), wildcard resources (`*`), and wildcard API groups (`*`) unless explicitly justified.
|
|
21
|
+
- Keep the answer scoped, reversible, least-privilege, and explicit about blockers or unknowns.
|
|
22
|
+
|
|
23
|
+
## References
|
|
24
|
+
|
|
25
|
+
Load these only when needed:
|
|
26
|
+
|
|
27
|
+
- [Evidence path and tooling](references/mcp-and-evidence.md) — use when choosing live cluster evidence, confirming MCP capability, or switching to documentation mode.
|
|
28
|
+
- [Workflow and output contract](references/workflow-and-output.md) — use when executing the full review, applying stress checks, or formatting the final answer.
|
|
29
|
+
- [Official sources](references/official-sources.md) — use when you need the detailed Kubernetes documentation list or source notes.
|
|
30
|
+
|
|
31
|
+
## Response minimum
|
|
32
|
+
|
|
33
|
+
Return, at minimum:
|
|
34
|
+
|
|
35
|
+
- the scoped target and evidence level,
|
|
36
|
+
- the main risks or control gaps,
|
|
37
|
+
- the safest next actions,
|
|
38
|
+
- the assumptions or blockers that prevent stronger conclusions.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "kubernetes-rbac-review",
|
|
3
|
+
"name": "Kubernetes RBAC Review",
|
|
4
|
+
"type": "skill",
|
|
5
|
+
"provider": "kubernetes",
|
|
6
|
+
"harnesses": [
|
|
7
|
+
"codex",
|
|
8
|
+
"claude-code",
|
|
9
|
+
"cursor",
|
|
10
|
+
"gemini",
|
|
11
|
+
"kiro",
|
|
12
|
+
"other"
|
|
13
|
+
],
|
|
14
|
+
"summary": "Review Kubernetes Roles, ClusterRoles, RoleBindings, ClusterRoleBindings, and ServiceAccounts for least-privilege, namespace-scope, and workload identity safety.",
|
|
15
|
+
"source_type": "original",
|
|
16
|
+
"official_docs": [
|
|
17
|
+
"https://kubernetes.io/docs/reference/access-authn-authz/rbac/",
|
|
18
|
+
"https://kubernetes.io/docs/concepts/security/rbac-good-practices/",
|
|
19
|
+
"https://kubernetes.io/docs/reference/access-authn-authz/authorization/",
|
|
20
|
+
"https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/"
|
|
21
|
+
],
|
|
22
|
+
"security_notes": "Do not recommend ClusterAdmin or wildcard bindings unless explicitly justified. Prefer namespace-scoped Roles over ClusterRoles for workloads that do not need cluster-wide access. Do not auto-mount service account tokens unless the workload requires API server access.",
|
|
23
|
+
"last_verified": "2026-05-01",
|
|
24
|
+
"path": "skills/kubernetes/kubernetes-rbac-review",
|
|
25
|
+
"author": "github: Raishin",
|
|
26
|
+
"version": "0.1.0"
|
|
27
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Evidence Path and Tooling
|
|
2
|
+
|
|
3
|
+
## Evidence path
|
|
4
|
+
|
|
5
|
+
1. Prefer live cluster evidence when the active client exposes relevant Kubernetes MCP capabilities or a working `kubectl` context.
|
|
6
|
+
2. Fall back to official Kubernetes documentation when live inspection is unavailable, incomplete, or unsafe.
|
|
7
|
+
3. Ask only for sanitized RBAC YAML or `kubectl` output when current-state proof matters.
|
|
8
|
+
4. Label conclusions as `live evidence`, `documentation-based`, `sanitized user evidence`, or `inference`.
|
|
9
|
+
|
|
10
|
+
## Useful live-evidence commands
|
|
11
|
+
|
|
12
|
+
```shell
|
|
13
|
+
# List all RoleBindings in a namespace
|
|
14
|
+
kubectl get rolebindings -n <namespace> -o yaml
|
|
15
|
+
|
|
16
|
+
# List all ClusterRoleBindings
|
|
17
|
+
kubectl get clusterrolebindings -o yaml
|
|
18
|
+
|
|
19
|
+
# Check effective permissions for a ServiceAccount
|
|
20
|
+
kubectl auth can-i --list --as=system:serviceaccount:<namespace>:<sa-name>
|
|
21
|
+
|
|
22
|
+
# Check a specific verb/resource
|
|
23
|
+
kubectl auth can-i <verb> <resource> --as=system:serviceaccount:<namespace>:<sa-name> -n <namespace>
|
|
24
|
+
|
|
25
|
+
# Describe a Role or ClusterRole
|
|
26
|
+
kubectl describe role <name> -n <namespace>
|
|
27
|
+
kubectl describe clusterrole <name>
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Platform-agnostic execution
|
|
31
|
+
|
|
32
|
+
- Keep examples neutral with placeholders until the user's cluster context and toolchain are known.
|
|
33
|
+
- Do not request kubeconfig files, bearer tokens, service account JWT tokens, or cloud-provider credentials in chat.
|
|
34
|
+
- If a Kubernetes MCP server or kubectl is unavailable, say so and fall back to reviewing sanitized YAML provided by the user.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Official Sources
|
|
2
|
+
|
|
3
|
+
Load these only when needed:
|
|
4
|
+
|
|
5
|
+
- [Using RBAC Authorization](https://kubernetes.io/docs/reference/access-authn-authz/rbac/) — use for Role, ClusterRole, RoleBinding, ClusterRoleBinding structure, aggregation rules, default roles, and `kubectl auth` usage.
|
|
6
|
+
- [RBAC Good Practices](https://kubernetes.io/docs/concepts/security/rbac-good-practices/) — use for least privilege, wildcard cautions, privilege escalation paths, impersonation risks, and workload namespace isolation.
|
|
7
|
+
- [Authorization Overview](https://kubernetes.io/docs/reference/access-authn-authz/authorization/) — use when confirming how Kubernetes evaluates requests and which authorizers are stacked.
|
|
8
|
+
- [Configure Service Accounts for Pods](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/) — use for `automountServiceAccountToken`, dedicated ServiceAccount patterns, and token projection.
|
|
9
|
+
- [Kubernetes Security Checklist](https://kubernetes.io/docs/concepts/security/security-checklist/) — use for a holistic posture check covering RBAC alongside admission, network policies, and pod security.
|
|
10
|
+
- [Bound Service Account Tokens](https://kubernetes.io/docs/reference/access-authn-authz/service-accounts-admin/#bound-service-account-tokens) — use when reviewing projected token lifetimes, audience binding, and migration from legacy auto-mounted tokens.
|
|
11
|
+
|
|
12
|
+
## Grounded insights worth carrying into the skill
|
|
13
|
+
|
|
14
|
+
- Kubernetes RBAC is additive: there are no deny rules. Any binding that grants a permission cannot be overridden by another binding.
|
|
15
|
+
- `pods/exec` and `pods/attach` are equivalent to remote-shell access on any pod; treat both as high-severity grants requiring explicit justification.
|
|
16
|
+
- `pods/portforward` tunnels arbitrary TCP to pod ports; treat as high-severity for database and internal-service workloads.
|
|
17
|
+
- `nodes/proxy` grants proxy access to the kubelet API on every node — this is effectively cluster-admin for node-level operations and is rarely justified for any non-system workload.
|
|
18
|
+
- `secrets` `get`/`list` access at ClusterRole scope means reading every secret in every namespace — almost always over-privileged for a workload.
|
|
19
|
+
- `escalate` on roles/clusterroles, `bind` on bindings, and `impersonate` on users/groups/serviceaccounts are Kubernetes' three dedicated privilege-escalation verbs. Any Role that grants these is high severity regardless of other verb restrictions — they allow the holder to exceed their own permission set.
|
|
20
|
+
- The `system:masters` group bypasses all RBAC checks, including admission webhooks; never bind real workloads to it.
|
|
21
|
+
- Aggregated ClusterRoles (`aggregationRule`) inherit rules from any ClusterRole that matches the label selector — third-party operators can silently expand them.
|
|
22
|
+
- Setting `automountServiceAccountToken: false` on the ServiceAccount (or the Pod spec) is the correct default for workloads that do not call the Kubernetes API.
|