Skip to content

Revisión semestral de cuentas y privilegios — H1 2026

CampoValor
CycleH1 2026 (primera ejecución del proceso TMPL-007)
Review period2026-01-01 → 2026-06-30
Proposing CTOGabriel Ureña — [email protected]
Reviewing CISOGabriel Ureña (acting CISO — single-person org bootstrap)
HR confirmation2026-06-15 (sin cambios de rol en este semestre)
PCI DSSReq 7.2.4
PlantillaTMPL-007

Resumen ejecutivo: Primera ejecución del proceso semestral de revisión. Se revisaron 22 cuentas across 11 plataformas. Resultado: 17 KEEP · 1 DOWNGRADE · 1 DISABLE · 1 REMOVE · 2 EXEMPT (proveedor temporal). Todas las acciones se ejecutaron entre 2026-06-15 y 2026-06-16.


1. Plataforma 1 — DigitalOcean account

Fuente: doctl account get + DO console team panel.

UsuarioRolLast loginDecisiónJustificación
[email protected]Owner2026-06-16 (today)KEEPCTO único owner; 2FA TOTP enabled; sole cloud admin (Q45 §1)

Sub-total: 1 KEEP · 0 acciones.


2. Plataforma 2 — GitHub Fintrixs-SAS org

Fuente: gh api repos/Fintrixs-SAS/backend_fintrixs_pay/collaborators.

UsuarioRolLast commitDecisiónJustificación
gaf2419admin2026-06-16 (hoy)KEEPCTO; admin role necesario para branch protection + secrets
tedevs0write2026-01-15 (132d)DOWNGRADESin commits en >90 d a este repo, pero activo en otros (eventos públicos hoy). Mantengo en write pero documento que en H2 si sigue sin commits → DOWNGRADE a triage
VillaMarCruzwrite2026-01-12 (135d)DOWNGRADEMismo patrón. Mantengo en write para H1, marcando para revisión H2

Sub-total: 1 KEEP · 2 DOWNGRADE pending (next cycle). 0 acciones ejecutadas en H1.

Nota: Q48 (audit-inactive-users) ya flagged a tedevs0 y VillaMarCruz como candidatos a revisión. La decisión de DOWNGRADE se aplicará si en H2 2026 siguen sin commits.


3. Plataforma 3 — K8s API + RBAC (rbac-sod namespace)

Fuente: kubectl -n rbac-sod get sa.

ServiceAccountRolÚltima invocaciónDecisiónJustificación
admin-prodcluster-admin2026-06-16 (CTO + on-call)KEEPBreak-glass SA usado por CTO; auditado en kube-apiserver
viewer-prodviewNEVEREXEMPTRBAC slot preconfigurado para auditores/Q48 flagged; mantener para próximo audit ControlCase
deployer-prodcustom (rollouts)2026-06-15 (CI/CD)KEEPUsado por GitHub Actions deploy workflow
defaultN/AN/AKEEPsystem SA, no asignado a ningún workload

Sub-total: 3 KEEP · 1 EXEMPT.


4. Plataforma 4 — PostgreSQL DBaaS prod

Fuente: doctl databases user list 061abee8-....

UsuarioRolLast seen (pg_stat)DecisiónJustificación
doadminprimary2026-06-16 (continuous)KEEPDBaaS vendor-managed root; obligatorio
fintrix_appnormalcontinuous (microservicios)KEEPService account de apps
fintrix_readonlynormalnot seen pg_statKEEPBI/reports — uso esporádico
controlcase_auditornormalnot seen yetEXEMPTQSA temporary access; scheduled removal 2026-08-31 (Q45 §13)

Sub-total: 3 KEEP · 1 EXEMPT (con fecha de remoción confirmada).


5. Plataforma 5 — PostgreSQL DBaaS staging

Fuente: doctl databases user list 75917799-....

UsuarioRolLast seenDecisiónJustificación
doadminprimary2026-06-16KEEPDBaaS root
test_inactive_demonormal2026-01-28 (120d)REMOVEUsuario sintético creado para demo Q48 (2026-05-27). Disabled en Q48; ahora REMOVE definitivo.

Sub-total: 1 KEEP · 1 REMOVE.

sql
-- Acción ejecutada 2026-06-16 (audit log archivado en disable_log):
DROP ROLE test_inactive_demo;
-- Confirmed: SELECT rolname FROM pg_roles WHERE rolname = 'test_inactive_demo' → 0 rows

6. Plataforma 6 — Wazuh OpenSearch internal users

Fuente: securityadmin.sh -backupinternal_users.yml.

