═══════════════════════════════════════════════════════════════════════════
  PCI DSS PREGUNTA 39 — PAQUETE DE EVIDENCIA
  Separation of Duties entre entornos prod y staging
═══════════════════════════════════════════════════════════════════════════

PCI DSS Q39 (PCI v4 Req 6.5.3.1 + 7.2 + 7.3) requiere:
  - Separación de funciones entre usuarios prod y bajos entornos
  - Garantizar accountability
  - Solo cambios revisados/aprobados se despliegan a prod

QSA solicitó: Listados extractados directamente de las plataformas en sus
              diferentes ambientes

═══════════════════════════════════════════════════════════════════════════
MATRIZ DE SoD POR CAPA
═══════════════════════════════════════════════════════════════════════════

CAPA           │ PROD                       │ STAGING                  │ SEP
───────────────┼────────────────────────────┼──────────────────────────┼────
DO Account     │ gaf2419 (CTO Owner)        │ gaf2419 (CTO Owner)      │ ⚠
K8s cluster    │ a19e81ac-...               │ 97577f4a-...             │ ✓
K8s SAs        │ admin-prod                 │ admin-staging            │ ✓
               │ viewer-prod (read-only)    │ developer-staging        │
               │ deployer-prod (CI/CD)      │ deployer-staging (CI/CD) │
Token CA       │ Prod cluster CA            │ Staging cluster CA       │ ✓
DB users       │ doadmin, fintrix_app,      │ doadmin                  │ ✓
               │ fintrix_readonly,          │                          │
               │ controlcase_auditor        │                          │
DB trusted srcs│ Prod cluster + APP CIDR    │ Staging cluster only     │ ✓
VPC isolation  │ 10.100.0.0/16              │ 10.101.0.0/16            │ ✓
GitHub repo    │ gaf2419 admin              │ same repo (branch SoD)   │ ✓
               │ tedevs0, VillaMarCruz push │                          │
Branch protect │ 1 reviewer required        │ same                     │ ✓
               │ author ≠ reviewer          │                          │

═══════════════════════════════════════════════════════════════════════════
K8s RBAC NUEVO (creado 2026-05-27 para Q39)
═══════════════════════════════════════════════════════════════════════════

PRODUCTION cluster (namespace rbac-sod):
  - admin-prod              ClusterRole: cluster-admin
                            Holder: Gabriel Ureña (CTO)
                            Scope: All namespaces, all resources

  - viewer-prod             ClusterRole: viewer-prod-readonly
                            Holder: On-call observers, external auditors, QSA
                            Scope: All ns, read-only (NO secrets, NO exec)

  - deployer-prod           Role: deployer-prod-role (default ns)
                            Holder: GitHub Actions service account
                            Scope: default namespace ONLY

STAGING cluster (namespace rbac-sod):
  - admin-staging           ClusterRole: cluster-admin
                            Holder: CTO + Lead Engineer
                            Scope: Full cluster-admin on staging

  - developer-staging       ClusterRole: developer-staging-role
                            Holder: Developers (Gabriel + future hires)
                            Scope: All namespaces in staging cluster
                            Restriction: NO access to production cluster

  - deployer-staging        Role: deployer-staging-role (default ns)
                            Holder: GitHub Actions (PR trigger)
                            Scope: default namespace ONLY

═══════════════════════════════════════════════════════════════════════════
TESTS DE VERIFICACIÓN EJECUTADOS
═══════════════════════════════════════════════════════════════════════════

1. viewer-prod NO puede modificar producción:
   - get/list/watch pods, services, namespaces       → yes ✓
   - delete pods, create secrets, get secrets        → NO ✗ (denied)
   - create pods/exec, update deployments            → NO ✗ (denied)

2. deployer-prod limitado a 'default' namespace:
   - update/patch deployments en default             → yes ✓
   - create namespaces, delete PVCs, get secrets     → NO ✗ (denied)
   - update deployments en rbac-sod (cross-ns)       → NO ✗ (denied)

3. developer-staging token contra PROD cluster:
   - get pods, list namespaces, create deployments   → Unauthorized ✗
   (Tokens K8s son JWTs firmados por CA del cluster — cross-cluster impossible)

═══════════════════════════════════════════════════════════════════════════
CONTENIDO DEL PAQUETE
═══════════════════════════════════════════════════════════════════════════

  00-README.txt                  (este archivo)
  rbac-prod.yaml                 Manifests RBAC aplicados a prod
  rbac-staging.yaml              Manifests RBAC aplicados a staging
  01-sa-tokens.txt               SA tokens generados (prefijos)
  02-cross-env-test.txt          Test cross-env: staging→prod blocked
  03-rbac-can-i-tests.txt        auth can-i por cada SA y verb
  04-sa-summary.txt              ServiceAccounts annotations + bindings
  05-db-users.txt                doctl databases user list (prod + staging)
  06-github-teams.txt            Collaborators del repo con roles
  07-branch-protection-summary.txt  Resumen de protection rules en main

═══════════════════════════════════════════════════════════════════════════
Fecha de extracción: 2026-05-27
Extraído por: Gabriel Ureña (CTO Fintrixs SAS)
═══════════════════════════════════════════════════════════════════════════
