@raishin/vanguard-frontier-agentic 1.3.0 → 1.5.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 +23 -1
- package/agents/kubernetes/README.md +10 -1
- package/agents/kubernetes/kubernetes-live-admission-policy-guard-agent/AGENT.md +12 -0
- package/agents/kubernetes/kubernetes-live-admission-policy-guard-agent/harnesses/claude-code.agent.md +12 -0
- package/agents/kubernetes/kubernetes-live-admission-policy-guard-agent/harnesses/copilot.agent.md +12 -0
- package/agents/kubernetes/kubernetes-live-admission-policy-guard-agent/harnesses/cursor.agent.md +12 -0
- package/agents/kubernetes/kubernetes-live-admission-policy-guard-agent/harnesses/gemini.agent.md +12 -0
- package/agents/kubernetes/kubernetes-live-admission-policy-guard-agent/harnesses/kiro-cli.agent.json +1 -1
- package/agents/kubernetes/kubernetes-live-admission-policy-guard-agent/harnesses/kiro-ide.agent.md +12 -0
- package/agents/kubernetes/kubernetes-live-admission-policy-guard-agent/metadata.json +6 -3
- package/agents/kubernetes/kubernetes-live-admission-policy-guard-agent/references/least-privilege-rbac.yaml +98 -0
- package/agents/kubernetes/kubernetes-live-admission-policy-guard-agent/references/rbac-pre-flight.md +108 -0
- package/agents/kubernetes/kubernetes-live-admission-policy-guard-agent/references/refusal-list.md +112 -0
- package/agents/kubernetes/kubernetes-live-argocd-sync-guard-agent/AGENT.md +13 -1
- package/agents/kubernetes/kubernetes-live-argocd-sync-guard-agent/harnesses/claude-code.agent.md +12 -0
- package/agents/kubernetes/kubernetes-live-argocd-sync-guard-agent/harnesses/copilot.agent.md +12 -0
- package/agents/kubernetes/kubernetes-live-argocd-sync-guard-agent/harnesses/cursor.agent.md +12 -0
- package/agents/kubernetes/kubernetes-live-argocd-sync-guard-agent/harnesses/gemini.agent.md +12 -0
- package/agents/kubernetes/kubernetes-live-argocd-sync-guard-agent/harnesses/kiro-cli.agent.json +1 -1
- package/agents/kubernetes/kubernetes-live-argocd-sync-guard-agent/harnesses/kiro-ide.agent.md +12 -0
- package/agents/kubernetes/kubernetes-live-argocd-sync-guard-agent/metadata.json +6 -3
- package/agents/kubernetes/kubernetes-live-argocd-sync-guard-agent/references/least-privilege-rbac.yaml +92 -0
- package/agents/kubernetes/kubernetes-live-argocd-sync-guard-agent/references/rbac-pre-flight.md +108 -0
- package/agents/kubernetes/kubernetes-live-argocd-sync-guard-agent/references/refusal-list.md +112 -0
- package/agents/kubernetes/kubernetes-live-mesh-policy-guard-agent/AGENT.md +13 -1
- package/agents/kubernetes/kubernetes-live-mesh-policy-guard-agent/harnesses/claude-code.agent.md +12 -0
- package/agents/kubernetes/kubernetes-live-mesh-policy-guard-agent/harnesses/copilot.agent.md +12 -0
- package/agents/kubernetes/kubernetes-live-mesh-policy-guard-agent/harnesses/cursor.agent.md +12 -0
- package/agents/kubernetes/kubernetes-live-mesh-policy-guard-agent/harnesses/gemini.agent.md +12 -0
- package/agents/kubernetes/kubernetes-live-mesh-policy-guard-agent/harnesses/kiro-cli.agent.json +1 -1
- package/agents/kubernetes/kubernetes-live-mesh-policy-guard-agent/harnesses/kiro-ide.agent.md +12 -0
- package/agents/kubernetes/kubernetes-live-mesh-policy-guard-agent/metadata.json +6 -3
- package/agents/kubernetes/kubernetes-live-mesh-policy-guard-agent/references/least-privilege-rbac.yaml +101 -0
- package/agents/kubernetes/kubernetes-live-mesh-policy-guard-agent/references/rbac-pre-flight.md +106 -0
- package/agents/kubernetes/kubernetes-live-mesh-policy-guard-agent/references/refusal-list.md +102 -0
- package/agents/kubernetes/kubernetes-live-network-architecture-mutation-guard-agent/AGENT.md +71 -0
- package/agents/kubernetes/kubernetes-live-network-architecture-mutation-guard-agent/harnesses/claude-code.agent.md +54 -0
- package/agents/kubernetes/kubernetes-live-network-architecture-mutation-guard-agent/harnesses/codex.toml +38 -0
- package/agents/kubernetes/kubernetes-live-network-architecture-mutation-guard-agent/harnesses/copilot.agent.md +54 -0
- package/agents/kubernetes/kubernetes-live-network-architecture-mutation-guard-agent/harnesses/cursor.agent.md +54 -0
- package/agents/kubernetes/kubernetes-live-network-architecture-mutation-guard-agent/harnesses/gemini.agent.md +54 -0
- package/agents/kubernetes/kubernetes-live-network-architecture-mutation-guard-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/kubernetes/kubernetes-live-network-architecture-mutation-guard-agent/harnesses/kiro-ide.agent.md +54 -0
- package/agents/kubernetes/kubernetes-live-network-architecture-mutation-guard-agent/metadata.json +44 -0
- package/agents/kubernetes/kubernetes-live-network-policy-guard-agent/AGENT.md +14 -2
- package/agents/kubernetes/kubernetes-live-network-policy-guard-agent/harnesses/claude-code.agent.md +13 -1
- package/agents/kubernetes/kubernetes-live-network-policy-guard-agent/harnesses/copilot.agent.md +13 -1
- package/agents/kubernetes/kubernetes-live-network-policy-guard-agent/harnesses/cursor.agent.md +13 -1
- package/agents/kubernetes/kubernetes-live-network-policy-guard-agent/harnesses/gemini.agent.md +13 -1
- package/agents/kubernetes/kubernetes-live-network-policy-guard-agent/harnesses/kiro-cli.agent.json +1 -1
- package/agents/kubernetes/kubernetes-live-network-policy-guard-agent/harnesses/kiro-ide.agent.md +13 -1
- package/agents/kubernetes/kubernetes-live-network-policy-guard-agent/metadata.json +6 -3
- package/agents/kubernetes/kubernetes-live-network-policy-guard-agent/references/least-privilege-rbac.yaml +101 -0
- package/agents/kubernetes/kubernetes-live-network-policy-guard-agent/references/rbac-pre-flight.md +106 -0
- package/agents/kubernetes/kubernetes-live-network-policy-guard-agent/references/refusal-list.md +102 -0
- package/agents/kubernetes/kubernetes-live-rbac-mutation-guard-agent/AGENT.md +12 -0
- package/agents/kubernetes/kubernetes-live-rbac-mutation-guard-agent/harnesses/claude-code.agent.md +12 -0
- package/agents/kubernetes/kubernetes-live-rbac-mutation-guard-agent/harnesses/copilot.agent.md +12 -0
- package/agents/kubernetes/kubernetes-live-rbac-mutation-guard-agent/harnesses/cursor.agent.md +12 -0
- package/agents/kubernetes/kubernetes-live-rbac-mutation-guard-agent/harnesses/gemini.agent.md +12 -0
- package/agents/kubernetes/kubernetes-live-rbac-mutation-guard-agent/harnesses/kiro-cli.agent.json +1 -1
- package/agents/kubernetes/kubernetes-live-rbac-mutation-guard-agent/harnesses/kiro-ide.agent.md +12 -0
- package/agents/kubernetes/kubernetes-live-rbac-mutation-guard-agent/metadata.json +6 -3
- package/agents/kubernetes/kubernetes-live-rbac-mutation-guard-agent/references/least-privilege-rbac.yaml +92 -0
- package/agents/kubernetes/kubernetes-live-rbac-mutation-guard-agent/references/rbac-pre-flight.md +115 -0
- package/agents/kubernetes/kubernetes-live-rbac-mutation-guard-agent/references/refusal-list.md +132 -0
- package/agents/kubernetes/kubernetes-live-velero-restore-guard-agent/AGENT.md +15 -3
- package/agents/kubernetes/kubernetes-live-velero-restore-guard-agent/harnesses/claude-code.agent.md +15 -3
- package/agents/kubernetes/kubernetes-live-velero-restore-guard-agent/harnesses/codex.toml +2 -2
- package/agents/kubernetes/kubernetes-live-velero-restore-guard-agent/harnesses/copilot.agent.md +15 -3
- package/agents/kubernetes/kubernetes-live-velero-restore-guard-agent/harnesses/cursor.agent.md +15 -3
- package/agents/kubernetes/kubernetes-live-velero-restore-guard-agent/harnesses/gemini.agent.md +15 -3
- package/agents/kubernetes/kubernetes-live-velero-restore-guard-agent/harnesses/kiro-cli.agent.json +1 -1
- package/agents/kubernetes/kubernetes-live-velero-restore-guard-agent/harnesses/kiro-ide.agent.md +15 -3
- package/agents/kubernetes/kubernetes-live-velero-restore-guard-agent/metadata.json +7 -4
- package/agents/kubernetes/kubernetes-live-velero-restore-guard-agent/references/least-privilege-rbac.yaml +92 -0
- package/agents/kubernetes/kubernetes-live-velero-restore-guard-agent/references/rbac-pre-flight.md +109 -0
- package/agents/kubernetes/kubernetes-live-velero-restore-guard-agent/references/refusal-list.md +122 -0
- package/agents/kubernetes/kubernetes-network-architecture-review-agent/AGENT.md +65 -0
- package/agents/kubernetes/kubernetes-network-architecture-review-agent/harnesses/claude-code.agent.md +48 -0
- package/agents/kubernetes/kubernetes-network-architecture-review-agent/harnesses/codex.toml +37 -0
- package/agents/kubernetes/kubernetes-network-architecture-review-agent/harnesses/copilot.agent.md +48 -0
- package/agents/kubernetes/kubernetes-network-architecture-review-agent/harnesses/cursor.agent.md +48 -0
- package/agents/kubernetes/kubernetes-network-architecture-review-agent/harnesses/gemini.agent.md +48 -0
- package/agents/kubernetes/kubernetes-network-architecture-review-agent/harnesses/kiro-cli.agent.json +5 -0
- package/agents/kubernetes/kubernetes-network-architecture-review-agent/harnesses/kiro-ide.agent.md +48 -0
- package/agents/kubernetes/kubernetes-network-architecture-review-agent/metadata.json +44 -0
- package/agents/kubernetes/kubernetes-psa-review-agent/metadata.json +2 -1
- package/agents/terraform/terraform-reviewer/AGENT.md +2 -1
- package/catalog/agents.json +78 -12
- package/catalog/install-roles.json +8 -4
- package/catalog/skill-manifest.json +521 -422
- package/catalog/skills.json +67 -0
- package/package.json +23 -4
- package/schemas/AGENTS.md +14 -0
- package/schemas/agent.frontmatter.schema.json +89 -0
- package/schemas/agent.schema.json +8 -0
- package/schemas/skill.frontmatter.schema.json +95 -0
- package/scripts/apply-skill-allowed-tools.py +142 -0
- package/scripts/backfill-skill-metadata.py +410 -0
- package/scripts/export-marketplace-agents.mjs +175 -0
- package/skills/argocd/argo-rollouts-progressive-delivery-review/SKILL.md +3 -0
- package/skills/argocd/argocd-gitops-review/SKILL.md +3 -0
- package/skills/aws/aws-agentcore/SKILL.md +3 -0
- package/skills/aws/aws-api-edge-delivery-review/SKILL.md +3 -0
- package/skills/aws/aws-bedrock-agent-security-governor/SKILL.md +3 -0
- package/skills/aws/aws-change-impact-advisor/SKILL.md +3 -0
- package/skills/aws/aws-ci-cd-release-engineer/SKILL.md +3 -0
- package/skills/aws/aws-compliance-evidence-mapper/SKILL.md +3 -0
- package/skills/aws/aws-cost-anomaly-watch-coordinator/SKILL.md +3 -0
- package/skills/aws/aws-cost-optimization-governor/SKILL.md +3 -0
- package/skills/aws/aws-daily-operations-briefing-coordinator/SKILL.md +3 -0
- package/skills/aws/aws-data-protection-backup-steward/SKILL.md +3 -0
- package/skills/aws/aws-deployment-hotfix-operator/SKILL.md +3 -0
- package/skills/aws/aws-devops-agent-skill-designer/SKILL.md +3 -0
- package/skills/aws/aws-dynamodb-data-modeling-performance-review/SKILL.md +3 -0
- package/skills/aws/aws-ec2-compute-operations-steward/SKILL.md +3 -0
- package/skills/aws/aws-ecs-fargate-platform-operator/SKILL.md +3 -0
- package/skills/aws/aws-ecs-service-remediation-operator/SKILL.md +3 -0
- package/skills/aws/aws-eks-platform-operator/SKILL.md +3 -0
- package/skills/aws/aws-event-driven-architecture-review/SKILL.md +3 -0
- package/skills/aws/aws-generative-ai-developer/SKILL.md +3 -0
- package/skills/aws/aws-iac-change-safety-review/SKILL.md +3 -0
- package/skills/aws/aws-iac-patch-executor/SKILL.md +3 -0
- package/skills/aws/aws-iam-least-privilege-review/SKILL.md +3 -0
- package/skills/aws/aws-kms-secrets-lifecycle-steward/SKILL.md +3 -0
- package/skills/aws/aws-landing-zone-governor/SKILL.md +3 -0
- package/skills/aws/aws-live-deployment-guarded-operator/SKILL.md +3 -0
- package/skills/aws/aws-live-ecs-rollout-guard/SKILL.md +3 -0
- package/skills/aws/aws-live-iac-change-guard/SKILL.md +3 -0
- package/skills/aws/aws-live-pipeline-approval-operator/SKILL.md +3 -0
- package/skills/aws/aws-live-serverless-release-guard/SKILL.md +3 -0
- package/skills/aws/aws-maestro/SKILL.md +3 -0
- package/skills/aws/aws-migration-cutover-architect/SKILL.md +3 -0
- package/skills/aws/aws-network-architect/SKILL.md +3 -0
- package/skills/aws/aws-non-destructive-task-automation-advisor/SKILL.md +3 -0
- package/skills/aws/aws-observability-incident-responder/SKILL.md +3 -0
- package/skills/aws/aws-pipeline-fix-operator/SKILL.md +3 -0
- package/skills/aws/aws-private-ca-issuer-review/SKILL.md +3 -0
- package/skills/aws/aws-rds-aurora-performance-investigator/SKILL.md +3 -0
- package/skills/aws/aws-resilience-bcdr-review/SKILL.md +3 -0
- package/skills/aws/aws-s3-data-perimeter-governor/SKILL.md +3 -0
- package/skills/aws/aws-security-posture-hardening/SKILL.md +3 -0
- package/skills/aws/aws-serverless-production-readiness/SKILL.md +3 -0
- package/skills/aws/aws-serverless-rollout-corrector/SKILL.md +3 -0
- package/skills/aws/aws-solution-architect/SKILL.md +3 -0
- package/skills/aws/aws-ticket-triage-escalation-coordinator/SKILL.md +3 -0
- package/skills/azure/azure-ai-foundry-ops-governor/SKILL.md +3 -0
- package/skills/azure/azure-aks-platform-operator/SKILL.md +3 -0
- package/skills/azure/azure-app-service-production-readiness/SKILL.md +3 -0
- package/skills/azure/azure-cosmosdb-application-developer/SKILL.md +3 -0
- package/skills/azure/azure-cosmosdb-performance-investigator/SKILL.md +3 -0
- package/skills/azure/azure-cosmosdb-platform-operator/SKILL.md +3 -0
- package/skills/azure/azure-cost-estimation-review/SKILL.md +3 -0
- package/skills/azure/azure-cost-optimization-governor/SKILL.md +3 -0
- package/skills/azure/azure-entra-id-specialist/SKILL.md +3 -0
- package/skills/azure/azure-governance-policy-guardrails/SKILL.md +3 -0
- package/skills/azure/azure-identity-governance-review/SKILL.md +3 -0
- package/skills/azure/azure-key-vault-secret-lifecycle-auditor/SKILL.md +3 -0
- package/skills/azure/azure-keyvault-certificate-issuer-review/SKILL.md +3 -0
- package/skills/azure/azure-landing-zone-architect/SKILL.md +3 -0
- package/skills/azure/azure-live-aks-rollout-guard/SKILL.md +3 -0
- package/skills/azure/azure-live-app-service-slot-swap-guard/SKILL.md +3 -0
- package/skills/azure/azure-live-arm-deployment-stack-guard/SKILL.md +3 -0
- package/skills/azure/azure-live-cost-budget-action-guard/SKILL.md +3 -0
- package/skills/azure/azure-live-entra-role-assignment-guard/SKILL.md +3 -0
- package/skills/azure/azure-live-keyvault-rotation-purge-guard/SKILL.md +3 -0
- package/skills/azure/azure-live-pim-jit-activation-guard/SKILL.md +3 -0
- package/skills/azure/azure-maestro/SKILL.md +3 -0
- package/skills/azure/azure-migrate-landing-zone-cutover/SKILL.md +3 -0
- package/skills/azure/azure-network-topology-review/SKILL.md +3 -0
- package/skills/azure/azure-observability-investigator/SKILL.md +3 -0
- package/skills/azure/azure-platform-automation-devops/SKILL.md +3 -0
- package/skills/azure/azure-private-endpoint-adoption-planner/SKILL.md +3 -0
- package/skills/azure/azure-rbac-review/SKILL.md +3 -0
- package/skills/azure/azure-resilience-bcdr-review/SKILL.md +3 -0
- package/skills/azure/azure-resource-health-incident-triage/SKILL.md +3 -0
- package/skills/azure/azure-role-selector/SKILL.md +3 -0
- package/skills/azure/azure-security-posture-hardening/SKILL.md +3 -0
- package/skills/azure/azure-subscription-resource-organization/SKILL.md +3 -0
- package/skills/backstage/backstage-scaffolder-template-review/SKILL.md +3 -0
- package/skills/cert-manager/cert-manager-issuer-trust-review/SKILL.md +3 -0
- package/skills/cilium/cilium-network-policy-review/SKILL.md +3 -0
- package/skills/falco/falco-runtime-threat-rules-review/SKILL.md +3 -0
- package/skills/finops/finops-cloud-price-advisor/SKILL.md +3 -0
- package/skills/fluxcd/fluxcd-kustomization-helmrelease-review/SKILL.md +3 -0
- package/skills/istio/istio-ambient-mesh-review/SKILL.md +3 -0
- package/skills/kubernetes/README.md +5 -1
- package/skills/kubernetes/external-secrets-operator-review/SKILL.md +3 -0
- package/skills/kubernetes/kubecost-chargeback-allocation-review/SKILL.md +3 -0
- package/skills/kubernetes/kubernetes-live-network-architecture-mutation-guard/SKILL.md +82 -0
- package/skills/kubernetes/kubernetes-live-network-architecture-mutation-guard/metadata.json +33 -0
- package/skills/kubernetes/kubernetes-live-network-architecture-mutation-guard/references/least-privilege-rbac.yaml +210 -0
- package/skills/kubernetes/kubernetes-live-network-architecture-mutation-guard/references/official-sources.md +41 -0
- package/skills/kubernetes/kubernetes-live-network-architecture-mutation-guard/references/permitted-mutations.md +173 -0
- package/skills/kubernetes/kubernetes-live-network-architecture-mutation-guard/references/rbac-pre-flight.md +252 -0
- package/skills/kubernetes/kubernetes-live-network-architecture-mutation-guard/references/refusal-list.md +313 -0
- package/skills/kubernetes/kubernetes-live-network-architecture-mutation-guard/references/rollback-patterns.md +103 -0
- package/skills/kubernetes/kubernetes-live-rbac-mutation-guard/SKILL.md +3 -0
- package/skills/kubernetes/kubernetes-maestro/SKILL.md +3 -0
- package/skills/kubernetes/kubernetes-maestro/references/safety-checklist.md +1 -1
- package/skills/kubernetes/kubernetes-maestro/references/workflow-and-output.md +57 -5
- package/skills/kubernetes/kubernetes-network-architecture-review/SKILL.md +84 -0
- package/skills/kubernetes/kubernetes-network-architecture-review/metadata.json +34 -0
- package/skills/kubernetes/kubernetes-network-architecture-review/references/dataplane-and-cni.md +89 -0
- package/skills/kubernetes/kubernetes-network-architecture-review/references/dns-and-discovery.md +120 -0
- package/skills/kubernetes/kubernetes-network-architecture-review/references/mcp-and-evidence.md +53 -0
- package/skills/kubernetes/kubernetes-network-architecture-review/references/multi-cluster-and-egress.md +69 -0
- package/skills/kubernetes/kubernetes-network-architecture-review/references/official-sources.md +54 -0
- package/skills/kubernetes/kubernetes-network-architecture-review/references/service-gateway-routing.md +108 -0
- package/skills/kubernetes/kubernetes-network-architecture-review/references/troubleshooting-playbook.md +100 -0
- package/skills/kubernetes/kubernetes-pod-security-admission-review/SKILL.md +3 -0
- package/skills/kubernetes/kubernetes-pod-spec-review/SKILL.md +3 -0
- package/skills/kubernetes/kubernetes-rbac-review/SKILL.md +3 -0
- package/skills/kubernetes/kubernetes-workload-identity-review/SKILL.md +3 -0
- package/skills/kyverno/kyverno-policy-review/SKILL.md +3 -0
- package/skills/oci/oci-autonomous-database-architect/SKILL.md +3 -0
- package/skills/oci/oci-certificates-issuer-review/SKILL.md +3 -0
- package/skills/oci/oci-cloud-guard-responder/SKILL.md +3 -0
- package/skills/oci/oci-compute-instance-agent-operator/SKILL.md +3 -0
- package/skills/oci/oci-compute-platform-operator/SKILL.md +3 -0
- package/skills/oci/oci-cost-finops-analyst/SKILL.md +3 -0
- package/skills/oci/oci-database-platform-dba/SKILL.md +3 -0
- package/skills/oci/oci-dbtools-sql-analyst/SKILL.md +3 -0
- package/skills/oci/oci-devops-container-platform-engineer/SKILL.md +3 -0
- package/skills/oci/oci-exadata-database-architect/SKILL.md +3 -0
- package/skills/oci/oci-exadata-platform-architect/SKILL.md +3 -0
- package/skills/oci/oci-fusion-apps-environment-operator/SKILL.md +3 -0
- package/skills/oci/oci-goldengate-replication-operator/SKILL.md +3 -0
- package/skills/oci/oci-identity-access-governor/SKILL.md +3 -0
- package/skills/oci/oci-iot-digital-twin-engineer/SKILL.md +3 -0
- package/skills/oci/oci-limits-capacity-planner/SKILL.md +3 -0
- package/skills/oci/oci-live-autonomous-db-lifecycle-guard/SKILL.md +3 -0
- package/skills/oci/oci-live-cost-budget-runaway-guard/SKILL.md +3 -0
- package/skills/oci/oci-live-iam-policy-compartment-guard/SKILL.md +3 -0
- package/skills/oci/oci-live-network-security-rule-guard/SKILL.md +3 -0
- package/skills/oci/oci-live-oke-rollout-guard/SKILL.md +3 -0
- package/skills/oci/oci-live-resource-manager-stack-guard/SKILL.md +3 -0
- package/skills/oci/oci-live-vault-key-destruction-guard/SKILL.md +3 -0
- package/skills/oci/oci-load-balancer-traffic-engineer/SKILL.md +3 -0
- package/skills/oci/oci-maestro/SKILL.md +3 -0
- package/skills/oci/oci-migration-cutover-architect/SKILL.md +3 -0
- package/skills/oci/oci-multi-cloud-architect/SKILL.md +3 -0
- package/skills/oci/oci-mysql-heatwave-ai-specialist/SKILL.md +3 -0
- package/skills/oci/oci-network-architect/SKILL.md +3 -0
- package/skills/oci/oci-observability-incident-responder/SKILL.md +3 -0
- package/skills/oci/oci-recovery-service-operator/SKILL.md +3 -0
- package/skills/oci/oci-registry-artifact-governor/SKILL.md +3 -0
- package/skills/oci/oci-resource-search-inventory-analyst/SKILL.md +3 -0
- package/skills/oci/oci-security-compliance-reviewer/SKILL.md +3 -0
- package/skills/oci/oci-solution-architect/SKILL.md +3 -0
- package/skills/oci/oci-storage-backup-steward/SKILL.md +3 -0
- package/skills/oci/oci-support-incident-coordinator/SKILL.md +3 -0
- package/skills/oci/oracle-oci-mcp-grounded-advisor/SKILL.md +3 -0
- package/skills/opentelemetry/opentelemetry-collector-config-review/SKILL.md +3 -0
- package/skills/prometheus/prometheus-alerting-cardinality-review/SKILL.md +3 -0
- package/skills/sigstore/sigstore-cosign-supply-chain-review/SKILL.md +3 -0
- package/skills/terraform/terraform-maestro/SKILL.md +3 -0
- package/skills/velero/velero-backup-restore-guard/SKILL.md +5 -2
- package/skills/velero/velero-backup-restore-guard/references/safety-checklist.md +1 -1
- package/skills/velero/velero-backup-restore-guard/references/workflow-and-output.md +17 -8
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: kubernetes-live-network-architecture-mutation-guard
|
|
3
|
+
description: Guard live kubectl apply, patch, or create operations on Kubernetes networking *architecture* surface — Service spec (`internalTrafficPolicy`, `externalTrafficPolicy`, `topology-mode`, `trafficDistribution`), CoreDNS Corefile, NodeLocal DNSCache install, Gateway API resources (Gateway / HTTPRoute / GRPCRoute / TLSRoute / ReferenceGrant), and ClusterMesh peer Secrets. HARD REFUSE one-way doors (CNI replacement, kube-proxy mode swap, MTU change, Pod / Service CIDR resize, namespace deletion). Pre-flight `kubectl auth can-i` matrix against a least-privilege ServiceAccount before any write. Use only when an intentional architecture-level networking mutation is requested against a confirmed cluster target with a documented rollback path.
|
|
4
|
+
allowed-tools: Bash Read Edit Grep Glob WebFetch
|
|
5
|
+
metadata:
|
|
6
|
+
author: "github: Raishin"
|
|
7
|
+
version: "0.1.0"
|
|
8
|
+
updated: "2026-05-08"
|
|
9
|
+
category: networking
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Kubernetes Live Network Architecture Mutation Guard
|
|
13
|
+
|
|
14
|
+
## Purpose
|
|
15
|
+
|
|
16
|
+
Act as the guarded live operator for low-blast-radius, reversible architecture-level networking mutations. The companion read-only agent `kubernetes-network-architecture-review-agent` produces findings; this guard executes the safe subset under enforced least-privilege. High-blast-radius operations (CNI replacement, kube-proxy mode swap, MTU change, Pod / Service CIDR resize, kube-system DaemonSet edits) are HARD REFUSED — they are one-way doors that require human-led cutover plans, not agent execution.
|
|
17
|
+
|
|
18
|
+
## When to use
|
|
19
|
+
|
|
20
|
+
Use this skill when:
|
|
21
|
+
|
|
22
|
+
- A `Service` needs an `internalTrafficPolicy` / `externalTrafficPolicy` / `service.kubernetes.io/topology-mode` / `spec.trafficDistribution` patch.
|
|
23
|
+
- A `ConfigMap/coredns` Corefile change is required (e.g. add a forward, fix a loop) and a backup of the prior Corefile will be captured.
|
|
24
|
+
- A NodeLocal DNSCache install or upgrade is required (under explicit human gate).
|
|
25
|
+
- Gateway API resources (`Gateway`, `HTTPRoute`, `GRPCRoute`, `TLSRoute`, `ReferenceGrant`) are being created or patched.
|
|
26
|
+
- A Cilium ClusterMesh peer `Secret` is being created in a known namespace under explicit human gate.
|
|
27
|
+
|
|
28
|
+
Do NOT use this skill when:
|
|
29
|
+
|
|
30
|
+
- The change replaces or uninstalls a CNI.
|
|
31
|
+
- The change swaps kube-proxy mode (iptables ↔ IPVS ↔ nftables ↔ Cilium kube-proxy replacement).
|
|
32
|
+
- The change adjusts node MTU.
|
|
33
|
+
- The change resizes Pod CIDR or Service CIDR.
|
|
34
|
+
- The change deletes a `Namespace`, a `kube-system` `DaemonSet`/`Deployment`, a `CustomResourceDefinition`, or a broad `Secret`.
|
|
35
|
+
|
|
36
|
+
For these, refer the user to a human-led cutover plan; the architecture review agent can produce the plan but no agent in this repo will execute it.
|
|
37
|
+
|
|
38
|
+
## Pre-flight RBAC self-check (mandatory)
|
|
39
|
+
|
|
40
|
+
Before any mutation, run the matrix from `references/rbac-pre-flight.md`. The matrix is grounded against `kubernetes.io/docs/concepts/security/rbac-good-practices`. Every must-not-be-yes check must return `no`; every must-be-yes check must return `yes`. Any deviation: refuse to act and tell the user the binding is over-scoped.
|
|
41
|
+
|
|
42
|
+
If the operator's principal returns `yes` to `kubectl auth can-i '*' '*' --all-namespaces` (i.e. it is `cluster-admin` or in `system:masters`), refuse. Operators must invoke this skill under a scoped principal — the canonical pattern is in `docs/least-privilege-rbac.md`.
|
|
43
|
+
|
|
44
|
+
## Lean operating rules
|
|
45
|
+
|
|
46
|
+
- Prefer live cluster evidence from `kubectl` when available; fall back to upstream documentation (kubernetes.io, gateway-api.sigs.k8s.io, docs.cilium.io, coredns.io) and sanitized YAML provided by the user.
|
|
47
|
+
- **HARD REFUSE** the one-way doors listed in `references/refusal-list.md`. Do not negotiate.
|
|
48
|
+
- Do not execute any mutation until cluster context, namespace (if scoped), target object name, exact change delta, and a captured pre-mutation `kubectl get ... -o yaml` baseline are all explicit.
|
|
49
|
+
- Capture the current state of the target object as `/tmp/<resource>.before.yaml` (or equivalent path) as the rollback baseline before any write. If the baseline cannot be captured, refuse.
|
|
50
|
+
- Prefer `kubectl patch` over `kubectl apply` when patching specific fields, and prefer `kubectl apply -f baseline.yaml` over `kubectl delete` for rollback.
|
|
51
|
+
- For CoreDNS Corefile changes: keep the prior `ConfigMap` revision captured as `coredns.before.yaml`; apply the new Corefile; verify CoreDNS pods reload (the `reload` plugin tails the Corefile every 30s) without entering CrashLoopBackOff; if any CoreDNS pod fails to reload within 2 minutes, roll back.
|
|
52
|
+
- For Gateway API changes: confirm the `GatewayClass.spec.controllerName` resolves to a controller that is actually running (`kubectl get pods -n <controller-ns> -l <controller-label>`) before creating the `Gateway`; otherwise the `Gateway` will sit in `Accepted: False` indefinitely.
|
|
53
|
+
- For ClusterMesh peer `Secret` creation: confirm the destination namespace is the documented Cilium ClusterMesh namespace (typically `kube-system` for Cilium installations using `kubectl apply` patterns, or `cilium` when Helm-installed with non-default namespace) and the secret name matches the peer cluster identifier exactly. Refuse on any name mismatch.
|
|
54
|
+
- If the proposed change touches a security boundary (e.g. setting `spec.allowedRoutes.namespaces.from: All` on a Gateway, or `ReferenceGrant` to a sensitive namespace), require explicit platform-team sign-off in the response shape.
|
|
55
|
+
- If the target, approval state, baseline capture, or rollback verb is ambiguous, push back and refuse.
|
|
56
|
+
- Never print kubeconfig contents, ServiceAccount tokens, bearer tokens, ClusterMesh peer Secret data fields, or raw cluster credentials. Summarize sanitized evidence only.
|
|
57
|
+
- **Refuse to read or process credentials offered by the operator.** If the user volunteers a kubeconfig file path, pastes a token, or offers a peer Secret payload, refuse to read it. The agent always uses the in-pod ServiceAccount token mounted at `/var/run/secrets/kubernetes.io/serviceaccount/token` and rejects any other credential source. This refusal applies even when the user insists "just this once."
|
|
58
|
+
- Load references only when needed.
|
|
59
|
+
|
|
60
|
+
## References
|
|
61
|
+
|
|
62
|
+
Load these only when needed:
|
|
63
|
+
|
|
64
|
+
- [Permitted mutations](references/permitted-mutations.md) — the explicit allowlist of mutations this guard will execute and the verb-by-verb safety contract for each.
|
|
65
|
+
- [Refusal list](references/refusal-list.md) — the explicit HARD REFUSE list of one-way-door operations and the rationale for each. Includes the cluster-side blast-radius if the refusal is bypassed.
|
|
66
|
+
- [RBAC pre-flight](references/rbac-pre-flight.md) — the `kubectl auth can-i` matrix that runs before any mutation, with grounding to `kubernetes.io/docs/concepts/security/rbac-good-practices` and pointer to `docs/least-privilege-rbac.md`.
|
|
67
|
+
- [Rollback patterns](references/rollback-patterns.md) — per-mutation-type rollback verb, baseline capture path, and post-rollback verification.
|
|
68
|
+
- [Official sources](references/official-sources.md) — authoritative upstream documentation links.
|
|
69
|
+
|
|
70
|
+
## Response minimum
|
|
71
|
+
|
|
72
|
+
Return, at minimum:
|
|
73
|
+
|
|
74
|
+
- confirmed cluster context (cluster name, namespace where applicable, principal acting),
|
|
75
|
+
- pre-flight RBAC self-check result (matrix output, must-not rows confirmed `no`, must-be rows confirmed `yes`),
|
|
76
|
+
- pre-mutation baseline path (`/tmp/<resource>.before.yaml`),
|
|
77
|
+
- proposed mutation as the exact `kubectl patch` / `kubectl apply` / `kubectl create` command,
|
|
78
|
+
- blast-radius assessment (which workloads, namespaces, or external systems are affected),
|
|
79
|
+
- approval status with explicit human sign-off requirement when the change touches a security boundary,
|
|
80
|
+
- rollback verb (`kubectl apply -f /tmp/<resource>.before.yaml` for additive; specific delete only when the resource was the agent's own creation),
|
|
81
|
+
- post-mutation verification command (Service patch: `kubectl get endpointslice -l kubernetes.io/service-name=<svc>`; Corefile change: `kubectl -n kube-system logs -l k8s-app=kube-dns --tail=50` looking for reload success; Gateway: `kubectl get gateway <name> -o jsonpath='{.status.conditions}'`),
|
|
82
|
+
- explicit `REFUSED` response with the matching rule from `references/refusal-list.md` if the requested mutation is on the hard-refuse list.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "kubernetes-live-network-architecture-mutation-guard",
|
|
3
|
+
"name": "Kubernetes Live Network Architecture Mutation Guard",
|
|
4
|
+
"type": "skill",
|
|
5
|
+
"provider": "kubernetes",
|
|
6
|
+
"harnesses": [
|
|
7
|
+
"codex",
|
|
8
|
+
"claude-code",
|
|
9
|
+
"cursor",
|
|
10
|
+
"gemini",
|
|
11
|
+
"kiro",
|
|
12
|
+
"other"
|
|
13
|
+
],
|
|
14
|
+
"summary": "Guard live kubectl apply/patch/create operations on networking architecture surface — Service spec (internalTrafficPolicy, externalTrafficPolicy, topology-mode, trafficDistribution), CoreDNS Corefile, NodeLocal DNSCache install, Gateway API resources, and ClusterMesh peer Secrets. HARD REFUSE one-way doors (CNI replacement, kube-proxy mode swap, MTU change, Pod / Service CIDR resize, namespace deletion). Pre-flight kubectl auth can-i matrix against a least-privilege ServiceAccount before any write.",
|
|
15
|
+
"source_type": "original",
|
|
16
|
+
"official_docs": [
|
|
17
|
+
"https://kubernetes.io/docs/concepts/security/rbac-good-practices/",
|
|
18
|
+
"https://kubernetes.io/docs/reference/access-authn-authz/rbac/",
|
|
19
|
+
"https://kubernetes.io/docs/reference/kubectl/generated/kubectl_auth/kubectl_auth_can-i/",
|
|
20
|
+
"https://kubernetes.io/docs/concepts/services-networking/service-traffic-policy/",
|
|
21
|
+
"https://kubernetes.io/docs/concepts/services-networking/topology-aware-routing/",
|
|
22
|
+
"https://kubernetes.io/docs/tasks/administer-cluster/nodelocaldns/",
|
|
23
|
+
"https://gateway-api.sigs.k8s.io/api-types/gateway/",
|
|
24
|
+
"https://gateway-api.sigs.k8s.io/api-types/httproute/",
|
|
25
|
+
"https://coredns.io/plugins/reload/",
|
|
26
|
+
"https://docs.cilium.io/en/stable/network/clustermesh/clustermesh/"
|
|
27
|
+
],
|
|
28
|
+
"security_notes": "This skill is bound to a ServiceAccount with deliberately omitted verbs: no `delete` cluster-wide, no operations on `namespaces` / `customresourcedefinitions` / `kube-system` DaemonSets and Deployments / broad `secrets`. Pre-flight `kubectl auth can-i` matrix MUST run before any mutation; refuses if any must-not check returns `yes` (binding over-scoped) or if operator is in `system:masters` (RBAC bypass). HARD REFUSE list covers one-way doors that are out-of-scope for any agent: CNI replacement, kube-proxy mode swap, MTU change, Pod / Service CIDR resize. CoreDNS Corefile changes require backup capture and post-mutation reload verification within 2 minutes. Gateway resources require GatewayClass controller liveness check before creation. ClusterMesh peer Secret data fields must never be printed or logged.",
|
|
29
|
+
"last_verified": "2026-05-08",
|
|
30
|
+
"path": "skills/kubernetes/kubernetes-live-network-architecture-mutation-guard",
|
|
31
|
+
"author": "github: Raishin",
|
|
32
|
+
"version": "0.1.0"
|
|
33
|
+
}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
# =====================================================================
|
|
2
|
+
# Least-privilege RBAC for kubernetes-live-network-architecture-mutation-guard-agent
|
|
3
|
+
#
|
|
4
|
+
# Apply BEFORE running the agent.
|
|
5
|
+
# Authoring contract: docs/least-privilege-rbac.md
|
|
6
|
+
# Pre-flight matrix: references/rbac-pre-flight.md
|
|
7
|
+
# Refusal list: references/refusal-list.md (cluster-side enforcement of these omissions)
|
|
8
|
+
#
|
|
9
|
+
# Audit:
|
|
10
|
+
# SA="system:serviceaccount:vanguard-system:vanguard-network-arch-guard"
|
|
11
|
+
# kubectl auth can-i delete namespaces --as=$SA # must return: no
|
|
12
|
+
# kubectl auth can-i patch services -A --as=$SA # must return: yes
|
|
13
|
+
#
|
|
14
|
+
# Per upstream kubernetes.io/docs/concepts/security/rbac-good-practices:
|
|
15
|
+
# "Avoid wildcard permissions, especially to all resources, as this grants
|
|
16
|
+
# access to current and future object types."
|
|
17
|
+
# =====================================================================
|
|
18
|
+
apiVersion: v1
|
|
19
|
+
kind: Namespace
|
|
20
|
+
metadata:
|
|
21
|
+
name: vanguard-system
|
|
22
|
+
labels:
|
|
23
|
+
pod-security.kubernetes.io/enforce: restricted
|
|
24
|
+
pod-security.kubernetes.io/enforce-version: latest
|
|
25
|
+
app.kubernetes.io/managed-by: vanguard-frontier
|
|
26
|
+
---
|
|
27
|
+
apiVersion: v1
|
|
28
|
+
kind: ServiceAccount
|
|
29
|
+
metadata:
|
|
30
|
+
name: vanguard-network-arch-guard
|
|
31
|
+
namespace: vanguard-system
|
|
32
|
+
annotations:
|
|
33
|
+
vanguard.frontier/agent: "kubernetes-live-network-architecture-mutation-guard-agent"
|
|
34
|
+
vanguard.frontier/scope: "least-privilege-network-architecture"
|
|
35
|
+
vanguard.frontier/contract: "docs/least-privilege-rbac.md"
|
|
36
|
+
automountServiceAccountToken: true
|
|
37
|
+
---
|
|
38
|
+
apiVersion: rbac.authorization.k8s.io/v1
|
|
39
|
+
kind: ClusterRole
|
|
40
|
+
metadata:
|
|
41
|
+
name: vanguard-network-arch-guard
|
|
42
|
+
rules:
|
|
43
|
+
# ---- READ across networking architecture surface ----
|
|
44
|
+
- apiGroups: [""]
|
|
45
|
+
resources: ["services", "endpoints", "nodes"]
|
|
46
|
+
verbs: ["get", "list", "watch"]
|
|
47
|
+
- apiGroups: ["discovery.k8s.io"]
|
|
48
|
+
resources: ["endpointslices"]
|
|
49
|
+
verbs: ["get", "list", "watch"]
|
|
50
|
+
- apiGroups: ["gateway.networking.k8s.io"]
|
|
51
|
+
resources:
|
|
52
|
+
- "gatewayclasses"
|
|
53
|
+
- "gateways"
|
|
54
|
+
- "httproutes"
|
|
55
|
+
- "grpcroutes"
|
|
56
|
+
- "tlsroutes"
|
|
57
|
+
- "tcproutes"
|
|
58
|
+
- "udproutes"
|
|
59
|
+
- "referencegrants"
|
|
60
|
+
verbs: ["get", "list", "watch"]
|
|
61
|
+
# ---- WRITE on Service spec (low blast radius, reversible) ----
|
|
62
|
+
- apiGroups: [""]
|
|
63
|
+
resources: ["services"]
|
|
64
|
+
verbs: ["patch"]
|
|
65
|
+
# NOTE: "delete" verb DELIBERATELY OMITTED. Rollback uses `kubectl apply -f baseline.yaml`.
|
|
66
|
+
# NOTE: "update" verb omitted in favor of "patch" for narrower change semantics.
|
|
67
|
+
# NOTE: CoreDNS ConfigMap read/write is intentionally ABSENT from this ClusterRole.
|
|
68
|
+
# resourceNames on a ClusterRole restricts only the object name, not the namespace;
|
|
69
|
+
# a ClusterRole rule would let the SA patch any ConfigMap named "coredns" in ANY
|
|
70
|
+
# namespace. A namespaced Role/RoleBinding in kube-system (below) provides the
|
|
71
|
+
# correct least-privilege scope. See docs/least-privilege-rbac.md §Threat model.
|
|
72
|
+
# ---- WRITE on Gateway API resources (user-owned, not control plane) ----
|
|
73
|
+
- apiGroups: ["gateway.networking.k8s.io"]
|
|
74
|
+
resources:
|
|
75
|
+
- "gateways"
|
|
76
|
+
- "httproutes"
|
|
77
|
+
- "grpcroutes"
|
|
78
|
+
- "tlsroutes"
|
|
79
|
+
- "tcproutes"
|
|
80
|
+
- "udproutes"
|
|
81
|
+
- "referencegrants"
|
|
82
|
+
verbs: ["create", "patch"]
|
|
83
|
+
# NOTE: "delete" verb DELIBERATELY OMITTED on Gateway API resources.
|
|
84
|
+
# Rollback to absent state is performed by a human-confirmed operation, not by this agent.
|
|
85
|
+
# NOTE: "gatewayclasses" is read-only; GatewayClass is installed by the controller's Helm chart.
|
|
86
|
+
# =====================================================================
|
|
87
|
+
# DELIBERATELY ABSENT — DO NOT add unless you accept the listed risk.
|
|
88
|
+
# This list is exhaustive against the destructive operations enumerated
|
|
89
|
+
# in references/refusal-list.md. The binding is deny-by-default: anything
|
|
90
|
+
# not granted above is denied at the API server. New attack vectors that
|
|
91
|
+
# emerge in future Kubernetes releases are denied automatically.
|
|
92
|
+
#
|
|
93
|
+
# === Namespaces & finalizers ===
|
|
94
|
+
# apiGroups: [""], resources: ["namespaces"] -> delete kube-system / cilium / istio-system
|
|
95
|
+
# patch with metadata.finalizers paths on any resource -> bypass namespace / PV / CRD finalizer protection
|
|
96
|
+
#
|
|
97
|
+
# === Workload writes in control-plane namespaces ===
|
|
98
|
+
# apiGroups: [""], resources: ["pods"] -> exec / delete on control-plane pods
|
|
99
|
+
# apiGroups: [""], resources: ["pods/exec"] -> shell into cilium-agent / kube-proxy / coredns
|
|
100
|
+
# apiGroups: [""], resources: ["pods/portforward"] -> NetworkPolicy bypass to any reachable Service
|
|
101
|
+
# apiGroups: [""], resources: ["pods/proxy"] -> proxy traffic via apiserver to pod
|
|
102
|
+
# apiGroups: [""], resources: ["pods/binding"] -> manual Pod-to-Node binding, scheduler bypass
|
|
103
|
+
# apiGroups: [""], resources: ["pods/eviction"] -> bypass PodDisruptionBudgets in some configs
|
|
104
|
+
# apiGroups: ["apps"], resources: ["daemonsets"], verbs: write -> remove cilium / kube-proxy / node-local-dns
|
|
105
|
+
# apiGroups: ["apps"], resources: ["deployments"], verbs: write -> remove ingress controllers / mesh control planes
|
|
106
|
+
# apiGroups: ["apps"], resources: ["statefulsets"], verbs: write -> remove etcd-replica / clustered controllers
|
|
107
|
+
#
|
|
108
|
+
# === Node lifecycle ===
|
|
109
|
+
# apiGroups: [""], resources: ["nodes"], verbs: ["patch", "update", "delete"] -> drain / cordon / delete nodes
|
|
110
|
+
# apiGroups: [""], resources: ["nodes/proxy"] -> direct kubelet API, bypasses some RBAC
|
|
111
|
+
# apiGroups: ["coordination.k8s.io"], resources: ["leases"] -> Lease in kube-node-lease, fake node liveness
|
|
112
|
+
#
|
|
113
|
+
# === Secrets & credentials ===
|
|
114
|
+
# apiGroups: [""], resources: ["secrets"] -> cluster-wide credential exposure
|
|
115
|
+
# apiGroups: [""], resources: ["serviceaccounts/token"] -> mint tokens for arbitrary SAs (TokenRequest)
|
|
116
|
+
# apiGroups: ["certificates.k8s.io"], any verb -> approve CSRs, especially with system:masters group
|
|
117
|
+
# apiGroups: ["authentication.k8s.io"], any verb -> tokenreviews, impersonation primitives
|
|
118
|
+
#
|
|
119
|
+
# === Cluster-extension surface (admission, aggregation, scheduling) ===
|
|
120
|
+
# apiGroups: ["admissionregistration.k8s.io"] -> mutating/validating webhook configs (admission bypass)
|
|
121
|
+
# apiGroups: ["apiregistration.k8s.io"] -> APIService aggregation hijack
|
|
122
|
+
# apiGroups: ["apiextensions.k8s.io"] -> CRD install / uninstall
|
|
123
|
+
# apiGroups: ["scheduling.k8s.io"] -> PriorityClass system-cluster-critical / system-node-critical
|
|
124
|
+
# apiGroups: ["policy"], resources: ["poddisruptionbudgets"], verbs: write -> remove eviction protection
|
|
125
|
+
#
|
|
126
|
+
# === Networking control plane ===
|
|
127
|
+
# apiGroups: [""], resources: ["endpoints"], verbs: write -> race with EndpointSlice controller, redirect Service traffic
|
|
128
|
+
# apiGroups: ["discovery.k8s.io"], resources: ["endpointslices"], verbs: write -> same race
|
|
129
|
+
# apiGroups: ["networking.k8s.io"], resources: ["ingressclasses"], verbs: write -> break Ingress controller binding
|
|
130
|
+
# apiGroups: ["networking.k8s.io"], resources: ["networkpolicies"] -> delegated to cilium-network-policy-review
|
|
131
|
+
# apiGroups: ["cilium.io"], resources: ["ciliumnetworkpolicies", "ciliumclusterwidenetworkpolicies"] -> delegated
|
|
132
|
+
# apiGroups: ["security.istio.io"], resources: ["authorizationpolicies", "peerauthentications"] -> delegated
|
|
133
|
+
#
|
|
134
|
+
# === Storage ===
|
|
135
|
+
# apiGroups: ["storage.k8s.io"], resources: ["storageclasses"], verbs: write -> remove default StorageClass, break PVC provisioning
|
|
136
|
+
# apiGroups: [""], resources: ["persistentvolumes"], verbs: write -> orphan cloud volumes
|
|
137
|
+
#
|
|
138
|
+
# === RBAC self-modification ===
|
|
139
|
+
# apiGroups: ["rbac.authorization.k8s.io"] -> binding self-modification, privilege escalation
|
|
140
|
+
#
|
|
141
|
+
# === Wildcards (always anti-pattern) ===
|
|
142
|
+
# any "*" verb or "*" resource -> per upstream RBAC good practices, grants future objects
|
|
143
|
+
#
|
|
144
|
+
# === Cross-cutting verbs ===
|
|
145
|
+
# any "delete" verb on cluster-scoped or namespaced resources -> rollback is `apply -f baseline.yaml`, never delete
|
|
146
|
+
#
|
|
147
|
+
# Add ClusterMesh peer Secret write access (resourceName-locked, narrow
|
|
148
|
+
# namespace) only when the operator explicitly opts in for ClusterMesh
|
|
149
|
+
# peering and accepts the additional review checklist in
|
|
150
|
+
# references/permitted-mutations.md. The narrow scope must be expressed
|
|
151
|
+
# both in the Role (resourceNames: [<peer-cluster-id>]) and in admission
|
|
152
|
+
# policy (Kyverno rule limiting Secret data field shape).
|
|
153
|
+
# =====================================================================
|
|
154
|
+
---
|
|
155
|
+
apiVersion: rbac.authorization.k8s.io/v1
|
|
156
|
+
kind: ClusterRoleBinding
|
|
157
|
+
metadata:
|
|
158
|
+
name: vanguard-network-arch-guard
|
|
159
|
+
subjects:
|
|
160
|
+
- kind: ServiceAccount
|
|
161
|
+
name: vanguard-network-arch-guard
|
|
162
|
+
namespace: vanguard-system
|
|
163
|
+
roleRef:
|
|
164
|
+
kind: ClusterRole
|
|
165
|
+
name: vanguard-network-arch-guard
|
|
166
|
+
apiGroup: rbac.authorization.k8s.io
|
|
167
|
+
---
|
|
168
|
+
# =====================================================================
|
|
169
|
+
# Namespaced Role + RoleBinding for CoreDNS ConfigMap access.
|
|
170
|
+
# A ClusterRole with resourceNames restricts only the object name, not
|
|
171
|
+
# the namespace, so the SA would be able to patch any ConfigMap named
|
|
172
|
+
# "coredns" cluster-wide. This Role is bound only in kube-system,
|
|
173
|
+
# providing the correct least-privilege scope.
|
|
174
|
+
# =====================================================================
|
|
175
|
+
apiVersion: rbac.authorization.k8s.io/v1
|
|
176
|
+
kind: Role
|
|
177
|
+
metadata:
|
|
178
|
+
name: vanguard-network-arch-guard-coredns
|
|
179
|
+
namespace: kube-system
|
|
180
|
+
annotations:
|
|
181
|
+
vanguard.frontier/agent: "kubernetes-live-network-architecture-mutation-guard-agent"
|
|
182
|
+
vanguard.frontier/contract: "docs/least-privilege-rbac.md"
|
|
183
|
+
rules:
|
|
184
|
+
# Broad read in kube-system — needed to inspect ConfigMap state before patching.
|
|
185
|
+
- apiGroups: [""]
|
|
186
|
+
resources: ["configmaps"]
|
|
187
|
+
verbs: ["get", "list", "watch"]
|
|
188
|
+
# Patch locked to the single ConfigMap that holds the CoreDNS Corefile.
|
|
189
|
+
# NOTE: "delete" verb DELIBERATELY OMITTED. Rollback uses `kubectl apply -f baseline.yaml`.
|
|
190
|
+
- apiGroups: [""]
|
|
191
|
+
resources: ["configmaps"]
|
|
192
|
+
resourceNames: ["coredns"]
|
|
193
|
+
verbs: ["patch"]
|
|
194
|
+
---
|
|
195
|
+
apiVersion: rbac.authorization.k8s.io/v1
|
|
196
|
+
kind: RoleBinding
|
|
197
|
+
metadata:
|
|
198
|
+
name: vanguard-network-arch-guard-coredns
|
|
199
|
+
namespace: kube-system
|
|
200
|
+
annotations:
|
|
201
|
+
vanguard.frontier/agent: "kubernetes-live-network-architecture-mutation-guard-agent"
|
|
202
|
+
vanguard.frontier/contract: "docs/least-privilege-rbac.md"
|
|
203
|
+
subjects:
|
|
204
|
+
- kind: ServiceAccount
|
|
205
|
+
name: vanguard-network-arch-guard
|
|
206
|
+
namespace: vanguard-system
|
|
207
|
+
roleRef:
|
|
208
|
+
kind: Role
|
|
209
|
+
name: vanguard-network-arch-guard-coredns
|
|
210
|
+
apiGroup: rbac.authorization.k8s.io
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Official sources
|
|
2
|
+
|
|
3
|
+
Authoritative upstream documentation for the surfaces this guard mutates.
|
|
4
|
+
|
|
5
|
+
## RBAC and authorization
|
|
6
|
+
|
|
7
|
+
- [RBAC Good Practices](https://kubernetes.io/docs/concepts/security/rbac-good-practices/) — the foundational guidance this guard implements: minimal privilege, no wildcards, no `cluster-admin` for routine work, no `system:masters` group membership.
|
|
8
|
+
- [Using RBAC Authorization](https://kubernetes.io/docs/reference/access-authn-authz/rbac/) — the API reference for `Role` / `ClusterRole` / `RoleBinding` / `ClusterRoleBinding`.
|
|
9
|
+
- [`kubectl auth can-i`](https://kubernetes.io/docs/reference/kubectl/generated/kubectl_auth/kubectl_auth_can-i/) — the pre-flight matrix syntax.
|
|
10
|
+
- [User Impersonation](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#user-impersonation) — the recommended pattern: low-privileged operator with `impersonate` rights on the agent's ServiceAccount.
|
|
11
|
+
|
|
12
|
+
## Service traffic policy and topology-aware routing
|
|
13
|
+
|
|
14
|
+
- [Service Internal Traffic Policy](https://kubernetes.io/docs/concepts/services-networking/service-traffic-policy/) — `internalTrafficPolicy` and `externalTrafficPolicy` semantics.
|
|
15
|
+
- [Topology Aware Routing](https://kubernetes.io/docs/concepts/services-networking/topology-aware-routing/) — `service.kubernetes.io/topology-mode: Auto` annotation and `spec.trafficDistribution` field.
|
|
16
|
+
|
|
17
|
+
## CoreDNS
|
|
18
|
+
|
|
19
|
+
- [CoreDNS `kubernetes` plugin](https://coredns.io/plugins/kubernetes/) — the in-cluster DNS plugin reference.
|
|
20
|
+
- [CoreDNS `reload` plugin](https://coredns.io/plugins/reload/) — Corefile change detection (default 30s poll).
|
|
21
|
+
- [CoreDNS `loop` plugin](https://coredns.io/plugins/loop/) — recursion-loop detection (silent failure mode if absent).
|
|
22
|
+
- [CoreDNS `health` plugin](https://coredns.io/plugins/health/) — liveness probe target.
|
|
23
|
+
|
|
24
|
+
## NodeLocal DNSCache
|
|
25
|
+
|
|
26
|
+
- [Using NodeLocal DNSCache in Kubernetes Clusters](https://kubernetes.io/docs/tasks/administer-cluster/nodelocaldns/) — install manifest, the `__PILLAR__` token substitutions, and the kube-proxy / Cilium kube-proxy replacement preconditions.
|
|
27
|
+
|
|
28
|
+
## Gateway API
|
|
29
|
+
|
|
30
|
+
- [Gateway API](https://gateway-api.sigs.k8s.io/) — the SIG site (authoritative).
|
|
31
|
+
- [`Gateway` resource](https://gateway-api.sigs.k8s.io/api-types/gateway/) — the listener model and `allowedRoutes` semantics.
|
|
32
|
+
- [`HTTPRoute`](https://gateway-api.sigs.k8s.io/api-types/httproute/) — HTTP route reference.
|
|
33
|
+
- [`GRPCRoute`](https://gateway-api.sigs.k8s.io/api-types/grpcroute/) — gRPC route reference. **GA / Standard channel since Gateway API v1.1.0.**
|
|
34
|
+
- [`ReferenceGrant`](https://gateway-api.sigs.k8s.io/api-types/referencegrant/) — cross-namespace reference authorization.
|
|
35
|
+
- [Gateway API Versioning](https://gateway-api.sigs.k8s.io/concepts/versioning/) — Standard vs Experimental channel semantics.
|
|
36
|
+
|
|
37
|
+
## Cilium ClusterMesh
|
|
38
|
+
|
|
39
|
+
- [Setting up Cluster Mesh](https://docs.cilium.io/en/stable/network/clustermesh/clustermesh/) — peer Secret structure, namespace, and CA trust setup.
|
|
40
|
+
- [ClusterMesh Troubleshooting](https://docs.cilium.io/en/stable/operations/troubleshooting/) — `cilium clustermesh status`, `cilium-dbg troubleshoot clustermesh`, and the KVStoreMesh `kvstoremesh-dbg troubleshoot` command.
|
|
41
|
+
- [KVStoreMesh command reference](https://docs.cilium.io/en/stable/cmdref/clustermesh-apiserver_kvstoremesh/) — `--clustermesh-cache-ttl` (default `0s` means "never revoked"), `--global-ready-timeout` (default 10m).
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
# Permitted mutations
|
|
2
|
+
|
|
3
|
+
This is the explicit allowlist. Any mutation outside this list MUST be either rejected by the prompt rules OR refused by the cluster RBAC binding.
|
|
4
|
+
|
|
5
|
+
## Service spec patches (low blast radius, reversible)
|
|
6
|
+
|
|
7
|
+
### `internalTrafficPolicy` / `externalTrafficPolicy`
|
|
8
|
+
|
|
9
|
+
Reversible field on `v1.Service`. Default is `Cluster`; `Local` constrains routing to node-local endpoints.
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# Capture baseline
|
|
13
|
+
kubectl get svc <name> -n <ns> -o yaml > /tmp/svc-<name>.before.yaml
|
|
14
|
+
|
|
15
|
+
# Apply the patch
|
|
16
|
+
kubectl patch svc <name> -n <ns> --type=merge \
|
|
17
|
+
-p '{"spec":{"externalTrafficPolicy":"Cluster"}}'
|
|
18
|
+
|
|
19
|
+
# Verify EndpointSlices still serve the Service
|
|
20
|
+
kubectl get endpointslice -n <ns> -l kubernetes.io/service-name=<name>
|
|
21
|
+
|
|
22
|
+
# Rollback
|
|
23
|
+
kubectl apply -f /tmp/svc-<name>.before.yaml
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Refusal triggers inside this mutation type:
|
|
27
|
+
- Setting `externalTrafficPolicy: Local` on a Service whose backend Pods are not present on every Node that the LoadBalancer health-check targets — blackhole risk.
|
|
28
|
+
- Setting `internalTrafficPolicy: Local` on a Service consumed cluster-wide where backends are not co-located with consumers on every Node.
|
|
29
|
+
|
|
30
|
+
### `service.kubernetes.io/topology-mode: Auto` annotation
|
|
31
|
+
|
|
32
|
+
Annotation, additive. Only applies when `Service` is multi-zone with sufficient endpoints per zone.
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
kubectl annotate svc <name> -n <ns> \
|
|
36
|
+
service.kubernetes.io/topology-mode=Auto --overwrite
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Rollback: `kubectl annotate svc <name> -n <ns> service.kubernetes.io/topology-mode-`
|
|
40
|
+
|
|
41
|
+
### `spec.trafficDistribution` field (KEP-4444)
|
|
42
|
+
|
|
43
|
+
Newer API; supersedes the annotation when both are set. Field-level patch on `v1.Service`.
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
kubectl patch svc <name> -n <ns> --type=merge \
|
|
47
|
+
-p '{"spec":{"trafficDistribution":"PreferClose"}}'
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Rollback: `kubectl patch svc <name> -n <ns> --type=json -p='[{"op":"remove","path":"/spec/trafficDistribution"}]'`
|
|
51
|
+
|
|
52
|
+
## CoreDNS Corefile patch (medium blast radius, reversible with backup)
|
|
53
|
+
|
|
54
|
+
The CoreDNS `reload` plugin polls the Corefile every 30 seconds. If the new Corefile is invalid, CoreDNS rejects the reload and continues serving the previous config — but if the pod restarts for any other reason, it will fail to start. Always have a baseline.
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# Capture baseline (CRITICAL — never skip)
|
|
58
|
+
kubectl get cm coredns -n kube-system -o yaml > /tmp/coredns.before.yaml
|
|
59
|
+
|
|
60
|
+
# Apply
|
|
61
|
+
kubectl apply -f /tmp/coredns.new.yaml
|
|
62
|
+
|
|
63
|
+
# Verify reload (look for "Reloading complete" in logs within 60 seconds)
|
|
64
|
+
kubectl -n kube-system logs -l k8s-app=kube-dns --tail=50 --since=2m | grep -i "reload"
|
|
65
|
+
|
|
66
|
+
# Verify no CrashLoopBackOff
|
|
67
|
+
kubectl -n kube-system get pods -l k8s-app=kube-dns
|
|
68
|
+
|
|
69
|
+
# If any pod is unhealthy — rollback
|
|
70
|
+
kubectl apply -f /tmp/coredns.before.yaml
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Refusal triggers:
|
|
74
|
+
- New Corefile lacks the `reload` plugin (would prevent future zero-downtime updates).
|
|
75
|
+
- New Corefile lacks the `loop` plugin (CoreDNS forward-loop detection).
|
|
76
|
+
- New Corefile lacks the `health` plugin (liveness probe target removed).
|
|
77
|
+
- New Corefile lacks the `kubernetes` plugin or its `pods insecure` mode set to anything other than the cluster's documented standard.
|
|
78
|
+
- `forward .` target is changed to a private IP without confirming reachability from CoreDNS pod network.
|
|
79
|
+
|
|
80
|
+
## NodeLocal DNSCache install / upgrade (medium blast radius, requires explicit human gate)
|
|
81
|
+
|
|
82
|
+
Manifest from upstream `kubernetes/dns` repository (`nodelocaldns.yaml`). The install adds a `DaemonSet` and patches kube-proxy iptables / IPVS rules to redirect DNS traffic to the local cache. **This is a node-wide control-plane change**; refuse without an explicit human go-ahead even though the manifest itself is documented.
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
# Capture cluster DNS service IP for the manifest's __PILLAR__LOCAL__DNS__ token
|
|
86
|
+
kubectl get svc -n kube-system kube-dns -o jsonpath='{.spec.clusterIP}'
|
|
87
|
+
|
|
88
|
+
# Apply the upstream-rendered manifest (with values substituted)
|
|
89
|
+
kubectl apply -f /tmp/nodelocaldns-rendered.yaml
|
|
90
|
+
|
|
91
|
+
# Verify rollout — every Node must have a Ready node-local-dns pod within 5 minutes
|
|
92
|
+
kubectl rollout status ds/node-local-dns -n kube-system --timeout=5m
|
|
93
|
+
|
|
94
|
+
# Rollback (uninstall — high impact, plan before applying)
|
|
95
|
+
kubectl delete -f /tmp/nodelocaldns-rendered.yaml
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Refusal triggers:
|
|
99
|
+
- Cluster does not run kube-proxy or Cilium kube-proxy replacement (NodeLocalDNS depends on a kube-proxy mode that supports the iptables / IPVS redirect).
|
|
100
|
+
- The `DaemonSet` request lacks `resources.limits.memory` (NodeLocal DNSCache OOM is a known node-wide DNS outage).
|
|
101
|
+
- The `DaemonSet` request lacks a `PodDisruptionBudget`.
|
|
102
|
+
- Node selector excludes any node — partial DNS coverage is worse than none.
|
|
103
|
+
|
|
104
|
+
## Gateway API resources (medium blast radius, reversible)
|
|
105
|
+
|
|
106
|
+
### `Gateway` resource
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
# Pre-check: GatewayClass must reference a controller that is actually running
|
|
110
|
+
GWC=$(yq '.spec.gatewayClassName' /tmp/gw.yaml)
|
|
111
|
+
CONTROLLER=$(kubectl get gatewayclass $GWC -o jsonpath='{.spec.controllerName}')
|
|
112
|
+
# Confirm controller pods are Ready before applying
|
|
113
|
+
|
|
114
|
+
kubectl apply -f /tmp/gw.yaml
|
|
115
|
+
kubectl wait --for=condition=Programmed gateway/<name> -n <ns> --timeout=2m
|
|
116
|
+
|
|
117
|
+
# Status verification
|
|
118
|
+
kubectl get gateway <name> -n <ns> -o jsonpath='{.status.conditions}'
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Refusal triggers:
|
|
122
|
+
- `GatewayClass` does not exist or its controller is not running.
|
|
123
|
+
- `spec.allowedRoutes.namespaces.from: All` without an accompanying `ReferenceGrant` strategy — security boundary expansion.
|
|
124
|
+
- `Listener` overlap on (port, protocol, hostname) with existing Gateway in same scope.
|
|
125
|
+
|
|
126
|
+
### `HTTPRoute` / `GRPCRoute` / `TLSRoute`
|
|
127
|
+
|
|
128
|
+
GA / Standard channel since Gateway API v1.1.0 (per `gateway-api.sigs.k8s.io/api-types/grpcroute`).
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
kubectl apply -f /tmp/route.yaml
|
|
132
|
+
kubectl wait --for=condition=Accepted httproute/<name> -n <ns> --timeout=1m
|
|
133
|
+
|
|
134
|
+
# Status verification — Accepted: True AND ResolvedRefs: True per parent
|
|
135
|
+
kubectl get httproute <name> -n <ns> -o jsonpath='{.status.parents}'
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Refusal triggers:
|
|
139
|
+
- Route attaches to a Gateway that is not in `Programmed: True`.
|
|
140
|
+
- `parentRefs` reference a Gateway in another namespace without a matching `ReferenceGrant`.
|
|
141
|
+
|
|
142
|
+
### `ReferenceGrant`
|
|
143
|
+
|
|
144
|
+
Cross-namespace authorization for routes. Always-additive; deletion can break in-flight routes.
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
kubectl apply -f /tmp/refgrant.yaml
|
|
148
|
+
# No status conditions; verify by querying the route's ResolvedRefs.
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
## Cilium ClusterMesh peer Secret (medium blast radius, requires explicit human gate)
|
|
152
|
+
|
|
153
|
+
Creates a `Secret` in the Cilium namespace whose data field carries the peer cluster's etcd client certificate, key, and CA. **Never log or print the data fields.**
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
# Capture baseline (confirm absence)
|
|
157
|
+
kubectl get secret cilium-clustermesh -n kube-system 2>&1 | tee /tmp/clustermesh-pre.txt
|
|
158
|
+
|
|
159
|
+
# Apply the peer secret — secret data is sensitive
|
|
160
|
+
kubectl apply -f /tmp/clustermesh-peer.yaml
|
|
161
|
+
|
|
162
|
+
# Verify ClusterMesh comes up
|
|
163
|
+
kubectl exec -n kube-system ds/cilium -- cilium clustermesh status
|
|
164
|
+
|
|
165
|
+
# Rollback
|
|
166
|
+
kubectl delete secret cilium-clustermesh -n kube-system
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Refusal triggers:
|
|
170
|
+
- Secret destination namespace does not match the documented Cilium ClusterMesh namespace for this cluster.
|
|
171
|
+
- Secret name does not exactly match the peer cluster identifier.
|
|
172
|
+
- Secret data contains plaintext that looks like a CA or client key but is not properly base64-encoded for the `Secret` `data` field.
|
|
173
|
+
- ClusterMesh peer `policy-default-local-cluster` flag has not been considered (delegate to `cilium-network-policy-review-agent`).
|