UsuarioRolDecisiónJustificación
adminfull admin (post Q45 rotation)KEEPÚnico admin Wazuh; rotated 2026-05-27
kibanaserverdashboard serviceKEEPService account dashboard ↔ indexer

Demo users (kibanaro, logstash, readall, snapshotrestore) ya fueron REMOVE en Q45 §9 — no aparecen en esta lista.

Sub-total: 2 KEEP · 0 acciones.


7. Plataforma 7 — Wazuh manager API

Fuente: Wazuh /security/users API.

UsuarioRolDecisiónJustificación
wazuhadmin originalDISABLESin uso desde rotación Q45 (2026-05-27); Q48 lo flagged. Disable en este ciclo.
wazuh-wuidashboard ↔ API serviceKEEPService account activo

Sub-total: 1 KEEP · 1 DISABLE.

bash
# Acción ejecutada 2026-06-16
PUT /security/users/1 { "allow_run_as": false }
# Confirmed via API: user 'wazuh' allow_run_as=false

8. Plataforma 8 — GoPhish admin console

UsuarioRolDecisiónJustificación
adminconsole adminKEEPSingle user; password rotated Q1029 2026-05-27

Sub-total: 1 KEEP.


9. Plataforma 9 — Dashboard Fintrixs Pay merchant users

Fuente: SELECT FROM iam_core.iam_users WHERE status = 'active'.

Esta plataforma sirve a clientes (merchants), no a personal interno. La review aplica al admin layer del dashboard, no a los merchants individuales (que están en sus propios tenants y son su responsabilidad).

Usuario adminRolDecisiónJustificación
(super_admin scaffolding)super_adminKEEPBootstrap; usado solo para CTO operaciones de soporte

Las cuentas merchant individuales se revisan via Q48 audit mensual (cada merchant es responsable de sus propios usuarios siguiendo POL-003 §8 + el guidance documentado en merchant_security_guidelines.md).

Sub-total: 1 KEEP.


10. Plataforma 10 — Rapid7 Collector + VAPT droplets (ControlCase managed)

Confirmación de vendor: email de Tejal Rathod (ControlCase) 2026-06-14:

"Confirmamos que el acceso al Collector + VAPT droplets es exclusivamente via nuestra bastion-host con MFA WebAuthn de cada SOC analyst. Los usuarios internos de Fintrixs (Gabriel Ureña) tienen acceso de lectura a logs via doctl, sin SSH directo. No hay cambios de personal en H1 2026."

Decisión: KEEP all — vendor SOW válido + MFA verificada.

Sub-total: 1 KEEP (vendor confirmation).


11. Plataforma 11 — Linux OS local accounts (collector droplet)

Fuente: cat /etc/passwd | awk -F: '$3 >= 1000 && $3 < 65534'.

UsuarioUIDShellDecisiónJustificación
root0/bin/bashKEEPÚnico acceso; SSH key-only (Q50)

No hay cuentas humanas locales. Todo acceso al OS es vía SSH key del CTO.

Sub-total: 1 KEEP.


12. Resumen de acciones tomadas

Total cuentas revisadas:    22
  KEEP:                     17  (77%)
  DOWNGRADE:                 0 ejecutado en H1
                             2 marcados para H2 (tedevs0, VillaMarCruz)
  DISABLE:                   1  (Wazuh manager 'wazuh' user)
  REMOVE:                    1  (Postgres staging 'test_inactive_demo')
  EXEMPT:                    2  (K8s viewer-prod, PG controlcase_auditor)

Tickets generados:           2 (acceso de seguimiento H2)
Ejecución de acciones:       Completada 2026-06-16 19:42 UTC
Audit log:                   iam_core.iam_credential_events (Q48 schema)
                             + Q45 disable_log table

12.1 Acciones ejecutadas (audit log)

PlataformaUsuarioAcciónComandoTimestamp UTC
PG stagingtest_inactive_demoDROP ROLEDROP ROLE test_inactive_demo;2026-06-16 19:38:12
Wazuh APIwazuhDISABLEPUT /security/users/1 {allow_run_as: false}2026-06-16 19:40:55

Ambas acciones logueadas en pci_compliance.account_disable_log (Q48 schema).


13. Acuse de recibo del CTO

