Resumen ejecutivo
Secretos vencidos
10
Política 30d — acción inmediata
Servicios protegidos
4
payment / api-gateway / analytics / ci
Anomalías detectadas
3
1 HIGH · 2 MEDIUM (últimas 24h)
Fallos de acceso
5
unknown-actor@203.0.113.55
Entradas de audit log
20
6 identidades · 8 rutas únicas
Alertas de seguridad — últimas 24h
HIGH — failed_access
Source unknown-actor@203.0.113.55 registró 5 intentos fallidos consecutivos contra rutas de producción entre las 14:22–14:26 UTC. IP externa no reconocida. Revisar firewall y revocar cualquier token temporal.
MEDIUM — multi_ip_access
Identidad k8s-payment-service accedió desde 3 IPs distintas (10.0.1.10, 10.0.1.11, 10.0.1.12). Puede indicar múltiples réplicas del pod — verificar que todas pertenecen al mismo namespace de producción.
MEDIUM — off_hours_access
Identidad devops-admin realizó 3 accesos entre las 02:30–03:10 UTC (fuera de horario: antes de las 06:00). Revisar si corresponde a mantenimiento planificado o acceso no autorizado. Considerar MFA para acceso nocturno.
Plan de rotación · Política 30d
🔄 Secretos por rotar — 10/10 vencidos
| Secreto | Tipo | Urgencia | Último rotado | Días vencido | Owner |
|---|---|---|---|---|---|
| prod-ssh-bastion-key | ssh-key | CRITICAL | 2025-08-01 | −286d | devops-team |
| prod-stripe-api-key | api-key | CRITICAL | 2025-09-15 | −241d | backend-team |
| prod-redis-session-password | password | CRITICAL | 2025-10-30 | −196d | platform-team |
| prod-postgresql-analytics-worker | database | CRITICAL | 2025-11-20 | −175d | platform-team |
| prod-analytics-encryption-key | encryption-key | CRITICAL | 2025-12-10 | −155d | backend-team |
| prod-postgresql-payment-svc | database | CRITICAL | 2026-01-05 | −129d | platform-team |
| prod-oauth-client-secret | oauth-secret | CRITICAL | 2026-02-14 | −89d | backend-team |
| prod-api-gateway-tls-cert | tls-cert | CRITICAL | 2026-04-01 | −43d | devops-team |
| staging-postgresql-api-gateway | database | CRITICAL | 2026-05-01 | −13d | platform-team |
| ci-github-deploy-token | service-token | CRITICAL | 2026-06-11 | −1d | devops-team |
👥 Responsables
platform-team
4
backend-team
3
devops-team
3
📍 Rutas más accedidas
payment/api-keys
6
payment-svc db/creds
5
analytics db/creds
2
api-gateway config
2
analytics transit/enc
2
🕐 Distribución horaria
0
2
6
9
12
14
16
20
22
■ Fuera de horario
■ Horario laboral
Configuración Vault generada — 4 servicios
payment-service
database/creds
api-keys (KV v2)
pki/issue TLS
config
api-gateway
pki/issue TLS
config
analytics-worker
database/creds
transit/encrypt
config
ci-runner
api-keys (KV v2)
config (CI env)
📄 HCL Policy — payment-service
# Vault policy for payment-service
# Generated: 2026-06-12 19:25:20 · Environment: production
# Dynamic database credentials
path "database/creds/payment-service-readonly" {
capabilities = ["read"]
}
# Static API keys (KV v2)
path "secret/data/production/payment-service/api-keys" {
capabilities = ["read"]
}
# TLS certificate issuance
path "pki/issue/payment-service-cert" {
capabilities = ["create", "update"]
}
# Application configuration secrets
path "secret/data/production/payment-service/config" {
capabilities = ["read"]
}
# Deny admin paths
path "sys/*" {
capabilities = ["deny"]
}
⚡ Auth commands — ci-runner (AppRole)
Crear AppRole
$ vault write auth/approle/role/ci-runner \token_ttl=1h token_max_ttl=4h \
secret_id_num_uses=1 secret_id_ttl=10m \
token_policies="ci-runner-policy"
Obtener RoleID y SecretID (single-use)
$ vault read auth/approle/role/ci-runner/role-id$ vault write -f auth/approle/role/ci-runner/secret-id
🏗️ Arquitectura Vault — NovaSaaS
Modo HA + Raft storage (sin BD externa)
Auto-unseal GCP KMS
Namespace prod / staging / ci
Dual audit: file + syslog
Auth: Kubernetes (GKE) + AppRole (CI)
KV v2 · Database · PKI · Transit
External Secrets Operator (GitOps)
GitHub Actions OIDC (sin long-lived keys)
🛠️ Anti-patrones corregidos en NovaSaaS
| Credenciales BD hardcodeadas en docker-compose | Dynamic creds · TTL 1h |
| API key Stripe en variable CI (caída 3h) | KV v2 + rotación 90d |
| Cuenta admin compartida para todo el equipo | Per-service identity + OIDC |
| Sin política de rotación documentada | rotation_planner · política 30d |
| Sin audit logs configurados | File + syslog · retención 1 año |
✅ Preparación SOC 2 Type II
✓
Audit logs habilitados
✓
Políticas least-privilege
✓
Rotación automatizable
✓
Secretos dinámicos BD
✓
Per-service identities
✓
Namespace blast-radius
✗
10 secretos sin rotar (pendiente)
~
MFA off-hours (recomendado)