<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Josue's Cloud & Security Log]]></title><description><![CDATA[Josue's Cloud & Security Log]]></description><link>https://josclsec.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Sat, 24 Oct 2026 16:29:15 GMT</lastBuildDate><atom:link href="https://josclsec.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Arquitectura Resiliente en AWS: Insights de Seguridad, Desacoplamiento y Redes]]></title><description><![CDATA[En mi continuo camino de aprendizaje como CloudOps y mi preparación para las certificaciones, he estado enfocando mis laboratorios en ir más allá de "hacer…]]></description><link>https://josclsec.hashnode.dev/arquitectura-resiliente-en-aws-insights-de-seguridad-desacoplamiento-y-redes</link><guid isPermaLink="true">https://josclsec.hashnode.dev/arquitectura-resiliente-en-aws-insights-de-seguridad-desacoplamiento-y-redes</guid><category><![CDATA[Security]]></category><category><![CDATA[Amazon EFS]]></category><category><![CDATA[CDN]]></category><category><![CDATA[route53]]></category><category><![CDATA[SQS]]></category><dc:creator><![CDATA[Luis Josue Rivera Rios]]></dc:creator><pubDate>Mon, 20 Apr 2026 00:30:23 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/69a8d92c3b896f7ad68faa7e/3e16ea21-e365-4582-9cc4-741ed42c515c.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>En mi continuo camino de aprendizaje como CloudOps y mi preparación para las certificaciones, he estado enfocando mis laboratorios en ir más allá de "hacer que las cosas funcionen". El objetivo real es diseñar infraestructuras que sean seguras desde su concepción, altamente disponibles y eficientes en costos.</p>
<p>En este artículo, comparto los <em>insights</em> técnicos, las decisiones de arquitectura y las políticas de seguridad que documenté al explorar a fondo Route 53, CloudFront, SQS y EFS.</p>
<h2>1. Aislamiento DNS y Control de Tráfico (Route 53)</h2>
<p>La gestión del DNS no solo es una cuestión de traducción de nombres, sino de seguridad perimetral y disponibilidad global.</p>
<ul>
<li><p><strong>Visibilidad Cero con Private Hosted Zones:</strong> El uso de zonas públicas para servidores internos o bases de datos es una vulnerabilidad clara en la fase de reconocimiento OSINT. La solución que implementé fue crear <em>Private Hosted Zones</em> (ej. awscloud.local), las cuales solo existen dentro del router virtual de la VPC. De esta forma, si un atacante escanea desde internet, solo recibe un error NXDOMAIN, manteniendo nuestra topología de red completamente invisible.</p>
</li>
<li><p><strong>El Paracaídas de S3 en Failover:</strong> Al configurar políticas de enrutamiento <em>Failover</em> (Activo-Pasivo), el registro Primario es el que debe llevar el <em>Health Check</em>. Un detalle de arquitectura excelente es configurar el registro Secundario (sin Health Check) para que apunte, mediante un registro ALIAS, a un bucket de S3 estático con un mensaje de "Sitio en Mantenimiento". S3 es el salvavidas perfecto porque no requiere gestión de servidores y su disponibilidad es altísima.</p>
</li>
<li><p><strong>La trampa del CNAME:</strong> Es vital recordar que un registro CNAME no puede usarse en el dominio raíz. Para conectar recursos nativos (como balanceadores o CDN), siempre debemos usar ALIAS, ya que sí soporta el dominio raíz, es gratuito y Route 53 lo resuelve internamente mucho más rápido.</p>
</li>
</ul>
<p><em>Nota: Al conectar múltiples VPCs (islas seguras) mediante VPC Peering, un aspecto arquitectónico fundamental es que el tráfico viaja íntegramente por la red troncal (backbone) de AWS. Esto proporciona una capa de seguridad crítica al evitar que los datos salgan a internet público, lo cual previene de forma nativa los ataques Man-in-the-Middle durante la comunicación interna de nuestros servicios</em></p>
<h2>2. Seguridad en el Borde y CDN (S3 + CloudFront)</h2>
<p>El paradigma moderno de arquitectura exige que los buckets de almacenamiento nunca estén expuestos directamente a internet público, actuando siempre como "orígenes ocultos".</p>
<ul>
<li><p><strong>El Estándar OAC (Origin Access Control):</strong> La primera línea de defensa en S3 siempre debe ser activar el <em>Block Public Access</em>. Para servir el contenido de forma segura, CloudFront entra por la "puerta trasera" usando OAC. CloudFront inyecta una firma criptográfica secreta que S3 valida a través de su Bucket Policy. Esto bloquea los ataques directos a la URL de S3 y obliga a que todo el tráfico sea mitigado por la red de la CDN.</p>
</li>
<li><p><strong>Restricción de Contenido Premium:</strong> El OAC asegura la infraestructura, pero la URL de CloudFront sigue siendo pública. Para restringir recursos solo a usuarios autenticados, exploré la criptografía a nivel de aplicación. Las <em>Signed URLs</em> resultan ideales para descargas de archivos individuales con caducidad estricta. Por otro lado, las <em>Signed Cookies</em> son el estándar obligatorio para el streaming de video (HLS/DASH), ya que autorizan la descarga de miles de pequeños segmentos de video en bloque sin necesidad de ensuciar las URLs originales.</p>
</li>
</ul>
<p><em>Nota: Es vital no confundir la protección nativa con la seguridad granular en el borde. Aunque CloudFront incluye AWS Shield Standard de forma gratuita para mitigar ataques DDoS volumétricos (Capas 3 y 4) y evitar caídas, esta capa no filtra tráfico malicioso específico. La verdadera defensa a nivel de aplicación (Capa 7), como el bloqueo de inyecciones SQL, el control de bots maliciosos o las restricciones por país de origen, requiere acoplar un AWS WAF ("la aduana") frente a la distribución</em></p>
<h2>3. Cómputo Resiliente y Desacoplamiento (SQS + ASG + RDS)</h2>
<p>La regla de oro al diseñar aplicaciones escalables es estricta: el cómputo (EC2) es desechable y escala horizontalmente, pero las bases de datos relacionales (RDS) no.</p>
<ul>
<li><p><strong>SQS como Amortiguador:</strong> Para evitar caídas del sistema durante picos masivos de tráfico, se coloca SQS en medio del Frontend y el Backend. SQS absorbe los mensajes instantáneamente y finge ante el usuario que la transacción fue inmediata, dándole tiempo al Backend de procesarla a su propio ritmo sin colapsar la RDS.</p>
</li>
<li><p><strong>Autoescalado Inteligente:</strong> El autoescalado tradicional basado en CPU falla terriblemente si un <em>Worker</em> se queda esperando la respuesta de un servicio externo lento (la CPU baja y el ASG no escala). La solución definitiva es configurar el escalado en CloudWatch atado exclusivamente a la métrica <code>ApproximateNumberOfMessagesVisible</code> de la cola.</p>
</li>
<li><p><strong>FinOps y Protección contra Errores:</strong> Al cambiar el <em>Wait Time</em> de 0 a 20 segundos (Long Polling), eliminamos las peticiones vacías (<em>Empty Receives</em>) y reducimos drásticamente los costos de llamadas a la API. Además, es crucial implementar una <em>Dead-Letter Queue (DLQ)</em>. Sin ella, un mensaje mal formado (<em>Poison Pill</em>) que haga crashear a un servidor volvería a la cola infinitamente, matando a todos nuestros <em>Workers</em> uno tras otro.</p>
</li>
</ul>
<p><em>Nota: Más allá del cifrado básico, implementar Server-Side Encryption con KMS (SSE-KMS) resultó ser clave para entornos con requisitos de cumplimiento (como normativas médicas o bancarias). Su gran ventaja es que permite auditar a través de CloudTrail exactamente quién o qué proceso intentó leer un mensaje. Además, la seguridad no recae solo en el usuario; la cola misma requiere una Access Policy que aplique el Principio de Menor Privilegio, limitando estrictamente las acciones de SendMessage y ReceiveMessage según el ARN del rol de las instancias EC2 autorizadas</em></p>
<h2>4. Almacenamiento Compartido Seguro (Amazon EFS)</h2>
<p>Finalmente, a diferencia del almacenamiento en bloque, EFS permite que miles de instancias accedan al mismo disco simultáneamente de forma elástica.</p>
<ul>
<li><p><strong>Prevención de Costos Ocultos de Red:</strong> Es mandatorio crear <em>Mount Targets</em> en cada Zona de Disponibilidad (AZ) donde tengamos servidores. Si olvidamos uno, las instancias tendrán que cruzar a otra AZ para leer el disco, generando latencia y altos costos de transferencia de red cruzada.</p>
</li>
<li><p><strong>Defensa en Profundidad:</strong> A nivel de red (Capa 4), el Security Group del <em>Mount Target</em> solo debe permitir el puerto 2049 si el origen (Source) es estrictamente el Security Group de las instancias EC2 autorizadas. A nivel de identidad, las <em>File System Policies</em> me permitieron blindar el disco, aplicando <em>Root Squashing</em> para bloquear al usuario root y forzando que toda conexión use encriptación TLS en tránsito.</p>
</li>
</ul>
<p><em>Nota: En el protocolo NFS tradicional, el acceso suele validarse únicamente por reglas de red e IP. Sin embargo, al documentar las File System Policies de EFS, exploré cómo llevar esto al nivel de identidad de la nube. Una excelente práctica de seguridad es escribir políticas que no solo confíen en la red, sino que exijan que los clientes asuman roles de IAM específicos y autorizados para poder realizar el montaje del disco.</em></p>
<h3>Conclusión</h3>
<p>Diseñar en AWS no se trata de encender servidores; es un ejercicio constante de fijar límites y proteger recursos. El verdadero límite de seguridad es el resultado de coordinar la infraestructura con el código de la aplicación. Este laboratorio me demostró cómo una arquitectura bien acoplada y protegida por capas no solo soporta el tráfico masivo, sino que previene dolores de cabeza operativos y financieros a largo plazo.</p>
]]></content:encoded></item><item><title><![CDATA[RDS en AWS: aprendizajes prácticos desde CloudOps y seguridad]]></title><description><![CDATA[Cuando uno empieza en la nube, es muy fácil caer en la trampa de crear bases de datos avanzando rápido con “Siguiente” hasta ver el estado Available. Sin…]]></description><link>https://josclsec.hashnode.dev/rds-en-aws-aprendizajes-pr-cticos-desde-cloudops-y-seguridad</link><guid isPermaLink="true">https://josclsec.hashnode.dev/rds-en-aws-aprendizajes-pr-cticos-desde-cloudops-y-seguridad</guid><category><![CDATA[rds]]></category><category><![CDATA[Security]]></category><category><![CDATA[multi-az]]></category><category><![CDATA[high availability]]></category><category><![CDATA[Point-in-Time Recovery]]></category><dc:creator><![CDATA[Luis Josue Rivera Rios]]></dc:creator><pubDate>Mon, 13 Apr 2026 00:03:55 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/69a8d92c3b896f7ad68faa7e/5b5327c6-bc4a-48d6-8b80-5b580ba1e070.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Cuando uno empieza en la nube, es muy fácil caer en la trampa de crear bases de datos avanzando rápido con “Siguiente” hasta ver el estado Available. Sin embargo, en lo que he venido practicando últimamente sobre arquitecturas CloudOps con enfoque en seguridad, fui entendiendo que el valor no está solo en levantar el servicio, sino en cómo se protege, se monitorea y se prepara para fallos.</p>
<p>Quiero compartir algunos apuntes y descubrimientos que me ayudaron a entender mejor cómo trabajar con Amazon RDS.</p>
<h2>1. Enfoque "Zero Trust": evitando contraseñas en el código</h2>
<p>Uno de los conceptos que más me llamó la atención fue entender que, en seguridad moderna, no es recomendable escribir contraseñas manualmente ni dejarlas en el código. En este punto descubrí que existen dos enfoques principales que suelen combinarse:</p>
<p><strong>AWS Secrets Manager:</strong><br />Permite generar, cifrar y rotar contraseñas automáticamente. Algo que me pareció interesante es la estrategia de <em>Alternating Users</em>, donde se manejan dos usuarios (A y B) y se rota uno mientras el otro sigue en uso, evitando interrupciones en la aplicación.</p>
<p><strong>IAM Database Authentication:</strong><br />En lugar de contraseñas, se utilizan tokens temporales (aproximadamente 15 minutos) generados a partir de un rol de IAM. Esto reduce el impacto en caso de que un token sea expuesto.</p>
<p><strong>Aprendizaje personal (enfoque híbrido):</strong><br />Al inicio pensé que IAM Auth reemplazaba a Secrets Manager, pero con la práctica entendí que ambos se complementan. IAM Auth funciona bien para microservicios internos que generan conexiones dinámicas, mientras que Secrets Manager sigue siendo necesario para accesos administrativos o herramientas externas (como Power BI).</p>
<h2>2. Aislamiento de red: reduciendo la exposición</h2>
<p>Algo que fui entendiendo es que un error común es dejar bases de datos expuestas. En un enfoque CloudOps con seguridad, suele recomendarse mantener la opción <em>Public Access</em> en "NO" y desplegar la base de datos en subredes privadas.</p>
<p><strong>Security Groups granulares:</strong><br />En lugar de usar el grupo por defecto o abrir el puerto a <code>0.0.0.0/0</code>, una mejor práctica es permitir el acceso solo desde orígenes específicos. Por ejemplo, el puerto 3306 (MySQL) puede restringirse al Security Group de los servidores web o a un bastion host.</p>
<p><strong>VPC Injection para Lambdas:</strong><br />Si se utilizan funciones serverless, es importante que la Lambda esté dentro de la misma VPC y subredes, con el Security Group adecuado. De lo contrario, el tráfico puede ser bloqueado por las reglas de red.</p>
<h2>3. Entendiendo la diferencia: Alta Disponibilidad vs Escalabilidad</h2>
<p>Antes solía confundir tener una copia de la base de datos con contar con un sistema tolerante a fallos. Con la práctica fui entendiendo mejor la diferencia entre ambos enfoques:</p>
<p><strong>Multi-AZ Instance (enfocado en disponibilidad):</strong><br />Consiste en un nodo principal y un nodo standby oculto. Su objetivo es el <em>Disaster Recovery</em>. Si el principal falla, AWS realiza un <em>failover</em> automático en aproximadamente 60 a 120 segundos. Este nodo secundario no se utiliza para lecturas, sino únicamente como respaldo ante fallos.</p>
<p><strong>Read Replicas (enfocado en escalabilidad):</strong><br />Son copias asíncronas de la base de datos principal. Se utilizan para distribuir carga de lectura (por ejemplo, reportes) y evitar sobrecargar el nodo principal. Si el principal falla, la réplica no toma el control automáticamente; se requiere una promoción manual.</p>
<h2>4. Operaciones "Day-2": herramientas para entornos productivos</h2>
<p>Al trabajar en entornos de producción, fui viendo que existen varias herramientas que ayudan a operar la base de datos de forma más segura y controlada:</p>
<p><strong>Point-in-Time Recovery (PITR):</strong><br />Permite restaurar la base de datos a un punto específico en el tiempo, por ejemplo, justo antes de un error humano (como un <code>DROP TABLE</code> accidental). Esto es posible porque AWS almacena y reproduce los <em>transaction logs</em>.</p>
<p><strong>RDS Proxy:</strong><br />Es especialmente útil cuando se conectan Lambdas a RDS. El Proxy ayuda a manejar múltiples conexiones simultáneas y evita sobrecargar la base de datos, reduciendo problemas como el <em>connection storm</em>.</p>
<p><strong>Blue/Green Deployments:</strong><br />Permite actualizar motores de base de datos con menor impacto. AWS crea un entorno paralelo (Green), lo actualiza de forma aislada, sincroniza los datos y luego realiza el cambio de tráfico en pocos segundos. En mi caso, aprendí que este proceso puede requerir ajustes si la base de datos está integrada con Secrets Manager, por lo que es importante considerarlo antes de clonar.</p>
<h2>5. Consideraciones de costos (FinOps)</h2>
<p>Finalmente, algo que también fui entendiendo es que trabajar en la nube implica tener cuidado con los costos y evitar configuraciones que puedan generar gastos innecesarios.</p>
<p><strong>Storage Autoscaling:</strong><br />Es una funcionalidad muy útil en producción, pero conviene definir un "límite máximo" (por ejemplo, 1000 GiB) para evitar facturas inesperadas si algún error de código genera crecimiento descontrolado.</p>
<p><strong>El impacto del "Extended Support":</strong><br />Si se utilizan versiones antiguas de motores de bases de datos, AWS puede aplicar un recargo por soporte extendido. Por eso, es recomendable planificar migraciones hacia versiones que se mantengan con soporte activo.</p>
<h3>Conclusión</h3>
<p>Aprender RDS con un enfoque CloudOps y de seguridad me ayudó a ver que diseñar infraestructura no es solo desplegar recursos, sino también pensar en cómo protegerlos, mantenerlos disponibles y operarlos de forma controlada.</p>
<p>Aspectos como el aislamiento de red, la gestión de credenciales, la tolerancia a fallos y el control de costos forman parte de un mismo enfoque, donde poco a poco se pasa de crear servicios básicos a construir soluciones más completas y preparadas para escenarios reales.</p>
]]></content:encoded></item><item><title><![CDATA[Alta Disponibilidad en AWS: aprendizajes prácticos desde una arquitectura real]]></title><description><![CDATA[VPC personalizada 2 AZs Subredes públicas y privadas Application Load Balancer Auto Scaling Group NAT Gateway Seguridad: SG + NACL + enfoque defense in…]]></description><link>https://josclsec.hashnode.dev/alta-disponibilidad-en-aws-aprendizajes-pr-cticos-desde-una-arquitectura-real</link><guid isPermaLink="true">https://josclsec.hashnode.dev/alta-disponibilidad-en-aws-aprendizajes-pr-cticos-desde-una-arquitectura-real</guid><category><![CDATA[AWS]]></category><category><![CDATA[Resilience]]></category><category><![CDATA[cloud security]]></category><category><![CDATA[efficiency]]></category><dc:creator><![CDATA[Luis Josue Rivera Rios]]></dc:creator><pubDate>Sun, 05 Apr 2026 20:03:16 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/69a8d92c3b896f7ad68faa7e/e53728f2-02f2-40c4-81e1-f9de57983e71.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>🧩 Arquitectura implementada</h2>
<ul>
<li><p>VPC personalizada</p>
</li>
<li><p>2 AZs</p>
</li>
<li><p>Subredes públicas y privadas</p>
</li>
<li><p>Application Load Balancer</p>
</li>
<li><p>Auto Scaling Group</p>
</li>
<li><p>NAT Gateway</p>
</li>
<li><p>Seguridad: SG + NACL + enfoque defense in depth</p>
</li>
</ul>
<h2>Introducción</h2>
<p>Desplegar en la nube puede ser relativamente sencillo, pero cuando empiezas a pensar en resiliencia y seguridad es donde realmente entiendes cómo funcionan las arquitecturas en producción.</p>
<p>En este artículo comparto algunos conceptos y aprendizajes prácticos sobre Alta Disponibilidad (HA), enfocados en cómo diseñar sistemas que puedan seguir funcionando ante fallos de infraestructura, picos de tráfico o problemas en una zona de disponibilidad.</p>
<hr />
<p>💡 <strong>La Regla de Oro de la Alta Disponibilidad</strong><br />Un balanceador de carga debería desplegarse en al menos 2 Zonas de Disponibilidad (AZs). Si una zona de AWS sufre un problema físico, el sistema puede seguir funcionando al enrutar tráfico hacia la otra.</p>
<hr />
<h2>¿Por qué no seleccionar las 6 Zonas disponibles para ser "invencibles"?</h2>
<p>A primera vista, usar todas las zonas parece la opción más segura, pero en la práctica no siempre es lo más eficiente.</p>
<p>AWS cobra por el tráfico de red que cruza entre diferentes Zonas de Disponibilidad (Cross-AZ data transfer). Si despliegas en 6 zonas, el tráfico de replicación y balanceo entre ellas puede incrementar significativamente los costos, sin necesariamente aportar un beneficio proporcional en disponibilidad.</p>
<p>Por eso, en muchos entornos reales, se suele trabajar con <strong>2 o máximo 3 zonas</strong>, buscando un equilibrio entre resiliencia y control de costos (FinOps).</p>
<hr />
<h2>Paso 1: Preparando el terreno (VPC y redes)</h2>
<p>Antes de lanzar servidores, es importante contar con una base de red bien definida. Aunque la VPC por defecto de AWS puede servir para pruebas rápidas, cuando buscas mayor control y seguridad vale la pena diseñar tu propia red.</p>
<h3>Diseño de subredes</h3>
<p>Una práctica común es separar subredes públicas y privadas dentro de una misma Zona de Disponibilidad.<br />Para evitar problemas de direccionamiento, se utilizan bloques CIDR que no se superpongan (por ejemplo, <code>172.31.96.0/20</code>).</p>
<h3>Seguridad desde el diseño (Block Public Access)</h3>
<p>En este caso, opté por desplegar las instancias EC2 en subredes privadas.<br />Al no asignarles IP pública, se reduce considerablemente la exposición directa a internet, lo que ayuda a mejorar la seguridad desde el inicio.</p>
<hr />
<p>⚠️ <strong>Error Común: El peaje del NAT Gateway y la trampa de la IP</strong></p>
<p>Para que tus máquinas privadas puedan descargar actualizaciones (por ejemplo, <code>yum update</code>), necesitan un NAT Gateway en una subred pública.</p>
<ul>
<li><p><strong>Costo oculto:</strong> AWS cobra aproximadamente $0.045 por hora simplemente por la existencia del NAT, incluso si las EC2 están apagadas.</p>
</li>
<li><p><strong>La trampa de la IP elástica:</strong> Si decides eliminar el NAT Gateway para ahorrar costos, debes liberar (Release) inmediatamente su Elastic IP. Si la dejas asociada sin uso, AWS seguirá cobrando por ella.</p>
</li>
</ul>
<hr />
<p>🔒 <strong>Security Tip (Defensa en profundidad vs. escalabilidad)</strong></p>
<p>Aunque ubicar instancias en subredes privadas reduce la exposición directa a internet, esto por sí solo no constituye un modelo Zero Trust. El riesgo no siempre viene del exterior, sino también de errores de configuración o posibles compromisos dentro de la propia VPC.</p>
<h3>La opción "Económica" (Network ACLs)</h3>
<p>Las NACLs actúan como una capa adicional de defensa a nivel de subred, permitiendo definir reglas explícitas de tipo <em>deny</em>.</p>
<p>Son útiles como mecanismo de contención ante errores en Security Groups o para limitar el movimiento lateral entre subredes.</p>
<p>Sin embargo, al ser <strong>stateless</strong>, su operación a gran escala puede volverse compleja y propensa a errores, especialmente al manejar tráfico bidireccional y puertos efímeros.</p>
<hr />
<h3>La opción Enterprise (AWS Network Firewall / GWLB)</h3>
<p>En entornos más avanzados, una práctica común es centralizar la inspección del tráfico mediante AWS Network Firewall o appliances de terceros integrados con Gateway Load Balancer.</p>
<p>Esto permite aplicar políticas consistentes para tráfico norte-sur y este-oeste, ofreciendo un modelo más escalable y alineado con arquitecturas Zero Trust en entornos con múltiples VPCs.</p>
<hr />
<h2>Paso 2: Creando el Launch Template (la receta de tus servidores)</h2>
<p>El Launch Template define la configuración base con la que se crearán tus instancias EC2: tipo de instancia, sistema operativo, almacenamiento, entre otros.</p>
<h3>Versionado</h3>
<p>Algo importante que aprendí es que al crear una nueva versión (por ejemplo, V2) y marcarla como “Default”, este cambio solo aplica para las nuevas instancias.</p>
<p>Las que ya están corriendo con versiones anteriores no se actualizan automáticamente, por lo que es necesario gestionarlas manualmente o mediante el Auto Scaling Group.</p>
<hr />
<p>⚠️ <strong>Error Común: La trampa del User Data</strong></p>
<p>El script de inicialización (<code>#!/bin/bash</code>) se ejecuta una sola vez en la vida de la máquina: exactamente en el momento en que se crea.</p>
<p>Si la red (como el NAT Gateway) no estaba lista en ese instante, la máquina puede iniciarse sin instalar el software necesario (por ejemplo, Apache) y no volverá a intentarlo automáticamente.</p>
<hr />
<p>💡 <strong>Pro-Tip: diagnóstico sin SSH</strong></p>
<p>Si una máquina falla al iniciar, no siempre es necesario conectarse por consola.</p>
<p>Desde la consola de AWS puedes usar <strong>Get System Log</strong>, lo que permite revisar los registros de arranque directamente y detectar problemas como fallos de red o errores en el script.</p>
<hr />
<p>🔒 <strong>Security Tip (Hardening de instancias)</strong></p>
<p>En el Launch Template es recomendable:</p>
<ul>
<li><p>Exigir el uso de <strong>IMDSv2</strong> y deshabilitar IMDSv1</p>
</li>
<li><p>Evitar almacenar contraseñas o tokens en texto plano</p>
</li>
<li><p>Utilizar servicios como <strong>AWS Secrets Manager</strong></p>
</li>
</ul>
<p>Esto ayuda a mitigar riesgos como ataques SSRF y exposición de credenciales temporales.</p>
<hr />
<h2>Paso 3: Configurando los Target Groups (los destinos del tráfico)</h2>
<p>Antes de crear el balanceador, necesitas definir hacia dónde se enviará el tráfico.</p>
<h3>Tipos de targets</h3>
<p>Una configuración común es usar instancias EC2 como destino en el puerto 80 (HTTP).</p>
<h3>Seguridad en el tráfico interno</h3>
<p>En escenarios más exigentes, también se puede cifrar el tráfico interno.<br />Por ejemplo, usando el puerto 443 entre el balanceador y las instancias para lograr cifrado de extremo a extremo.</p>
<h3>Health Checks</h3>
<p>Permiten al balanceador verificar si una instancia está respondiendo correctamente.<br />Si falla, deja de recibir tráfico automáticamente y puede ser reemplazada por el Auto Scaling Group.</p>
<h3>Sesiones persistentes (Stickiness)</h3>
<p>Permiten que un usuario sea dirigido siempre a la misma instancia.<br />Esto puede ser útil en aplicaciones que manejan sesiones en memoria.</p>
<hr />
<h2>Paso 4: Desplegando el Application Load Balancer (ALB)</h2>
<p>El Application Load Balancer distribuye el tráfico HTTP/HTTPS entre las instancias disponibles.</p>
<h3>Cross-Zone Load Balancing</h3>
<p>Permite distribuir tráfico entre distintas Zonas de Disponibilidad, evitando desbalances.</p>
<h3>Listener Rules</h3>
<p>Permite enrutar tráfico según:</p>
<ul>
<li><p>rutas (<code>/api</code>)</p>
</li>
<li><p>subdominios (<a href="http://admin.dominio.com"><code>admin.dominio.com</code></a>)</p>
</li>
</ul>
<hr />
<p>⚠️ <strong>Error Común: Security Groups mal configurados</strong></p>
<p>Si tus instancias están sanas pero el ALB muestra errores como <em>Request timed out</em>, muchas veces el problema está en el Security Group del balanceador.</p>
<p>No solo necesita reglas de entrada, sino también reglas de salida hacia las EC2 para poder reenviar correctamente las solicitudes.</p>
<hr />
<h2>Paso 5: Auto Scaling Group (ASG) y auto-recuperación</h2>
<p>El Auto Scaling Group mantiene la cantidad deseada de instancias y trabaja junto con el Load Balancer y el Launch Template.</p>
<h3>Auto-recuperación (Self-healing)</h3>
<p>El ASG compara constantemente el estado actual con el deseado.<br />Si detecta que falta una instancia, lanza automáticamente una nueva.</p>
<h3>Deregistration Delay</h3>
<p>Cuando una instancia se retira, entra en un estado de drenaje que permite terminar conexiones activas antes de apagarse.</p>
<hr />
<p>💡 <strong>Pro-Tip: actualizaciones sin downtime</strong></p>
<p>En lugar de eliminar instancias manualmente, se puede usar <strong>Instance Refresh (Rolling Update)</strong>.</p>
<p>Esto permite reemplazar instancias de forma gradual, manteniendo la disponibilidad del servicio.</p>
<hr />
<p>🔒 <strong>Security Tip (Inmutabilidad y acceso seguro)</strong></p>
<ul>
<li><p>Las instancias deben ser <strong>efímeras e inmutables</strong></p>
</li>
<li><p>Evitar uso de llaves SSH en producción</p>
</li>
<li><p>Utilizar <strong>AWS Systems Manager (Session Manager)</strong></p>
</li>
</ul>
<p>Esto permite acceso auditado sin abrir puertos ni gestionar llaves estáticas.</p>
<hr />
<h2>Paso 6: Verificación y mejoras adicionales</h2>
<p>Una vez que todo está funcionando, es importante validar el comportamiento bajo carga y evaluar mejoras.</p>
<h3>Warm Pool</h3>
<p>Permite tener instancias preconfiguradas listas para responder rápidamente ante picos de tráfico.</p>
<h3>Zonal Shift</h3>
<p>Permite redirigir tráfico fuera de una AZ en caso de problemas.</p>
<h3>Protección y distribución global</h3>
<ul>
<li><p>Uso de <strong>WAF</strong> para mitigar ataques comunes</p>
</li>
<li><p>Uso de <strong>CDN</strong> para mejorar latencia global</p>
</li>
</ul>
<hr />
<p>🔒 <strong>Security Tip (Defensa en el Edge)</strong></p>
<p>Una arquitectura de alta disponibilidad también debería considerar protección en el borde:</p>
<ul>
<li><p>Asociar el ALB con AWS WAF para mitigar OWASP Top 10</p>
</li>
<li><p>Usar CloudFront para absorber tráfico antes de llegar a la infraestructura</p>
</li>
</ul>
<hr />
<h2>🧾 Conclusión</h2>
<p>Al final, este recorrido no trata solo de levantar servidores en AWS, sino de diseñar un sistema que pueda responder ante escenarios reales: fallos de infraestructura, picos de tráfico, errores humanos o eventos de seguridad.</p>
<p>Cada decisión —desde usar 2–3 AZs, hasta aislar instancias en subredes privadas, automatizar despliegues con Launch Templates y apoyarse en Auto Scaling— apunta a reducir puntos únicos de fallo sin perder control operativo ni financiero.</p>
<p>La arquitectura tiene sentido porque combina tres pilares:</p>
<ul>
<li><p><strong>Alta disponibilidad:</strong> distribución entre zonas, balanceo de carga y auto-recuperación</p>
</li>
<li><p><strong>Seguridad desde el diseño:</strong> menor exposición y controles en múltiples capas</p>
</li>
<li><p><strong>Eficiencia operativa:</strong> automatización y control de costos</p>
</li>
</ul>
<p>En conjunto, más que una arquitectura puntual, lo que se construye es una forma distinta de pensar: pasar de servidores individuales a sistemas distribuidos que pueden adaptarse y recuperarse automáticamente.</p>
<h2>💡 Aprendizajes clave</h2>
<ul>
<li><p>Más AZs ≠ mejor arquitectura (impacto en costos Cross-AZ)</p>
</li>
<li><p>Subred privada ≠ seguridad completa</p>
</li>
<li><p>NAT Gateway puede generar costos ocultos</p>
</li>
<li><p>User Data es sensible al timing de red</p>
</li>
<li><p>ASG cambia el enfoque: de servidores → sistemas auto-recuperables</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Dominando AWS: Infraestructura que se repara sola (SecOps y Remediación) - Parte 3]]></title><description><![CDATA[En la primera parte aprendimos a observar nuestra infraestructura y en la segunda a centralizar y asegurar nuestros logs como evidencia forense. Pero saber…]]></description><link>https://josclsec.hashnode.dev/dominando-aws-infraestructura-que-se-repara-sola-secops-y-remediaci-n-parte-3</link><guid isPermaLink="true">https://josclsec.hashnode.dev/dominando-aws-infraestructura-que-se-repara-sola-secops-y-remediaci-n-parte-3</guid><dc:creator><![CDATA[Luis Josue Rivera Rios]]></dc:creator><pubDate>Mon, 30 Mar 2026 04:14:57 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/69a8d92c3b896f7ad68faa7e/e358e758-26f8-4abc-902f-fb173f0cd245.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>En la primera parte aprendimos a observar nuestra infraestructura y en la segunda a centralizar y asegurar nuestros logs como evidencia forense. Pero saber que algo está roto no es suficiente.</p>
<p>En esta tercera y última parte, daremos el salto definitivo en la Ingeniería de Plataforma: pasar de un enfoque tradicional de "monitoreo pasivo" a <strong>Operaciones de Seguridad (SecOps)</strong> proactivas. Vamos a construir una infraestructura basada en eventos (<strong>Event-Driven</strong>) que detecta configuraciones erróneas y fallos, ejecutando la remediación en milisegundos para reducir el Tiempo Medio de Remediación (MTTR) literalmente a cero.</p>
<h3>1. El Patrón "Fixer": Remediación de Seguridad Zero-Day</h3>
<p><strong>El Problema:</strong> Un administrador (o un atacante que robó credenciales) abre manualmente el Puerto 22 (SSH) a todo internet (<code>0.0.0.0/0</code>) en un Security Group, exponiendo tus servidores a ataques de fuerza bruta.</p>
<p>Si dependes de un humano revisando alertas de seguridad, la respuesta tomará horas. Así es como lo arreglamos en milisegundos sin intervención humana:</p>
<ul>
<li><p><strong>El Gatillo:</strong> El usuario ejecuta la llamada a la API (<code>AuthorizeSecurityGroupIngress</code>). AWS CloudTrail audita y registra esta acción inmediatamente.</p>
</li>
<li><p><strong>El Cerebro:</strong> Amazon EventBridge intercepta el flujo de logs de CloudTrail, detectando el patrón malicioso <code>0.0.0.0/0</code>.</p>
</li>
<li><p><strong>El Ejecutor:</strong> EventBridge invoca una función <strong>AWS Lambda</strong> (escrita en Python/Boto3).</p>
</li>
<li><p><strong>La Remediación:</strong> Lambda extrae el ID del Security Group y ejecuta la API <code>revoke_security_group_ingress</code> para aniquilar la regla al instante.</p>
</li>
</ul>
<p><strong>🔐 Enfoque SecOps (Seguridad por Diseño):</strong></p>
<ol>
<li><p><strong>Cumplimiento Zero-Day:</strong> La regla se elimina a los pocos segundos; los auditores humanos nunca llegan a ver la violación.</p>
</li>
<li><p><strong>Privilegio Menor (Least Privilege):</strong> La función Lambda no debe tener permisos de administrador. Usa un rol de IAM dedicado exclusivamente a modificar ese Security Group en particular.</p>
</li>
</ol>
<h3>2. El Patrón "Doctor": Auto-sanación del Sistema Operativo</h3>
<p><strong>El Problema:</strong> Son las 3:00 AM y tu servidor Nginx o Apache se congela por un pico de CPU. Tradicionalmente, despertarías al ingeniero de guardia para entrar por SSH y reiniciar el servicio a mano.</p>
<p>Así es como lo automatizamos:</p>
<ul>
<li><p><strong>La Alarma:</strong> CloudWatch detecta que la métrica <code>CPUUtilization</code> supera el umbral crítico.</p>
</li>
<li><p><strong>El Cerebro:</strong> EventBridge intercepta el evento de "Cambio de estado de alarma" de CloudWatch.</p>
</li>
<li><p><strong>El Ejecutor y Reparación:</strong> EventBridge invoca a <strong>AWS Systems Manager (SSM)</strong> (<code>AWS-RunShellScript</code>), el cual accede directamente al sistema operativo Linux y ejecuta comandos nativos (ej. <code>sudo systemctl restart nginx</code>).</p>
</li>
</ul>
<p><strong>🔐 Enfoque SecOps (El Fin del SSH):</strong></p>
<ul>
<li><p><strong>Modelo Zero-Trust:</strong> Logramos reparar el sistema operativo SIN usar llaves SSH y SIN abrir el Puerto 22. Nadie accede a la instancia a menos que SSM le otorgue permisos temporales.</p>
</li>
<li><p><strong>Rastro Inmutable:</strong> Todas las operaciones de SSM (los comandos ejecutados y sus resultados) quedan registradas y son 100% auditables en la consola de AWS.</p>
</li>
</ul>
<h3>3. Las Reglas de Hierro para no romper tu propia infraestructura</h3>
<p>Automatizar a ciegas es peligroso. Si vas a implementar auto-remediación, grábate estas reglas:</p>
<ul>
<li><p><strong>El error del 100% (Cuándo disparar):</strong> Si automatizas la limpieza de un disco duro, ¡nunca esperes a que llegue al 100%! A ese nivel, el sistema operativo se ahoga y el agente ya no puede recibir ni ejecutar el comando de SSM. Configura las alarmas preventivas al 85% o 90%.</p>
</li>
<li><p><strong>Limpieza Segura:</strong> Los scripts automáticos de borrado solo deben apuntar a carpetas inherentes al sistema (ej. <code>C:\Windows\Temp</code> o <code>/var/log/</code> antiguos), jamás a directorios de la aplicación o bases de datos del cliente.</p>
</li>
<li><p><strong>Picos vs. Cuelgues:</strong> Para evitar que un pico de tráfico de 10 segundos reinicie tu servidor por error, la alarma debe exigir persistencia. Configúrala para que salte solo si el CPU está al 100% durante "3 periodos consecutivos de 1 minuto".</p>
</li>
<li><p><strong>No reinicies a ciegas:</strong> Si la arquitectura es crítica, no reinicies el servicio local. Es mejor usar un Auto Scaling Group; si la máquina falla, AWS levanta una nueva y limpia automáticamente, apagando la defectuosa sin afectar al cliente.</p>
</li>
</ul>
<h3>4. Auto-Recovery: Cuando falla el hardware de AWS</h3>
<p>Recuerda: la nube de AWS se ejecuta en hardware físico, y el hardware puede (y va) a fallar.</p>
<p>AWS tiene dos latidos: el <strong>Instance Status Check</strong> (falla si el sistema operativo colapsa) y el <strong>System Status Check</strong> (falla si se quema la red física, la energía o el hardware del rack de AWS).</p>
<p><strong>Solución Automática:</strong> Configura una alarma en CloudWatch atada al evento <code>StatusCheckFailed_System</code> con una Acción EC2 de <strong>"Recover"</strong>. Tras bambalinas, AWS apagará tu máquina en el hardware dañado, la migrará a un fierro sano y la encenderá conservando la misma IP, misma red y mismo disco duro. Esto te da Alta Disponibilidad (HA) gratis, sin arquitecturas complejas.</p>
<h3>Conclusión de la Serie</h3>
<p>Los despliegues modernos en la nube requieren mucho más que tableros con gráficas bonitas. Exigen arquitecturas auto-reparables (<strong>Self-Healing</strong>) y continuamente conformes (<strong>Continuously Compliant</strong>). Al combinar CloudWatch, Logs estructurados, EventBridge, Lambda y SSM, no solo ahorras tiempo, sino que duermes tranquilo sabiendo que la infraestructura se defiende sola.</p>
]]></content:encoded></item><item><title><![CDATA[Dominando AWS: El Arte del Logging, Auditoría y SecOps (Parte 2)]]></title><description><![CDATA[En la primera parte de esta serie rompimos el mito del monitoreo ciego y exploramos la observabilidad. Pero, ¿qué pasa cuando la métrica de CPU se dispara…]]></description><link>https://josclsec.hashnode.dev/dominando-aws-el-arte-del-logging-auditor-a-y-secops-parte-2</link><guid isPermaLink="true">https://josclsec.hashnode.dev/dominando-aws-el-arte-del-logging-auditor-a-y-secops-parte-2</guid><category><![CDATA[logging]]></category><dc:creator><![CDATA[Luis Josue Rivera Rios]]></dc:creator><pubDate>Mon, 30 Mar 2026 04:05:57 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/69a8d92c3b896f7ad68faa7e/1f2a8c82-5a62-49a7-8d0a-7c112dee3c24.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>En la primera parte de esta serie rompimos el mito del monitoreo ciego y exploramos la observabilidad. Pero, ¿qué pasa cuando la métrica de CPU se dispara y necesitas saber exactamente qué ocurrió? <strong>Aquí es donde entran los Logs.</strong></p>
<p>En AWS, los logs no son simples archivos de texto molestos que llenan tu disco duro; son tu evidencia forense, tu fuente de la verdad para el <em>troubleshooting</em> y tu principal línea de defensa en seguridad. Sin embargo, recolectarlos mal te costará carísimo y te hará perder horas buscando una aguja en un pajar.</p>
<h2>1. Estandarización: El Rey CWA (CloudWatch Agent)</h2>
<p>En el mundo real, se lidia con aplicaciones legacy o configuraciones por defecto (como Nginx o Apache) que escupen logs en texto plano dispersos en múltiples servidores. Si no tienes acceso al código de los desarrolladores para cambiar este comportamiento, tu solución operativa es el <strong>CloudWatch Agent (CWA)</strong>.</p>
<p>La inmensa mayoría de las empresas se apoya en el CWA como su "caballo de batalla diario" para evitar configuraciones complejas.</p>
<blockquote>
<p><strong>La Mejor Práctica:</strong> La instalación del agente debe ser obligatoria en todas tus máquinas y desplegarse masivamente vía <strong>AWS Systems Manager (SSM)</strong>. Esto centraliza los logs tal cual están y elimina para siempre la necesidad de entrar servidor por servidor vía SSH o RDP para leer un error.</p>
</blockquote>
<h2>2. El Secreto Técnico Definitivo: Logs Estructurados</h2>
<p>Si tienes control sobre la aplicación, aplica esta regla de oro moderna: usa <strong>"Wide event structured logs"</strong>.</p>
<p>Configura tus aplicaciones para que emitan los logs en formato <strong>JSON</strong> (por ejemplo: <code>{"nivel": "ERROR", "usuario": "admin", "latencia_ms": "300"}</code>) en lugar de texto plano.</p>
<p><strong>¿Por qué es vital?</strong> Al estar estructurado en JSON, CloudWatch lee esos campos automáticamente y los convierte en métricas (como graficar la latencia) sin que tengas que programar absolutamente nada extra. Es la base para hacer búsquedas rápidas.</p>
<h2>3. El Fin del "Tanteo": CloudWatch Logs Insights</h2>
<p>En arquitecturas pequeñas, se sobrevive "tanteando" los errores guiándose por la intuición (revisar el WAF, luego EC2, luego la base de datos RDS), pero en entornos complejos esto es insostenible.</p>
<p>Tu salvavidas real es <strong>CloudWatch Logs Insights</strong>. Actúa como un motor de búsqueda avanzado que filtra errores en toda tu infraestructura en cuestión de segundos, eliminando por completo la necesidad de leer archivos de texto manuales.</p>
<h2>4. Auditoría y Seguridad a Nivel de Red y API</h2>
<p>Para aplicar un verdadero enfoque <strong>SecOps</strong>, necesitas dos herramientas clave más allá de CloudWatch:</p>
<h3>🛡️ AWS CloudTrail (El Auditor Forense)</h3>
<p>Registra "Quién hizo qué, cuándo, y desde dónde" a nivel de la API de AWS. Si alguien borra una base de datos o abre un puerto sensible, CloudTrail guarda el usuario, la IP y la hora exacta.</p>
<p><strong>🔐 SecOps Quick Wins (Casi gratis):</strong> Integra CloudTrail con CloudWatch Logs para crear alarmas súper baratas (aprox $0.10 USD) que vigilen acciones críticas de seguridad. Configura alertas inmediatas para:</p>
<ul>
<li><p>Uso de la cuenta Root (totalmente prohibido por buenas prácticas).</p>
</li>
<li><p>5 intentos fallidos de login en la consola (posible ataque de fuerza bruta).</p>
</li>
<li><p>Apertura de puertos sensibles como SSH (22) o RDP (3389) a 0.0.0.0/0 en los Security Groups.</p>
</li>
<li><p>Cambios de escalamiento de privilegios en políticas de IAM.</p>
</li>
</ul>
<p>Nota Avanzada: Para entornos de misión crítica, puedes elevar el nivel activando Amazon GuardDuty, que usa Machine Learning para detectar tráfico malicioso desde y hacia tus instancias (como minería de criptomonedas).</p>
<h3>🌐 VPC Flow Logs (El Inspector de Tráfico)</h3>
<p>Registra la metadata del tráfico IP que entra y sale de las interfaces de red (ENIs) en tu VPC. No lee el contenido del paquete, pero te indica si un paquete fue aceptado (<strong>ACCEPT</strong>) o rechazado (<strong>REJECT</strong>).</p>
<p><strong>💡 Tip de Troubleshooting:</strong> Si una aplicación no conecta, VPC Flow Logs te confirma de inmediato si es un bloqueo en los Security Groups/NACLs de AWS (<strong>REJECT</strong>) o un error interno del software de la aplicación.</p>
<h2>5. Reglas de Hierro para la Gestión de Logs (FinOps y SecOps)</h2>
<p>Gestionar logs sin políticas claras te llevará a la bancarrota o a brechas de seguridad. Aplica estas dos reglas siempre:</p>
<ol>
<li><p><strong>Protege tu billetera (FinOps):</strong> Las métricas básicas de CloudWatch son gratis, pero guardar terabytes de logs indefinidamente es un error carísimo. Configura siempre una <strong>"Lifecycle Policy"</strong> (Política de Retención) para que los logs se borren automáticamente o se muevan a almacenamiento frío (Glacier) después de 30 o 90 días.</p>
</li>
<li><p><strong>Protege tu evidencia (SecOps):</strong> Los logs suelen contener información extremadamente delicada. Es obligatorio cifrar los Log Groups usando <strong>AWS KMS</strong>. A su vez, debes aplicar políticas de IAM hiper-estrictas para asegurar que ningún atacante (o empleado malicioso) pueda borrar un Log Group para ocultar su rastro después de cometer un ataque.</p>
</li>
</ol>
<h2>Conclusión</h2>
<p>Tener una recolección de logs estructurada, encriptada y auditable es el "Día Cero" de cualquier entorno seguro en la nube. Con los logs en su lugar y las alarmas configuradas, estamos listos para el paso definitivo de esta serie.</p>
<p>En la <strong>Parte 3</strong>, dejaremos de solo "observar" los problemas y pasaremos a la <strong>Remediación</strong>: cómo construir arquitecturas basadas en eventos que revoquen accesos inseguros y reparen servidores caídos en milisegundos, totalmente sin intervención humana.</p>
]]></content:encoded></item><item><title><![CDATA[Dominando AWS: Observabilidad Moderna y el Fin del Monitoreo Ciego (Parte 1)]]></title><description><![CDATA[Bienvenidos a la primera parte de esta serie sobre Ingeniería de Plataforma y CloudOps en AWS. Hoy vamos a romper un mito fundamental: monitorear tu…]]></description><link>https://josclsec.hashnode.dev/dominando-aws-observabilidad-moderna-y-el-fin-del-monitoreo-ciego-parte-1</link><guid isPermaLink="true">https://josclsec.hashnode.dev/dominando-aws-observabilidad-moderna-y-el-fin-del-monitoreo-ciego-parte-1</guid><category><![CDATA[The CloudOps Community]]></category><category><![CDATA[Security]]></category><category><![CDATA[observability]]></category><category><![CDATA[#CloudWatch]]></category><dc:creator><![CDATA[Luis Josue Rivera Rios]]></dc:creator><pubDate>Mon, 30 Mar 2026 03:50:56 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/69a8d92c3b896f7ad68faa7e/6c6e066e-b165-4e83-99d6-127fc4630a9a.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Bienvenidos a la primera parte de esta serie sobre <strong>Ingeniería de Plataforma y CloudOps en AWS</strong>. Hoy vamos a romper un mito fundamental: monitorear tu infraestructura no es suficiente. <strong>Necesitamos Observabilidad.</strong></p>
<p>En la trinchera operativa, el <strong>Monitoreo (el "Qué")</strong> te dice simplemente que un servidor está al 100% de CPU y la base de datos está lenta. Te avisa de la ruptura.</p>
<p>La <strong>Observabilidad (el "Por qué" y el "Impacto")</strong> va mucho más allá: te dice que el CPU está al 100% porque una consulta mal optimizada en el microservicio de inventario está trabando la base de datos, causando que el 15% de los clientes abandonen el carrito de compras. Te da el contexto para arreglar el problema de raíz.</p>
<p>El objetivo final de todo lo que veremos hoy no es armar dashboards bonitos, sino aplastar dos métricas clave:</p>
<ul>
<li><p><strong>MTTD (Mean Time To Detect):</strong> Enterarte de la falla mediante alarmas antes de que el cliente llame a quejarse.</p>
</li>
<li><p><strong>MTTR (Mean Time To Resolve):</strong> Levantar el servicio en 5 minutos en lugar de 2 horas porque ya sabes exactamente dónde está el error.</p>
</li>
</ul>
<hr />
<h2>🏆 Las 3 Reglas de Oro antes de encender una Alarma</h2>
<p>Antes de hablar de herramientas, debes establecer estas bases operativas:</p>
<ol>
<li><p><strong>Define "Personas" y evita el ruido:</strong> No monitorees "los fierros" por monitorear. Si envías una alerta de "CPU al 90%" a toda la empresa, nadie la leerá. Construye alertas a medida: intentos fallidos de login para el equipo de Seguridad, o bloqueos en la base de datos para los DBAs.</p>
</li>
<li><p><strong>Tu SLO es tu margen de vida:</strong> El SLO (<em>Service Level Objective</em>) es tu objetivo interno. Si tu contrato legal (SLA) permite 40 minutos de caída al mes (99.9%), tu SLO interno debe ser más estricto (ej. 99.95%). El SLO es la línea roja que dispara tus alarmas para arreglar el problema antes de incumplir el contrato.</p>
</li>
<li><p><strong>"No hiervas el océano" (Start Small):</strong> No intentes instalar agentes y trazabilidad compleja en todos los servidores el primer día, o el proyecto fracasará por ser carísimo. Elige un solo flujo crítico (ej. el proceso de login), instruméntalo a la perfección, y luego replica el modelo.</p>
</li>
</ol>
<hr />
<h2>🛠️ La Caja de Herramientas de AWS: Cuándo usar qué (Y cómo asegurarlo)</h2>
<p>No puedes proteger ni arreglar lo que no puedes ver. Aquí te explico cómo usar y asegurar la tríada de observabilidad de AWS.</p>
<h3>🛰️ Amazon CloudWatch: El Sistema Nervioso Central</h3>
<p>Es tu línea base obligatoria; si no lo tienes, operas a ciegas. Recibe métricas, centraliza logs de texto plano y actúa como ejecutor de alarmas.</p>
<ul>
<li><p><strong>💡 El secreto técnico:</strong> Usa <em>"Wide event structured logs"</em> (Logs Estructurados). Configura tus apps para emitir logs en JSON. CloudWatch leerá los campos automáticamente y los convertirá en métricas sin programación extra.</p>
</li>
<li><p><strong>🔐 Tip de Seguridad y Costos:</strong> Guardar terabytes de logs para siempre es un error carísimo. Configura una <em>"Lifecycle Policy"</em> para borrarlos o moverlos a Glacier a los 30 o 90 días. A nivel de seguridad, los logs tienen información delicada: cifra los Log Groups con <strong>AWS KMS</strong> y aplica políticas IAM estrictas para que ningún atacante pueda borrar un Log Group y ocultar su rastro.</p>
</li>
</ul>
<h3>🗺️ AWS X-Ray: El Mapa de Trazabilidad</h3>
<p>Úsalo solo en arquitecturas complejas (Microservicios, Lambdas). Dibuja el mapa visual del viaje de una petición para encontrar cuellos de botella exactos cuando CloudWatch se ve "verde" (CPU normal) pero el sistema está lento.</p>
<ul>
<li><strong>🔐 Tip de Seguridad y Costos:</strong> X-Ray cobra por traza. Configura el <em>Sampling</em> (muestreo) al 5% para tener estadística suficiente sin quebrar a la empresa. En seguridad, ten un cuidado extremo con la fuga de datos (<em>Data Leak</em>): configura filtros en el código para enmascarar contraseñas, tokens de sesión o datos personales antes de que se envíen a X-Ray.</li>
</ul>
<h3>🤖 CloudWatch Synthetics (Canaries): Monitoreo Preventivo</h3>
<p>Son bots (scripts en Node.js o Python) que abren tu página y simulan clics humanos en flujos críticos (ej. proceso de pago). Fallarán y te avisarán si la página se rompe a las 4 AM, antes de que haya clientes reales afectados.</p>
<ul>
<li><strong>🔐 Tip de Seguridad:</strong> El bot de Synthetics a menudo necesita un usuario y contraseña para probar el "Login". Jamás pongas credenciales en texto plano en el script. Es obligatorio integrar el Canary con <strong>AWS Secrets Manager</strong> para extraer la contraseña encriptada de forma segura.</li>
</ul>
<h3>👤 CloudWatch RUM (Real User Monitoring): Monitoreo Reactivo</h3>
<p>Inserta un pequeño código JavaScript en el frontend para rastrear el rendimiento en los navegadores de las personas reales. Te dice si tu app falla solo en dispositivos móviles con Safari, por ejemplo.</p>
<ul>
<li><strong>🔐 Tip de Seguridad:</strong> Al recopilar datos directamente del navegador del cliente, te enfrentas a riesgos de cumplimiento de privacidad. Asegúrate de configurar el agente RUM para anonimizar las direcciones IP y excluir páginas sensibles (como pasarelas de pago) para no capturar Información de Identificación Personal (PII) por accidente.</li>
</ul>
<hr />
<h2>🚀 Nivel Avanzado: Machine Learning contra la Fatiga de Alertas</h2>
<p>El día a día operativo suele estancarse en apagar incendios tontos gracias a alarmas estáticas. AWS soluciona esto con <strong>CloudWatch Anomaly Detection</strong>.</p>
<p>En lugar de crear una alarma tonta que grite <em>"Avisa si el disco baja de 2GB"</em>, activas el modelo de Machine Learning. La IA dibuja una "banda de comportamiento normal" basada en el historial.</p>
<blockquote>
<p><strong>Ejemplo práctico:</strong> Si un servidor de producción consume 45GB de disco temporalmente todos los días a las 5 PM y luego se limpia solo, la IA aprende este patrón cíclico y guarda silencio para no generar "fatiga de alertas". Pero si el disco se llena a las 10:00 AM (fuera de su patrón habitual), la alerta se dispara de inmediato horas antes de que se convierta en una caída total.</p>
</blockquote>
<p><em>Se cobra por métrica ($0.33/mes), así que úsalo estrictamente para KPIs críticos de negocio.</em></p>
<hr />
<h2>💡 Conclusión</h2>
<p>Pasar del monitoreo básico a una verdadera observabilidad requiere estrategia, seguridad por diseño y entender que no todas las métricas importan por igual.</p>
]]></content:encoded></item><item><title><![CDATA[AWS Verified Access vs. EICE vs. Client VPN: Cuándo usar cada uno y recomendaciones de uso]]></title><description><![CDATA[Contexto del problema Históricamente, dar acceso a aplicaciones web corporativas internas (intranets, portales de RRHH, tableros de Grafana) requería…]]></description><link>https://josclsec.hashnode.dev/aws-verified-access-vs-eice-vs-client-vpn-cu-ndo-usar-cada-uno-y-recomendaciones-de-uso</link><guid isPermaLink="true">https://josclsec.hashnode.dev/aws-verified-access-vs-eice-vs-client-vpn-cu-ndo-usar-cada-uno-y-recomendaciones-de-uso</guid><category><![CDATA[cloud architecture]]></category><category><![CDATA[AWS]]></category><category><![CDATA[Security]]></category><category><![CDATA[Devops]]></category><dc:creator><![CDATA[Luis Josue Rivera Rios]]></dc:creator><pubDate>Sun, 22 Mar 2026 17:13:58 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/69a8d92c3b896f7ad68faa7e/a304fa8f-f78b-4933-8807-29486f65313e.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3>AWS Verified Access (AVA) y la evolución del Zero Trust nativo</h3>
<p><strong>Contexto del problema</strong> Históricamente, dar acceso a aplicaciones web corporativas internas (intranets, portales de RRHH, tableros de Grafana) requería conectar a los usuarios a una VPN tradicional (Capa 4). Este enfoque es inseguro: una vez que el usuario pasa el perímetro, tiene visibilidad de red hacia recursos que no necesita. El modelo <em>Zero Trust</em> elimina la confianza basada en la "ubicación de la red" y exige una verificación continua.</p>
<p><strong>Arquitectura usada: AWS Verified Access (Capa 7)</strong> Se implementó <strong>AWS Verified Access (AVA)</strong> para proveer acceso corporativo seguro sin necesidad de un cliente VPN instalado en las laptops.</p>
<ul>
<li><p>AVA evalúa cada solicitud HTTP/HTTPS individualmente.</p>
</li>
<li><p>Combina la <strong>Identidad del usuario</strong> (Integrado con IdPs como AWS IAM Identity Center, Okta o Entra ID) con la <strong>Postura del dispositivo</strong> (Integrado con CrowdStrike o Jamf para saber si el antivirus está activo o el SO actualizado).</p>
</li>
<li><p>Si el usuario es válido pero se conecta desde una laptop personal no gestionada, AVA bloquea la conexión a nivel del balanceador antes de que toque la VPC.</p>
</li>
</ul>
<p><strong>AWS AVA vs. El Mercado (Cloudflare Access, Zscaler, Tailscale)</strong> En el ecosistema Zero Trust Network Access (ZTNA), AVA compite directamente con gigantes, pero la decisión de arquitectura depende del entorno:</p>
<ol>
<li><p><strong>¿Cuándo usar AWS Verified Access? (El enfoque nativo)</strong></p>
<ul>
<li><p><strong>El ecosistema cerrado:</strong> Si el 100% de tu carga de trabajo ya vive en AWS y usas Application Load Balancers (ALB) y AWS WAF. AVA se integra nativamente sin tener que instalar "conectores" o agentes de terceros en tus subredes.</p>
</li>
<li><p><strong>Facturación unificada:</strong> El tráfico y la gestión se mantienen dentro de la consola y la factura de AWS, ideal para empresas con políticas estrictas de <em>compliance</em> que no quieren desviar tráfico hacia redes de terceros.</p>
</li>
</ul>
</li>
<li><p><strong>¿Cuándo usar Zscaler o Cloudflare Access? (El enfoque agnóstico)</strong></p>
<ul>
<li><strong>Multicloud y On-Premise:</strong> Si tu empresa tiene servidores físicos en su propia oficina, bases de datos en Azure y frontends en AWS. Las soluciones de terceros son agnósticas y unifican el acceso global mucho mejor que AVA, que está estrictamente limitado a los límites de tu VPC en AWS.</li>
</ul>
</li>
<li><p><strong>¿Cuándo usar Tailscale/ZeroTier? (El enfoque de startups)</strong></p>
<ul>
<li>Para equipos pequeños que necesitan interconectar laptops y servidores de forma rápida usando mallas (mesh) de WireGuard. AVA es una solución empresarial pesada y costosa (cobra por gigabyte procesado y por hora de aplicación), mientras que Tailscale suele ser más amigable y económico para <em>startups</em>.</li>
</ul>
</li>
</ol>
<p><strong>Soluciones y Limitaciones Técnicas</strong></p>
<ul>
<li><p><strong>Limitación:</strong> AVA solo funciona para tráfico web (HTTP/HTTPS). No sirve para tunelizar tráfico de bases de datos (puerto 5432) o administrar servidores por SSH/RDP.</p>
</li>
<li><p><strong>Solución Arquitectónica:</strong> Se debe segmentar el diseño. AVA se usa estrictamente para publicar aplicaciones web internas a usuarios finales de negocio. Para accesos administrativos de infraestructura (CloudOps/DevOps), se delega el tráfico a AWS Systems Manager (SSM) o EC2 Instance Connect Endpoint (EICE).</p>
</li>
</ul>
<hr />
<h3>EICE vs. SSM (FinOps y Seguridad para administrar EC2 sin Bastion Hosts)</h3>
<p><strong>Contexto del problema</strong> La gestión de instancias privadas EC2 mediante <em>Bastion Hosts</em> públicos genera una superficie de ataque crítica y costos fijos por cómputo inactivo. Las llaves SSH estáticas (<code>.pem</code>) son un riesgo de fuga de credenciales.</p>
<p><strong>Arquitectura usada y Comparativa</strong> Se reemplazaron los Bastion Hosts evaluando dos arquitecturas nativas: y .</p>
<ol>
<li><p><strong>EC2 Instance Connect Endpoint (EICE):</strong> Proxy de red a nivel de VPC. Funciona inyectando llaves efímeras (60 segundos) validadas por IAM. Costo $0.00.</p>
</li>
<li><p><strong>AWS Systems Manager (SSM) Session Manager:</strong> Conexión sin puertos de entrada, basada en un agente local. Permite auditoría de comandos en CloudWatch.</p>
</li>
</ol>
<p><strong>Limitaciones y Soluciones (El factor FinOps y SecOps)</strong></p>
<ul>
<li><p><strong>Limitación de EICE:</strong> Es ciego. No audita qué comandos ejecuta el usuario, solo abre un túnel TCP.</p>
</li>
<li><p><strong>Limitación de SSM (Costos):</strong> Para que sea 100% privado, requiere VPC Endpoints ($22/mes) o salida a internet vía NAT Gateway.</p>
</li>
<li><p><strong>Seguridad de Salida (El Hack):</strong> Si una EC2 se compromete, un atacante podría usar la salida a internet del NAT para un <em>Reverse Shell</em>. En lugar de pagar un costoso AWS Network Firewall (\(280/mes) para filtrar dominios, se implementó <strong>Amazon Route 53 DNS Firewall</strong> (\)2/mes) usando listas de bloqueo administradas por AWS (C2 y Malware) para cortar las llamadas a nivel de resolución DNS.</p>
</li>
</ul>
<p><strong>¿Cuándo usar cada caso?</strong></p>
<ul>
<li><p><strong>Estándar corporativo:</strong> <strong>SSM</strong> para el 90% del trabajo diario (por la auditoría) y usando <em>Port Forwarding</em> para tunelizar bases de datos sin abrir puertos en el Security Group.</p>
</li>
<li><p><strong>Plan de Contingencia (Break-Glass):</strong> <strong>EICE</strong> como puerta trasera gratuita si el agente de SSM falla, el disco se llena o se requiere usar herramientas <em>legacy</em> de SSH puro.</p>
</li>
</ul>
<hr />
<h3>AWS Client VPN y la trampa de la granularidad de puertos</h3>
<p><strong>Contexto del problema</strong> Se requiere dar acceso de red local a usuarios remotos mediante autenticación robusta sin contraseñas, asegurando que cada rol solo acceda a los servidores que le corresponden.</p>
<p><strong>Arquitectura usada</strong> Despliegue de <strong>AWS Client VPN</strong> usando Autenticación Mutua (mTLS).</p>
<ul>
<li><p>Generación de Autoridad de Certificación (CA) local con <code>easy-rsa</code>.</p>
</li>
<li><p>Importación de la CA y el certificado del servidor en <strong>AWS Certificate Manager (ACM)</strong>.</p>
</li>
</ul>
<p><strong>Limitaciones y Soluciones (Troubleshooting de Red e Identidad)</strong></p>
<ul>
<li><p><strong>Error de Despliegue (</strong><code>Cidr block must be at least /27</code><strong>):</strong> AWS requiere inyectar ENIs en la subred de destino. <em>Solución:</em> Crear una subred dedicada exclusivamente para el Endpoint VPN con un bloque <code>/24</code> y deshabilitar IPv6 ("Doble pila") para evitar conflictos de enrutamiento.</p>
</li>
<li><p><strong>Validación mTLS:</strong> No es necesario subir los certificados de los clientes a ACM. La VPN confía implícitamente en cualquier cliente que presente un certificado firmado por la CA raíz configurada. El archivo <code>.ovpn</code> se debe compilar inyectando manualmente los bloques <code>&lt;cert&gt;</code> y <code>&lt;key&gt;</code>.</p>
</li>
<li><p><strong>La Limitación Crítica de Capa 4:</strong> Client VPN asigna IPs desde un mismo "Pool". Si el Usuario A necesita el puerto 5432 y el Usuario B el puerto 389 en el <em>mismo</em> servidor, los Security Groups de la EC2 no pueden diferenciarlos porque llegan desde la misma red.</p>
</li>
<li><p><strong>Solución Arquitectónica:</strong> Client VPN y los SGs no tienen inspección de Capa 7. Para lograr granularidad <em>Usuario-Puerto</em>, se debe abandonar el filtrado de red tradicional e implementar <strong>SSM Port Forwarding controlado por políticas granulares de IAM</strong>, o desplegar un NGFW virtual (ej. FortiGate) en la VPC que entienda la identidad del usuario y aplique políticas de puerto de manera centralizada.</p>
</li>
</ul>
<p><strong>¿Cuándo usar este caso?</strong> Client VPN es útil para equipos enteros que necesitan acceso a rangos de subredes completos (ej. todo el equipo de desarrollo accediendo a la red <code>10.0.5.0/24</code>). Si el requerimiento es control estricto de puertos por individuo hacia servidores críticos, la mejor práctica es transicionar a identidades Zero Trust (SSM o IdP) en lugar de depender de la red VPN.</p>
]]></content:encoded></item><item><title><![CDATA[En las trincheras con AWS Verified Access: Resolviendo errores de DNS, Cognito y Cedar (Parte 2)]]></title><description><![CDATA[En la primera parte de esta serie, exploramos la arquitectura teórica de AWS Verified Access (AVA) y cómo reemplaza a las VPNs tradicionales al implementar…]]></description><link>https://josclsec.hashnode.dev/en-las-trincheras-con-aws-verified-access-resolviendo-errores-de-dns-cognito-y-cedar-parte-2</link><guid isPermaLink="true">https://josclsec.hashnode.dev/en-las-trincheras-con-aws-verified-access-resolviendo-errores-de-dns-cognito-y-cedar-parte-2</guid><category><![CDATA[AWS]]></category><category><![CDATA[Security]]></category><dc:creator><![CDATA[Luis Josue Rivera Rios]]></dc:creator><pubDate>Thu, 05 Mar 2026 02:07:56 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/69a8d92c3b896f7ad68faa7e/7ddf48a0-b417-47b2-90a5-344e5e029d41.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>En la primera parte de esta serie, exploramos la arquitectura teórica de <strong>AWS Verified Access (AVA)</strong> y cómo reemplaza a las VPNs tradicionales al implementar un modelo Zero Trust Network Access (ZTNA).</p>
<p>Sin embargo, como cualquier especialista en CloudOps sabe: la teoría es perfecta en los diagramas, pero en la línea de comandos de producción siempre hay sorpresas. Desplegar una arquitectura de identidad federada y enrutamiento privado requiere precisión milimétrica.</p>
<p>A continuación, desgloso cuatro retos técnicos reales que surgen al configurar esta arquitectura y cómo solucionarlos a nivel de ingeniería.</p>
<h2>🛠️ Reto 1: La Criptografía y el Bloqueo DNS (Registros CAA)</h2>
<p><strong>El Síntoma:</strong> Al intentar generar un certificado comodín (<code>*.midominio.com</code>) en <strong>AWS Certificate Manager (ACM)</strong>, el estado se queda en validación pendiente o falla, a pesar de haber configurado correctamente el registro CNAME de validación en nuestro proveedor DNS.</p>
<p><strong>El Diagnóstico:</strong> En entornos de alta seguridad, los dominios suelen tener configurados registros <strong>CAA (Certificate Authority Authorization)</strong>. Si tu dominio solo autoriza a autoridades como Let's Encrypt o Comodo para emitir certificados, AWS será bloqueado automáticamente por los servidores raíz al intentar emitir el suyo.</p>
<p><strong>La Solución:</strong> Debes agregar explícitamente un registro CAA en tu panel de administración DNS para darle luz verde a la autoridad certificadora de Amazon:</p>
<ul>
<li><p><strong>Tipo:</strong> <code>CAA</code></p>
</li>
<li><p><strong>Nombre:</strong> <code>@</code> (o el subdominio específico)</p>
</li>
<li><p><strong>Contenido/Valor:</strong> <code>0 issuewild "amazon.com"</code></p>
</li>
</ul>
<p>Una vez propagado, ACM emitirá el certificado en minutos.</p>
<h2>🔄 Reto 2: El error "Redirect Mismatch" en Amazon Cognito</h2>
<p><strong>El Síntoma:</strong> El DNS resuelve correctamente y el Endpoint de AVA intercepta la petición HTTP. Sin embargo, al ser redirigido a la pantalla de login, Cognito muestra un cuadro gris con el mensaje: <code>An error was encountered with the requested page</code> y el parámetro <code>error=redirect_mismatch</code> en la URL.</p>
<p><strong>El Diagnóstico:</strong> Este es un mecanismo de seguridad estricto del protocolo OIDC (OpenID Connect) para prevenir ataques de <em>Open Redirect</em>. Cuando AVA envía al usuario a Cognito, le indica una ruta de retorno exacta para que Cognito entregue el token JWT. AVA utiliza internamente una ruta específica (<code>/oauth2/idpresponse</code>). Si en Cognito solo autorizamos la raíz del dominio, la transacción se bloquea.</p>
<p><strong>La Solución:</strong></p>
<ol>
<li><p>Navega al <em>User Pool</em> en Amazon Cognito y selecciona tu <em>App Client</em>.</p>
</li>
<li><p>En la sección de <em>Hosted UI</em>, edita las <strong>Allowed callback URLs</strong> (URLs de devolución de llamadas permitidas).</p>
</li>
<li><p>Agrega la ruta exacta que exige AVA. Si tu aplicación es <code>https://hr.midominio.com</code>, el valor debe ser: <code>https://hr.midominio.com/oauth2/idpresponse</code></p>
</li>
</ol>
<h2>🧠 Reto 3: La rigurosidad de Cedar y el falso "403 Forbidden"</h2>
<p><strong>El Síntoma:</strong> El usuario ingresa sus credenciales válidas en Cognito con éxito, pero inmediatamente recibe un error <strong>HTTP 403 Forbidden</strong> generado por Verified Access. La petición nunca toca el balanceador de carga interno.</p>
<p><strong>El Diagnóstico:</strong> El motor de AVA utiliza <strong>Cedar</strong>, el lenguaje de políticas de AWS. Cedar es implacable con los espacios de nombres (<em>namespaces</em>) y el tipado de datos (<em>data typing</em>).</p>
<p>Un error de configuración típico se ve así:</p>
<p>Fragmento de código</p>
<pre><code class="language-plaintext">// ❌ POLÍTICA INCORRECTA
permit(principal, action, resource)
when {
    context.cognito.email_verified == "true"
};
</code></pre>
<p>Esto falla por dos razones:</p>
<ol>
<li><p><strong>Sensibilidad a mayúsculas:</strong> Si el "Trust Provider" en AVA fue nombrado con la referencia <code>Cognito</code> (mayúscula), Cedar no reconocerá el objeto <code>context.cognito</code>.</p>
</li>
<li><p><strong>Evaluación de Tipos:</strong> El atributo <code>email_verified</code> que emite Cognito en el token OIDC es un <strong>booleano real</strong>, no una cadena de texto. Evaluarlo contra <code>"true"</code> (entre comillas) resulta en una falsedad lógica.</p>
</li>
</ol>
<p><strong>La Solución:</strong> Afinar la política para respetar la estructura de datos exacta del proveedor:</p>
<p>Fragmento de código</p>
<pre><code class="language-plaintext">// ✅ POLÍTICA CORRECTA
permit(principal, action, resource)
when {
    context.Cognito.email_verified == true
};
</code></pre>
<h2>🏆 Reto 4: El "Error" 404 del Favicon (Un triunfo oculto)</h2>
<p><strong>El Síntoma:</strong> Lograste pasar el login. En la consola de desarrollo del navegador (F12) observas un error <code>404 Not Found</code> al intentar cargar el archivo <code>favicon.ico</code>.</p>
<p><strong>El Diagnóstico:</strong> Como especialistas CloudOps, sabemos que no todos los errores son fallas de arquitectura. El <code>favicon</code> es el pequeño ícono de la pestaña del navegador. Por defecto, Chrome o Edge siempre lo buscan al cargar una web. Si tu instancia EC2 o contenedor interno (ej. un servidor Nginx recién instalado) no tiene ese archivo de imagen configurado, devolverá un 404.</p>
<p><strong>¿Por qué es una victoria?</strong> Ver ese 404 proveniente de tu servidor interno significa que:</p>
<ol>
<li><p>Tu DNS resolvió la ruta.</p>
</li>
<li><p>Verified Access evaluó y aprobó tu sesión OIDC.</p>
</li>
<li><p>La política Cedar te validó.</p>
</li>
<li><p>El tráfico cruzó el túnel seguro hacia tu VPC y el Application Load Balancer (ALB) lo enrutó perfectamente a tu EC2 privada.</p>
</li>
</ol>
<p>El túnel Zero Trust funciona al 100%.</p>
<h3>Conclusión</h3>
<p>Implementar Zero Trust Network Access nativo en la nube elimina la superficie de ataque pública y la sobrecarga operativa de las VPNs. Conocer la teoría te permite diseñar la arquitectura, pero saber diagnosticar el enrutamiento OIDC, las políticas Cedar y los registros DNS es lo que garantiza la resiliencia en producción.</p>
<p><em>Si te enfrentas a despliegues de infraestructura o tienes dudas sobre seguridad nativa en AWS, ¡conecta conmigo en LinkedIn y sigamos la conversación técnica!</em></p>
]]></content:encoded></item><item><title><![CDATA[Arquitectura Zero Trust: El flujo completo de AWS Verified Access y cuándo usarlo (Parte 1)]]></title><description><![CDATA[El acceso remoto tradicional basado en VPNs tiene un problema arquitectónico fundamental: una vez que el usuario cruza la puerta perimetral, obtiene acceso…]]></description><link>https://josclsec.hashnode.dev/arquitectura-zero-trust-el-flujo-completo-de-aws-verified-access-y-cu-ndo-usarlo-parte-1</link><guid isPermaLink="true">https://josclsec.hashnode.dev/arquitectura-zero-trust-el-flujo-completo-de-aws-verified-access-y-cu-ndo-usarlo-parte-1</guid><category><![CDATA[AWS]]></category><category><![CDATA[Devops]]></category><category><![CDATA[cybersecurity]]></category><category><![CDATA[ztna]]></category><dc:creator><![CDATA[Luis Josue Rivera Rios]]></dc:creator><pubDate>Thu, 05 Mar 2026 02:04:46 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/69a8d92c3b896f7ad68faa7e/532a08b1-c2f0-4f2d-ac40-5fcedfd4beab.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>El acceso remoto tradicional basado en VPNs tiene un problema arquitectónico fundamental: una vez que el usuario cruza la puerta perimetral, obtiene acceso lateral a toda la red. En la era moderna de la ciberseguridad corporativa, la confianza ya no se basa en <em>dónde</em> estás conectado, sino en <em>quién</em> eres, <em>qué</em> dispositivo usas y <em>cuál</em> es tu contexto.</p>
<p>Bienvenidos al paradigma <strong>Zero Trust Network Access (ZTNA)</strong>.</p>
<p>En este análisis, desglosaré cómo diseñar una arquitectura Zero Trust 100% nativa en la nube utilizando <strong>AWS Verified Access (AVA)</strong> y <strong>Amazon Cognito</strong>, eliminando por completo la necesidad de clientes VPN.</p>
<h2>🔄 El Flujo Arquitectónico: El Viaje del Tráfico</h2>
<p>Para entender el poder de AVA, debemos seguir la ruta de un paquete de red desde el navegador del usuario hasta nuestra aplicación interna (por ejemplo, un portal en <code>hr.vectorclave.com</code>):</p>
<ol>
<li><p><strong>Intercepción DNS:</strong> El usuario teclea la URL. El DNS no apunta a un servidor público, sino a un <em>Endpoint</em> global de AWS Verified Access.</p>
</li>
<li><p><strong>Desafío de Identidad (IdP):</strong> El Endpoint detecta que el usuario no tiene una sesión válida y lo redirige automáticamente a nuestro Proveedor de Identidad (en este caso, Amazon Cognito) mediante el protocolo <strong>OIDC (OpenID Connect)</strong>.</p>
</li>
<li><p><strong>Autenticación:</strong> El usuario ingresa sus credenciales (y opcionalmente, aprueba un desafío MFA). Cognito le devuelve a AVA un token JWT firmado.</p>
</li>
<li><p><strong>Motor de Autorización (Zero Trust):</strong> AVA extrae los <em>claims</em> del token y los evalúa contra las políticas escritas en lenguaje <strong>Cedar</strong>. ¿El correo está verificado? ¿Pertenece al departamento correcto?</p>
</li>
<li><p><strong>Acceso a la VPC:</strong> Solo si la política se evalúa como <code>true</code>, AVA desencripta el tráfico HTTPS y lo inyecta directamente en la red privada (VPC), entregándolo a un <em>Application Load Balancer (ALB)</em> interno. La aplicación nunca fue expuesta a internet.</p>
</li>
</ol>
<h2>🏗️ Los 4 Componentes Core de AWS Verified Access</h2>
<p>La infraestructura de AVA opera como una "Aduana Central" y se compone de cuatro piezas jerárquicas:</p>
<ol>
<li><p><strong>Instancia de Acceso Verificado:</strong> El contenedor lógico global. Es el motor que unifica la infraestructura.</p>
</li>
<li><p><strong>Proveedor de Confianza (Trust Provider):</strong> El puente hacia tu contexto de seguridad. AVA no se limita a un solo proveedor; puedes combinar múltiples fuentes para lograr un Zero Trust absoluto:</p>
<ul>
<li><p><strong>Identidad (User Trust):</strong> Mediante OIDC, conectas directorios como <strong>Amazon Cognito</strong> (ideal para B2C) o <strong>Azure AD / Okta</strong> (el estándar corporativo B2B).</p>
</li>
<li><p><strong>Estado del Equipo (Device Trust):</strong> Aquí es donde la arquitectura se vuelve robusta. Puedes integrar herramientas de seguridad de endpoints (EDR/XDR) de terceros como <strong>CrowdStrike, Palo Alto Cortex o Jamf</strong>. De esta manera, AVA recibe telemetría en tiempo real sobre la computadora que intenta acceder.</p>
</li>
</ul>
</li>
<li><p><strong>Grupo de Acceso Verificado:</strong> La agrupación lógica de aplicaciones que comparten el mismo perfil de riesgo, donde viven las políticas de autorización (Cedar).</p>
</li>
<li><p><strong>Motor de Autorización (La magia de Cedar):</strong> AVA extrae los <em>claims</em> de todos los proveedores configurados y los evalúa contra las políticas escritas en lenguaje <strong>Cedar</strong>. Aquí es donde cruzas la Identidad con el Estado del Dispositivo. La política evalúa: <em>¿El correo está verificado?</em> (Cognito) Y <em>¿El antivirus de la laptop está activo y el OS está parcheado?</em> (CrowdStrike/Cortex). Si el equipo está comprometido, el acceso se deniega automáticamente, incluso si la contraseña del usuario es correcta.</p>
</li>
</ol>
<h2>🛠️ Requisitos Previos para el Despliegue</h2>
<p>Si deseas replicar esta arquitectura en tu entorno de AWS, necesitas preparar los siguientes recursos base:</p>
<ul>
<li><p>Un dominio público administrado (ej. a través de Route 53 o un proveedor externo).</p>
</li>
<li><p>Un certificado SSL/TLS emitido y validado en <strong>AWS Certificate Manager (ACM)</strong>.</p>
</li>
<li><p>Un directorio de identidades activo (User Pool en Cognito).</p>
</li>
<li><p>Una aplicación interna detrás de un Load Balancer (ALB) sin IPs públicas.</p>
</li>
</ul>
<h2>⚖️ Casos de Uso: AVA vs. Soluciones de Terceros</h2>
<p>Como especialistas CloudOps, sabemos que no existe una herramienta absoluta; la arquitectura depende del entorno. ¿Dónde encaja AWS AVA frente a los gigantes del mercado?</p>
<ul>
<li><p><strong>AWS Verified Access:</strong> Imbatible si tus cargas de trabajo son 100% nativas en AWS. Ofrece cero mantenimiento de agentes de terminal, latencia mínima al operar dentro del backbone de Amazon, y se integra nativamente con AWS WAF.</p>
</li>
<li><p><strong>Fortinet (FortiSASE / ZTNA):</strong> El estándar de oro para arquitecturas híbridas. Si la empresa tiene un ecosistema robusto de firewalls físicos On-Premise y necesita inspección profunda del estado del portátil (<em>Device Posture</em>), Fortinet centraliza el control.</p>
</li>
<li><p><strong>Cloudflare Access:</strong> Superior para arquitecturas Multi-Cloud (AWS + Google Cloud + Azure). Al interceptar el tráfico en el borde global (Edge), mitiga ataques DDoS masivos antes de que los paquetes siquiera se acerquen a tu infraestructura.</p>
</li>
</ul>
<blockquote>
<p>🔒 <strong>La Defensa en Profundidad (Defense in Depth):</strong> &gt; <em>La identidad validada no garantiza intenciones benignas.</em> AWS AVA asegura <strong>quién</strong> entra. Sin embargo, en un entorno de producción, debe acompañarse siempre de <strong>AWS WAF</strong> (Capa 7) para prevenir inyecciones de código (SQLi/XSS) por parte de usuarios autenticados, asegurando una seguridad holística.</p>
</blockquote>
<p><em>(En la Parte 2 de esta serie, bajaremos a las trincheras operativas: analizaremos los errores de DNS con registros CAA, el temido "Redirect Mismatch" de Cognito, y las trampas lógicas al programar políticas Cedar).</em></p>
]]></content:encoded></item><item><title><![CDATA[Zero Trust en AWS: Cómo reemplazar la VPN tradicional con Verified Access y Amazon Cognito]]></title><description><![CDATA[El acceso remoto tradicional basado en VPNs tiene un problema fundamental: una vez que el usuario cruza la puerta, tiene acceso a toda la red. En la era…]]></description><link>https://josclsec.hashnode.dev/zero-trust-en-aws-c-mo-reemplazar-la-vpn-tradicional-con-verified-access-y-amazon-cognito</link><guid isPermaLink="true">https://josclsec.hashnode.dev/zero-trust-en-aws-c-mo-reemplazar-la-vpn-tradicional-con-verified-access-y-amazon-cognito</guid><category><![CDATA[AWS]]></category><category><![CDATA[Cloud Computing]]></category><category><![CDATA[cybersecurity]]></category><category><![CDATA[zero-trust]]></category><category><![CDATA[Devops]]></category><dc:creator><![CDATA[Luis Josue Rivera Rios]]></dc:creator><pubDate>Thu, 05 Mar 2026 01:32:46 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/69a8d92c3b896f7ad68faa7e/4c9c6e3b-1efc-4397-a257-62181e708f3a.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>El acceso remoto tradicional basado en VPNs tiene un problema fundamental: una vez que el usuario cruza la puerta, tiene acceso a toda la red. En la era moderna de la ciberseguridad, la confianza ya no se basa en <em>dónde</em> estás conectado, sino en <em>quién</em> eres y <em>qué</em> contexto tienes. Esto es <strong>Zero Trust Network Access (ZTNA)</strong>.</p>
<p>En este análisis técnico, desglosaré paso a paso cómo construir una arquitectura Zero Trust 100% nativa en AWS usando <strong>AWS Verified Access (AVA)</strong>, <strong>Amazon Cognito</strong> y políticas <strong>Cedar</strong>, superando los trampas clásicas de DNS y enrutamiento en el camino.</p>
<hr />
<h2>1. Fundamentos: Dominios, DNS y el Reto Criptográfico</h2>
<p>Antes de tocar la nube, debemos dominar la puerta de entrada de internet: el DNS (Domain Name System). Si tu dominio principal es <code>ejemplo.com</code>, en una arquitectura empresarial no expones tu aplicación en la raíz, sino en un <strong>subdominio</strong> (ej. <code>hr.ejemplo.com</code> para Recursos Humanos o <code>cloud.ejemplo.com</code> para un entorno técnico).</p>
<p>Para que la comunicación sea segura (HTTPS), necesitamos un certificado SSL/TLS emitido por <strong>AWS Certificate Manager (ACM)</strong>. Aquí es donde ocurre el primer choque entre la infraestructura tradicional y la nube:</p>
<h3>Criptografía Asimétrica y Validación DNS</h3>
<p>Al solicitar un certificado, AWS genera un par de llaves:</p>
<ul>
<li><p><strong>Llave Privada:</strong> Se queda resguardada en AWS KMS. Sirve para desencriptar.</p>
</li>
<li><p><strong>Llave Pública:</strong> Se empaqueta en el certificado. Sirve para encriptar.</p>
</li>
</ul>
<p>Para emitir el certificado, AWS exige demostrar la propiedad del dominio mediante un <strong>reto CNAME</strong>. Debes inyectar un registro específico en tu proveedor de DNS. AWS consultará los servidores raíz globales; si el código está ahí, aprueba el certificado.</p>
<blockquote>
<p>⚠️ <strong>La Trampa del Registro CAA (Certificate Authority Authorization):</strong> Un error común en entornos de alta seguridad es tener registros CAA estrictos. Si tu DNS solo autoriza a Let's Encrypt o Comodo (mediante la etiqueta <code>issuewild</code>), AWS será bloqueado automáticamente al intentar emitir un certificado comodín (<code>*.ejemplo.com</code>). <strong>La solución:</strong> Debes agregar explícitamente el registro <code>0 issuewild "amazon.com"</code> en tu panel DNS para darle luz verde a AWS.</p>
</blockquote>
<hr />
<h2>2. Los 4 Pilares de AWS Verified Access (AVA)</h2>
<p>AVA actúa como una "Aduana Central" que intercepta el tráfico antes de que toque tu Virtual Private Cloud (VPC). No requiere agentes instalados en las laptops de los usuarios y se compone de cuatro piezas clave:</p>
<ol>
<li><p><strong>Instancia de acceso verificado (El Edificio):</strong> El contenedor global y motor de evaluación.</p>
</li>
<li><p><strong>Proveedor de confianza (La Agencia de Detectives):</strong> El puente hacia tu directorio de identidades. AVA se comunica mediante el estándar <strong>OIDC (OpenID Connect)</strong>.</p>
<ul>
<li><em>Casos de uso:</em> Para aplicaciones B2C con miles de usuarios, <strong>Amazon Cognito</strong> es ideal por su autoservicio (pàgina abierto al pùblico). Para entornos corporativos (B2B), se suele integrar con <strong>Azure AD (Entra ID)</strong> u <strong>Okta</strong>.(pàginas del estilo intranet)</li>
</ul>
</li>
<li><p><strong>Grupo de acceso verificado (El Reglamento):</strong> Donde viven las políticas de evaluación ZTNA escritas en lenguaje <strong>Cedar</strong>.</p>
</li>
<li><p><strong>Endpoint / Punto de conexión (La Puerta):</strong> La cara pública que recibe el tráfico HTTPS y lo enruta hacia tu red privada.</p>
</li>
</ol>
<hr />
<h2>3. El Motor de Decisiones: Políticas Cedar</h2>
<p>El corazón de Zero Trust es la evaluación constante. A diferencia de las reglas de Firewall basadas en IPs, Cedar evalúa atributos de identidad (ABAC).</p>
<p><strong>El Código de Oro:</strong></p>
<p>Fragmento de código</p>
<pre><code class="language-plaintext">permit(principal, action, resource)
when {
    context.Cognito.email_verified == true
};
</code></pre>
<p><strong>Lecciones de campo en Cedar:</strong></p>
<ul>
<li><p><strong>Sensibilidad a mayúsculas (Namespace):</strong> Si tu proveedor de confianza se llama <code>Cognito</code>, escribir <code>context.cognito...</code> provocará un error 403 (Forbidden) inmediato.</p>
</li>
<li><p><strong>Tipos de datos:</strong> Cognito envía el estado de verificación como un Booleano puro (<code>true</code>), no como un String (<code>"true"</code>). Un error de sintaxis aquí rompe todo el flujo de acceso.</p>
</li>
</ul>
<hr />
<h2>4. Enrutamiento y Resiliencia: ALB vs. EC2 Directo</h2>
<p>Una vez que AVA valida al usuario, debe enviar el tráfico a la aplicación. Aunque puedes apuntar el Endpoint directamente a la tarjeta de red (ENI) de una instancia EC2 privada, la mejor práctica es apuntarlo a un <strong>Application Load Balancer (ALB)</strong> interno.</p>
<ul>
<li><strong>¿Por qué un ALB?</strong> Agilidad y resiliencia. Si ocurre un pico de tráfico, el ALB respaldado por un <strong>Auto Scaling Group (ASG)</strong> puede desplegar <em>Golden AMIs</em> (imágenes pre-configuradas) en menos de 30 segundos, manteniendo la disponibilidad sin intervención manual.</li>
</ul>
<h3>El Error de "Redirect Mismatch"</h3>
<p>Al integrar AVA con Cognito, debes tener cuidado con las URLs de <em>Callback</em>. Cuando AVA pide a Cognito que autentique al usuario, le exige que lo devuelva a una ruta específica (<code>/oauth2/idpresponse</code>). Si en Cognito solo autorizaste la raíz del dominio (<code>https://hr.ejemplo.com</code>), el proveedor de identidad bloqueará el redireccionamiento por seguridad.</p>
<hr />
<h2>5. Validación de la Arquitectura y Defensa en Profundidad</h2>
<p>¿Cómo sabes que tu arquitectura Zero Trust realmente funciona? Cuando intentas acceder directamente al nombre DNS interno de tu Balanceador y la petición muere en el vacío. La única forma de entrar es a través del Endpoint de AVA.</p>
<p>Incluso un "error" puede ser sinónimo de éxito. Si tras loguearte recibes un error <code>404 Not Found</code> para el archivo <code>favicon.ico</code> en la consola de tu navegador, significa que:</p>
<ol>
<li><p>Tu DNS resolvió correctamente hacia la red global de AWS.</p>
</li>
<li><p>AVA validó tu sesión OIDC.</p>
</li>
<li><p>La política Cedar te dejó pasar.</p>
</li>
<li><p>El tráfico cruzó de forma segura hasta tu EC2 privada (la cual simplemente no tenía un ícono configurado).</p>
</li>
</ol>
<h3>AVA vs. Soluciones de Terceros</h3>
<p>¿Por qué elegir AWS Verified Access sobre otras soluciones líderes?</p>
<ul>
<li><p><strong>AWS AVA:</strong> Imbatible si tus cargas de trabajo son nativas en AWS. Cero agentes, latencia mínima y se integra con AWS WAF nativamente.</p>
</li>
<li><p><strong>Cloudflare ZTNA:</strong> Superior para arquitecturas Multi-Cloud, ya que intercepta en el borde global (Edge) mitigando ataques masivos antes de que lleguen a tu nube.</p>
</li>
<li><p><strong>Fortinet (FortiSASE):</strong> El estándar de oro para entornos híbridos (Data Center Físico + Nube) con inspección profunda del dispositivo (Device Trust).</p>
</li>
</ul>
<blockquote>
<p><strong>La Regla Final de Seguridad:</strong> "La identidad validada no garantiza intenciones benignas". AVA asegura <em>quién</em> entra. Pero siempre debe ir acompañado de <strong>AWS WAF</strong> (Capa 7) para evitar inyecciones de código de usuarios autorizados, y <strong>AWS Shield</strong> (Capa 3/4) para mitigar fuerza bruta volumétrica.</p>
</blockquote>
]]></content:encoded></item></channel></rss>