⚙️

DataFlow Analytics — Kyverno Policy Suite

Motor de Políticas Nativo de Kubernetes · GKE v1.29 · Kyverno v1.12

Conjunto completo de políticas de validación, mutación, generación y verificación de imágenes para securizar los entornos Kubernetes de DataFlow Analytics SL.

● Kyverno v1.12 activo
● 9 ClusterPolicies
● 3 entornos configurados
● cosign image verification
Generado por CULTIVA IA · 2026-06-16

4

Políticas Validación

🔧

3

Políticas Mutación

2

Políticas Generación

🔏

1

Verificación Imágenes

🛡️

0

Violaciones Producción

Hallazgos Auditoría Pre-Kyverno
Critical
Contenedores privilegiados
7
Pods corriendo con privileged: true en producción. Riesgo de escape de contenedor.
High
Tag :latest en producción
12
Imágenes sin pin de versión. Causó incident de regresión el mes pasado.
Medium
Sin resource limits
40%
OOMKill recurrentes. 3 namespaces sin quota provocaron saturación del cluster.
Resuelto con Kyverno
Políticas activas
9
ClusterPolicies desplegadas. Bloqueo activo en producción, auditoría en dev/staging.
Tabla de Aplicación por Entorno
Política Tipo Descripción production staging dev
require-resource-limits
Validate CPU y memory limits obligatorios en todos los Pods ENFORCE AUDIT AUDIT
disallow-privileged
Validate Bloquea contenedores con privileged: true ENFORCE ENFORCE AUDIT
disallow-latest-tag
Validate Prohíbe tag :latest — pin obligatorio de versión ENFORCE ENFORCE AUDIT
require-labels
Validate Labels team y app requeridos en Deployments/StatefulSets ENFORCE AUDIT OFF
add-security-defaults
Mutate Inyecta runAsNonRoot, allowPrivilegeEscalation: false, drop ALL caps ENFORCE ENFORCE ENFORCE
add-default-resources
Mutate Aplica limits (512Mi/500m) y requests (256Mi/100m) si no definidos ENFORCE ENFORCE ENFORCE
add-pull-secret
Mutate Inyecta imagePullSecrets para imágenes en ghcr.io/dataflow-analytics/* ENFORCE ENFORCE OFF
generate-default-networkpolicy
Generate Crea NetworkPolicy deny-all al crear cualquier Namespace ENFORCE ENFORCE AUDIT
generate-quota
Generate Crea ResourceQuota (4CPU/8Gi req — 8CPU/16Gi limits — 50 pods) por namespace ENFORCE ENFORCE AUDIT
verify-images
VerifyImage Verifica firma cosign (keyless) para ghcr.io/dataflow-analytics/* ENFORCE AUDIT OFF
Políticas Clave — YAML listo para aplicar
disallow-privileged
Enforce Validate

Bloquea cualquier Pod que solicite modo privilegiado. Se aplica en producción y staging con acción Enforce para prevención inmediata.

yaml · ClusterPolicy
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: disallow-privileged
  annotations:
    policies.kyverno.io/severity: critical
    policies.kyverno.io/team: dataflow-platform
spec:
  validationFailureAction: Enforce
  rules:
    - name: no-privileged
      match:
        any:
          - resources:
              kinds: ["Pod"]
              namespaces: ["production", "staging"]
      validate:
        message: "Privileged containers not allowed."
        pattern:
          spec:
            containers:
              - securityContext:
                  privileged: "!true"
add-security-defaults
Auto Mutate

Inyecta automáticamente defaults de seguridad en todos los Pods — los desarrolladores no necesitan recordar el boilerplate de seguridad.

yaml · ClusterPolicy
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: add-security-defaults
spec:
  rules:
    - name: add-run-as-nonroot
      match:
        any:
          - resources:
              kinds: ["Pod"]
      mutate:
        patchStrategicMerge:
          spec:
            securityContext:
              runAsNonRoot: true
              seccompProfile:
                type: RuntimeDefault
            containers:
              - (name): "*"
                securityContext:
                  allowPrivilegeEscalation: false
                  capabilities:
                    drop: ["ALL"]
generate-default-networkpolicy
Auto-gen Generate

Crea automáticamente una NetworkPolicy deny-all en cada nuevo Namespace. Aísla el tráfico por defecto — explícito para permitir.

yaml · ClusterPolicy
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: generate-default-networkpolicy
spec:
  rules:
    - name: default-deny-ingress
      match:
        any:
          - resources:
              kinds: ["Namespace"]
      generate:
        synchronize: true
        apiVersion: networking.k8s.io/v1
        kind: NetworkPolicy
        name: default-deny
        namespace: "{{ request.object.metadata.name }}"
        data:
          spec:
            podSelector: {}
            policyTypes:
              - Ingress
verify-images (cosign keyless)
Supply Chain VerifyImage

Verifica firma cosign (keyless via GitHub Actions OIDC) antes de permitir el despliegue. Solo imágenes firmadas del CI/CD de DataFlow pueden ejecutarse.

yaml · ClusterPolicy
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: verify-images
spec:
  validationFailureAction: Enforce
  webhookTimeoutSeconds: 30
  rules:
    - name: verify-signature
      match:
        any:
          - resources:
              kinds: ["Pod"]
      verifyImages:
        - imageReferences:
            - "ghcr.io/dataflow-analytics/*"
          attestors:
            - entries:
                - keyless:
                    subject: "https://github.com/dataflow-analytics/*"
                    issuer: "https://token.actions.githubusercontent.com"
                    rekor:
                      url: "https://rekor.sigstore.dev"
Flujo de Admission Webhook — Orden de Evaluación Kyverno

Kyverno actúa como Admission Webhook de Kubernetes. Cada recurso creado o modificado pasa por la cadena de políticas en este orden:

🧑‍💻
kubectl applyGitHub Actions CI
🌐
API ServerRequest recibida
🔏
VerifyImagecosign signature
Validate4 reglas YAML
🔧
Mutatesecurity defaults
💾
etcdRecurso persistido
GenerateNetworkPolicy, Quota
📦

Instalación — GKE DataFlow Analytics

bash
# 1. Añadir repo Kyverno
helm repo add kyverno \
  https://kyverno.github.io/kyverno/

# 2. Instalar en namespace propio
helm install kyverno kyverno/kyverno \
  -n kyverno --create-namespace \
  --set replicaCount=3 \
  --set config.webhookTimeoutSeconds=30

# 3. Aplicar suite de políticas DataFlow
kubectl apply -f policies/

# 4. Verificar estado
kubectl get clusterpolicies
kubectl get policyreport -A

# 5. Test local antes de push (CLI)
kyverno apply policies/disallow-privileged.yaml \
  --resource test/pod-privileged.yaml

# Output esperado:
pass: 0  fail: 1  warn: 0  error: 0
FAILED: privileged: true → bloqueado ✓
📊

Cobertura de Seguridad — Post Kyverno

Sin contenedores privilegiados
100%
Imágenes con tag fijo
100%
Pods con resource limits
100%
Namespaces con NetworkPolicy
100%
Imágenes firmadas cosign
92%
Labels team/app en Deployments
78%
Pod Security Standards cubiertos:
no-privileged no-privilege-escalation drop-all-caps run-as-nonroot seccomp-runtimedefault auto-resource-limits auto-network-isolation auto-quota supply-chain-security image-pinning
Hoja de Ruta — DataFlow Analytics x Kyverno

Fase 1 — Completado

  • Kyverno v1.12 instalado en GKE (3 réplicas HA)
  • Políticas validate en modo Audit — sin bloquear CI/CD
  • PolicyReport generado → 47 violaciones detectadas
  • Políticas mutate activas en los 3 entornos
  • NetworkPolicy + ResourceQuota auto-generados
  • CI/CD actualizado: kyverno test en pre-merge

Fase 2 — En Progreso

  • Migrar validate a Enforce en producción
  • Añadir firma cosign al pipeline de 3 servicios restantes
  • Labels team/app en 12 Deployments legacy
  • Excepciones documentadas via annotations para kube-system
  • !Verificar compatibilidad Kyverno con Istio sidecar injection
  • !Webhook timeout tunning bajo carga peak (Black Friday)