Tema
PCI DSS Pregunta 12 — Evidencia Extractada de Dispositivos de Red
| Campo | Valor |
|---|---|
| Solicitante | José David Álvarez — QSA ControlCase |
| Comentario QSA | "Por favor adjuntar la información o evidencia extractada de los dispositivos de red o sistemas equivalentes en el entorno cloud (security groups, security lists, etc.)" |
| Fecha | 2026-05-26 |
| Tipo de evidencia | Cloud Firewalls + VPC + Load Balancers + K8s NetworkPolicies |
| Estado | RESUELTO — Evidencia extraída directamente de DO API + kubectl |
| Paquete adjunto | q12-network-evidence-20260526.tar.gz |
Resumen ejecutivo: Fintrixs opera 100% en infraestructura cloud (DigitalOcean). Los "dispositivos de red" tradicionales son reemplazados por Cloud Firewalls (security groups), VPC con CIDR segregados, Load Balancers gestionados, y Kubernetes NetworkPolicies (microsegmentación). Esta evidencia se extrajo directamente de las APIs nativas de cada uno (no son configuraciones documentadas, sino el estado real en producción).
1. Mapeo de "dispositivos de red" en entorno cloud
| Dispositivo tradicional | Equivalente cloud en Fintrixs | Cantidad |
|---|---|---|
| Firewall hardware | DigitalOcean Cloud Firewalls (Security Groups) | 14 firewalls |
| VLAN/VRF | DigitalOcean VPC con CIDR isolation | 1 VPC PCI + 3 default |
| Switch L3 con ACLs | Kubernetes NetworkPolicies | 12 policies en 4 namespaces |
| Load Balancer hardware | DigitalOcean Managed Load Balancers | 2 LBs |
| IDS/IPS | Falco DaemonSet (4 nodos) | Real-time |
2. VPC Configuration (Network Segmentation)
VPC de producción PCI
json
{
"name": "fintrix-production-vpc",
"id": "402acbe1-7336-4fde-ad20-e890013b8214",
"ip_range": "10.100.0.0/16",
"region": "nyc1",
"default": true
}Miembros de la VPC PCI (extraído de GET /v2/vpcs/{id}/members)
| Tipo | Recurso | URN |
|---|---|---|
| kubernetes | fintrix-production-k8s | do:kubernetes:a19e81ac-537a-44ed-a228-8010f561a530 |
| droplet | fintrix-production-cdd (ControlCase CDD VM) | do:droplet:07a04dfd-4068-4750-9f9b-5efd2a0f9d2a |
| droplet | fintrix-production-collector (SIEM/Wazuh) | do:droplet:856849d5-c815-4b31-97a5-e918f1f6d05f |
| droplet | fintrix-production-vapt (ControlCase VAPT VM) | do:droplet:d737662b-fa71-40b3-a9d3-d6941f3254d1 |
| dbaas | fintrix-production-fintrix-pci (PostgreSQL) | do:dbaas:061abee8-1d2c-49f4-be08-55f0054288cb |
| droplet | bitwarden (password manager) | do:droplet:5b39985c-176c-401a-bf23-0537c1a42497 |
Archivos: 02-vpcs-pretty.json, 03-vpc-members-pretty.json
3. Cloud Firewalls (Security Groups) — Inventario
Resumen de los 14 firewalls
| # | Firewall Name | Inbound Rules | Outbound Rules | Tags | PCI Scope |
|---|---|---|---|---|---|
| 1 | k8s-...-worker (managed) | 3 | 3 | k8s | Sí (K8s) |
| 2 | k8s-public-access-... | 6 | 3 | k8s | Sí |
| 3 | fintrix-production-cdd-fw | 2 | 3 | - | Sí (CDD VM) |
| 4 | fintrix-production-collector-fw | 24 | 3 | - | Sí (SIEM) |
| 5 | fintrix-production-vapt-fw | 2 | 5 | - | Sí (VAPT VM) |
| 6 | fintrix-production-cde-fw | 9 | 4 | fintrix-cde | Sí (CDE) |
| 7 | fintrix-production-dmz-fw | 2 | 2 | fintrix, pci-dss | Sí |
| 8 | fintrix-production-app-fw | 8 | 5 | fintrix-app | Sí |
| 9 | fintrix-production-mgmt-fw | 6 | 3 | fintrix-mgmt | Sí |
| 10 | smtp | 11 | 4 | - | No |
| 11 | SUpabase | 8 | 11 | - | No |
| 12 | PatroniIvory | 18 | 19 | - | No |
| 13 | stackgres | 10 | 12 | - | No |
| 14 | PGCluster | 5 | 6 | - | No |
4. CDE Firewall (Cardholder Data Environment) — Detalle Completo
Este es el firewall más crítico para PCI DSS porque protege el CDE:
Metadata
json
{
"id": "89879427-5319-4a4e-a4b2-9262a725b7a3",
"name": "fintrix-production-cde-fw",
"status": "succeeded",
"tags": ["fintrix-cde"]
}Inbound Rules (9 reglas)
| # | Protocol | Ports | Sources | Purpose |
|---|---|---|---|---|
| 1 | ICMP | 0 | tag compliance-scanner | ControlCase VAPT/CDD scanning |
| 2 | TCP | 1-65535 | tag compliance-scanner | Full port scan from ControlCase VMs |
| 3 | TCP | 443 | 10.100.1.0/24 (DMZ) | HTTPS from Kong |
| 4 | TCP | 3510 | 10.100.10.0/24 (CDE internal) | card-vault-service |
| 5 | TCP | 3600 | 10.100.10.0/24, 10.100.20.0/24 (CDE + APP) | tokenization-service |
| 6 | TCP | 3700 | 10.100.10.0/24, 10.100.20.0/24 | auth-service |
| 7 | TCP | 8000 | 10.100.1.0/24 (DMZ) | Kong proxy |
| 8 | TCP | 10250-10255 | 10.100.0.0/16 (full VPC) | K8s kubelet/system |
| 9 | (See JSON) |
Política por defecto: DENY ALL (todo lo no explícitamente permitido se rechaza). Este es el principio de "default deny" requerido por PCI DSS 1.2.1.
Archivos: firewalls-individual/fintrix-production-cde-fw.json
5. Kubernetes NetworkPolicies — Microsegmentación
Resumen (12 policies activas)
NAMESPACE NAME POD-SELECTOR
app allow-app-internal-kafka <none>
app allow-dns <none>
app allow-egress-cde <none>
app allow-from-kong <none>
app default-deny-all <none>
cde allow-cde-internal <none>
cde allow-dns <none>
cde allow-egress-kafka kafka-client=true
cde allow-egress-pci-db <none>
cde allow-from-kong <none>
cde default-deny-all <none>
monitoring allow-prometheus-scrape app=prometheusPilar de seguridad: default-deny-all
yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-all
namespace: cde
spec:
podSelector: {}
policyTypes:
- Ingress
- EgressEsta política rechaza todo el tráfico hacia/desde pods del namespace cde (CDE). Solo se permite explícitamente lo definido en las otras policies.
Reglas de allow específicas para CDE
| Policy | Permite |
|---|---|
allow-from-kong | Solo Kong (DMZ) puede llegar a pods CDE |
allow-cde-internal | Pods CDE pueden hablarse entre ellos |
allow-egress-pci-db | Pods CDE pueden conectar a la DB managed |
allow-egress-kafka | Solo pods con label kafka-client=true pueden hablar a Kafka |
allow-dns | DNS lookups permitidos |
Archivos: 05-k8s-networkpolicies.yaml, 05-k8s-networkpolicies.json
6. Load Balancers
LBs gestionados (DigitalOcean)
| Name (ID) | IP | Purpose |
|---|---|---|
| Kong Proxy LB | 129.212.199.126 | Tráfico HTTP/HTTPS público → Kong → microservicios |
| Kong Admin LB | 129.212.199.127 | Administración Kong (acceso interno) |
Cada LB tiene su propio firewall config integrado (campos firewall.allow y firewall.deny en la API). En nuestra config actual, los LBs no tienen ACLs adicionales (allow=[], deny=[]) porque el filtrado se realiza en los Cloud Firewalls y en los pods Kong (con plugins de rate-limit y IP restriction).
Archivos: 04-load-balancers-pretty.json
7. Capturas de Pantalla del Panel DigitalOcean
Las siguientes capturas son evidencia visual complementaria, tomadas directamente desde el panel web de DigitalOcean (https://cloud.digitalocean.com). Cada una muestra el estado real de los dispositivos de red equivalentes en cloud.
7.1 Lista de Cloud Firewalls
Capturar desde: https://cloud.digitalocean.com/networking/firewallsMostrar: Lista completa de los 14 firewalls con sus nombres, # de reglas, droplets aplicados. Guardar como:
screenshots/q12-network-devices/01-firewalls-list.png

7.2 Detalle del CDE Firewall (PCI crítico)
Capturar desde: Click en
fintrix-production-cde-fw→ tab "Rules" Mostrar: Las 9 inbound rules y 4 outbound rules con sus sources/destinations. Guardar como:screenshots/q12-network-devices/02-cde-firewall-rules.png

7.3 Detalle del APP Firewall
Capturar desde: Click en
fintrix-production-app-fw→ tab "Rules" Guardar como:screenshots/q12-network-devices/03-app-firewall-rules.png

7.4 Detalle del DMZ Firewall
Capturar desde: Click en
fintrix-production-dmz-fw→ tab "Rules" Guardar como:screenshots/q12-network-devices/04-dmz-firewall-rules.png

7.5 Detalle del Management Firewall
Capturar desde: Click en
fintrix-production-mgmt-fw→ tab "Rules" Guardar como:screenshots/q12-network-devices/05-mgmt-firewall-rules.png

7.6 VPC Configuration
Capturar desde: https://cloud.digitalocean.com/networking/vpcMostrar: Lista de VPCs con CIDR ranges. Click en
fintrix-production-vpcpara ver miembros. Guardar como:screenshots/q12-network-devices/06-vpc-list.pngy07-vpc-pci-members.png


7.7 Load Balancers
Capturar desde: https://cloud.digitalocean.com/networking/load_balancersMostrar: Los 2 LBs con sus IPs, forwarding rules, health checks. Guardar como:
screenshots/q12-network-devices/08-load-balancers.png

7.8 K8s NetworkPolicies (desde el cluster)
Capturar desde: Ejecutar en terminal
kubectl get networkpolicies -Ay tomar screenshot del output completo. Guardar como:screenshots/q12-network-devices/09-k8s-networkpolicies.png

Instrucciones para capturar
bash
# Para el screenshot #8 (kubectl), puedes hacerlo via terminal y captura de pantalla
kubectl get networkpolicies -A -o wide
# Luego screenshot del terminal (Cmd+Shift+4 en macOS)
# Para verificar el output exacto que debe aparecer:
kubectl get networkpolicies -A -o wide > /tmp/np-snapshot.txt
cat /tmp/np-snapshot.txtNota para el auditor: Si las imágenes no aparecen, es porque las capturas aún están pendientes de subir. La evidencia JSON cruda en
q12-network-evidence-20260526.tar.gzes independiente y completa por sí misma.
8. Cómo verificar la evidencia (comandos para el auditor)
Re-extraer las reglas en cualquier momento
bash
# 1. Listar todos los firewalls
doctl compute firewall list --output json
# 2. Detalle de un firewall específico (ej: CDE)
doctl compute firewall get 89879427-5319-4a4e-a4b2-9262a725b7a3 --output json
# 3. Listar VPCs
doctl vpcs list --output json
# 4. Miembros de la VPC PCI
doctl vpcs get 402acbe1-7336-4fde-ad20-e890013b8214 --output json
# 5. K8s NetworkPolicies
kubectl get networkpolicies -A -o yaml
# 6. Load Balancers
doctl compute load-balancer list --output jsonVia DigitalOcean Web Panel (audit log de cambios)
https://cloud.digitalocean.com/networking/firewalls
https://cloud.digitalocean.com/networking/vpc
https://cloud.digitalocean.com/networking/load_balancers
https://cloud.digitalocean.com/account/activity (historial de modificaciones)9. Cumplimiento PCI DSS Pregunta 12
| Requisito específico | Cómo se cumple | Evidencia |
|---|---|---|
| Q12 — Reglas firewall entrantes | Cloud Firewalls con reglas explícitas allow + K8s NetworkPolicies | 01-do-cloud-firewalls.json, 05-k8s-networkpolicies.yaml |
| Q12 — Reglas firewall salientes | Outbound rules en cada Cloud Firewall + egress en NetworkPolicies | Mismos archivos (campos outbound_rules y egress) |
| Q12 — VLAN/Segmentación | VPC con CIDR aislados + subnets internas (DMZ/CDE/APP/MGMT) | 02-vpcs.json, 03-vpc-members.json |
| Default deny | Política default-deny-all en CDE y APP namespaces | 05-k8s-networkpolicies.yaml |
| Tags = security groups | DO usa tags (compliance-scanner, fintrix-cde, fintrix-app, etc.) | Visible en cada firewalls-individual/*.json |
10. Paquete de evidencia descargable
📥 Descargar evidencia completa (q12-network-evidence-20260526.tar.gz)
Contenido del archivo:
q12-network-evidence/
├── 00-RESUMEN-PCI-Q12.txt ← Documento ejecutivo
├── 01-do-cloud-firewalls.json ← Raw API response (14 firewalls)
├── 01-do-cloud-firewalls-pretty.json ← Formatted JSON
├── 02-vpcs.json ← All VPCs
├── 02-vpcs-pretty.json
├── 03-vpc-members.json ← Members of PCI VPC
├── 03-vpc-members-pretty.json
├── 04-load-balancers.json ← Load Balancers
├── 04-load-balancers-pretty.json
├── 05-k8s-networkpolicies.yaml ← 12 NetworkPolicies (YAML)
├── 05-k8s-networkpolicies.json ← Same (JSON)
└── firewalls-individual/
├── fintrix-production-cde-fw.json ← CDE firewall (PCI critical)
├── fintrix-production-app-fw.json
├── fintrix-production-dmz-fw.json
├── fintrix-production-collector-fw.json
├── fintrix-production-vapt-fw.json
├── fintrix-production-cdd-fw.json
├── fintrix-production-mgmt-fw.json
├── k8s-*-worker.json
└── k8s-public-access-*.jsonHistorial de revisiones
| Fecha | Revisor | Cambios |
|---|---|---|
| 2026-05-26 | Equipo Fintrixs | Re-extracción tras feedback QSA — toda la evidencia desde APIs nativas |