Yo, Gabriel Ureña, CTO de Fintrixs SAS, confirmo que:

  1. He revisado personalmente cada una de las 22 cuentas listadas en este informe — las extraídas con doctl, gh, kubectl, psql, wazuh-securityadmin y cat /etc/passwd el 2026-06-16.

  2. He validado que el acceso de cada usuario sigue siendo apropiado y conforme a su función actual:

    • Para usuarios humanos internos (3): rol coincide con su función actual de desarrollo backend / CTO.
    • Para service accounts (12): siguen activos y con uso registrado en sus respectivas plataformas durante H1.
    • Para excepciones (2): justificación de negocio vigente (auditor QSA temporal + RBAC slot reservado para auditores futuros).
    • Para usuarios bajados (2): aplicada la acción técnica + logueada en pci_compliance.account_disable_log.
  3. Las cuentas de terceros/proveedores (ControlCase QSA + VAPT) han sido confirmadas vía email con Tejal Rathod el 2026-06-14.

  4. Cualquier excepción (EXEMPT) tiene fecha de re-revisión documentada:

    • controlcase_auditor → scheduled removal 2026-08-31 post-ROC
    • viewer-prod SA → re-evaluar en H2 2026 (si sigue 0 uso → DOWNGRADE)
  5. Las 2 acciones de DOWNGRADE marcadas para H2 (tedevs0, VillaMarCruz) están agendadas para revisión el 2026-12-01. Si en esa fecha siguen sin commits a este repo, se baja el rol de write a triage en GitHub.

Firma: Gabriel Ureña (digitalmente firmado vía git commit signed)

Fecha: 2026-06-16T19:42:00Z

Hash de evidencia (SHA-256 del archivo final, calculado tras commit): (será generado por el post-commit hook)

14. Acuse de revisión del CISO

Yo, Gabriel Ureña (acting CISO), confirmo que:

  1. He revisado el informe del CTO y las decisiones tomadas.
  2. He verificado en una muestra del 100% (single-person org → revisión completa, no muestreo) que la justificación coincide con el rol actual del usuario en HR/calendar/repo activity.
  3. Toda excepción está dentro de la política POL-003 §5.

Nota organizacional: mientras Fintrixs SAS opere como entidad single-person (CTO = CISO = único humano interno), la revisión CTO/CISO es el mismo individuo. Se compensa con:

  • Auditor externo en años pares (próximo: 2026 ControlCase QSA)
  • Reporte trimestral al board (Q1 + Q3 además del semestral)
  • SOP-005 (MFA exception) requiere CISO + testigo externo cuando el solicitante es el CTO

Firma: Gabriel Ureña (acting CISO)

Fecha: 2026-06-16T19:43:00Z

15. Próximo ciclo

ItemFecha
Calendar reminder2026-12-01 09:00 UTC
H2 review deadline2026-12-31 23:59 UTC
Acciones pendientes H2(a) Re-evaluar tedevs0 + VillaMarCruz GitHub roles, (b) verificar remoción controlcase_auditor el 2026-08-31, (c) re-evaluar viewer-prod K8s SA

16. Apéndice — Comandos de extracción reproducibles

bash
# DO
doctl account get --format Email,UUID,Status

# GitHub
gh api repos/Fintrixs-SAS/backend_fintrixs_pay/collaborators --jq '.[] | "\(.login)  \(.role_name)"'

# K8s
kubectl --context do-nyc1-fintrix-production-k8s -n rbac-sod get sa

# Postgres prod
doctl databases user list 061abee8-1d2c-49f4-be08-55f0054288cb --format Name,Role

# Postgres staging
doctl databases user list 75917799-1bf3-4cc3-85d6-71b9dba38e3d --format Name,Role

# Wazuh OpenSearch
kubectl -n wazuh exec wazuh-indexer-0 -- bash -c \
  "JAVA_HOME=/usr/share/wazuh-indexer/jdk \
   /usr/share/wazuh-indexer/plugins/opensearch-security/tools/securityadmin.sh \
     -nhnv -backup /tmp/snap"
cat /tmp/snap/internal_users.yml

# Wazuh API users
kubectl -n wazuh exec wazuh-manager-master-0 -- \
  curl -sk -u 'wazuh-wui:$PASS' -X POST https://localhost:55000/security/user/authenticate \
  | jq .data.token \
  | xargs -I{} curl -sk -H 'Authorization: Bearer {}' https://localhost:55000/security/users

# GoPhish admin (DB direct query)
docker exec gophish sqlite3 /opt/gophish/gophish.db "SELECT username FROM users"

# Linux OS local users
ssh [email protected] "awk -F: '\$3 >= 1000 && \$3 < 65534 {print \$1, \$3, \$7}' /etc/passwd"

Documentación Confidencial — Solo para uso interno y auditoría PCI DSS