<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Bianca Torres</title>
    <description>The latest articles on DEV Community by Bianca Torres (@bnkintech).</description>
    <link>https://dev.to/bnkintech</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3687974%2Fcf1ddab4-58c9-4a84-9c56-8b4e59f28886.jpeg</url>
      <title>DEV Community: Bianca Torres</title>
      <link>https://dev.to/bnkintech</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bnkintech"/>
    <language>en</language>
    <item>
      <title>Nunca más hardcodees un token: Seguridad en GitHub para DevOps</title>
      <dc:creator>Bianca Torres</dc:creator>
      <pubDate>Wed, 10 Jun 2026 21:41:47 +0000</pubDate>
      <link>https://dev.to/aws-builders/nunca-mas-hardcodees-un-token-seguridad-en-github-para-devops-a44</link>
      <guid>https://dev.to/aws-builders/nunca-mas-hardcodees-un-token-seguridad-en-github-para-devops-a44</guid>
      <description>&lt;p&gt;El pasado sábado 6 de junio tuve la oportunidad de participar como speaker en el GitHub Community Day Perú 2026, donde compartí una charla sobre un tema que sigue siendo una de las causas más frecuentes de incidentes de seguridad: la exposición accidental de credenciales.&lt;/p&gt;

&lt;p&gt;Durante la sesión hablamos de herramientas gratuitas que muchos equipos ya tienen disponibles dentro de GitHub, pero que no siempre aprovechan al máximo. Usamos GitHub todos los días para gestionar código, colaborar con nuestros equipos y automatizar despliegues, pero en muchas ocasiones solo utilizamos una pequeña parte de todo lo que la plataforma nos ofrece.&lt;/p&gt;

&lt;p&gt;La buena noticia es que GitHub incorpora múltiples funcionalidades de seguridad que pueden ayudarnos a prevenir filtraciones de credenciales, proteger nuestros pipelines y mejorar nuestra postura de seguridad sin necesidad de adquirir herramientas adicionales.&lt;/p&gt;

&lt;p&gt;En este artículo recopilo los principales conceptos que vimos durante la charla, junto con una demostración práctica de cómo desplegar una aplicación en AWS sin almacenar una sola credencial permanente.&lt;/p&gt;




&lt;h2&gt;
  
  
  El problema
&lt;/h2&gt;

&lt;p&gt;Todos lo hemos hecho.&lt;/p&gt;

&lt;p&gt;Hardcodear un API key “solo por ahora”, pushear un .env por accidente o compartir un token por Slack para salir de un apuro.&lt;/p&gt;

&lt;p&gt;Son errores comunes, pero las consecuencias pueden ser graves: desde una factura inesperada en AWS hasta una filtración de información sensible.&lt;/p&gt;

&lt;p&gt;En 2025, De acuerdo al &lt;a href="https://www.gitguardian.com/state-of-secrets-sprawl-report-2026" rel="noopener noreferrer"&gt;reporte de GitGuardian&lt;/a&gt;, GitHub detectó más de 28 millones de secretos expuestos en repositorios públicos. Access Keys de AWS, tokens de GitHub, webhooks de Slack y muchas otras credenciales quedaron visibles para cualquiera que quisiera utilizarlas.&lt;/p&gt;

&lt;p&gt;El flujo típico suele verse así:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Un developer necesita desplegar una aplicación.&lt;/li&gt;
&lt;li&gt;Crea una Access Key y Secret Key.&lt;/li&gt;
&lt;li&gt;Las almacena en un archivo .env o directamente en el código.&lt;/li&gt;
&lt;li&gt;El archivo termina llegando al repositorio.&lt;/li&gt;
&lt;li&gt;Un bot detecta las credenciales y comienza a utilizarlas en cuestión de segundos.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;La solución no es simplemente “tener más cuidado”.&lt;br&gt;
La solución es construir mecanismos que hagan mucho más difícil que estos errores lleguen a producción.&lt;/p&gt;

&lt;p&gt;GitHub nos ofrece varias capas de protección que pueden ayudarnos precisamente con eso.&lt;/p&gt;


&lt;h2&gt;
  
  
  Las 5 capas de Seguridad en Github
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1. GitHub Secrets
&lt;/h3&gt;

&lt;p&gt;La primera línea de defensa es evitar almacenar información sensible dentro del código.&lt;/p&gt;

&lt;p&gt;GitHub Secrets permite guardar valores cifrados que pueden ser consumidos por GitHub Actions durante la ejecución de un workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Características:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Encriptados mediante libsodium.&lt;/li&gt;
&lt;li&gt;Ocultos automáticamente en los logs.&lt;/li&gt;
&lt;li&gt;No pueden visualizarse nuevamente después de guardarse.&lt;/li&gt;
&lt;li&gt;Disponibles a nivel de repositorio, environment u organización.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjk6t6obf4wm5n9906wy8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjk6t6obf4wm5n9906wy8.png" alt=" " width="800" height="559"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9uhlkg4vlh6exyuubogx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9uhlkg4vlh6exyuubogx.png" alt=" " width="800" height="395"&gt;&lt;/a&gt;&lt;br&gt;
Además, los Environments agregan controles adicionales como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Aprobaciones manuales para producción.&lt;/li&gt;
&lt;li&gt;Restricciones por branch.&lt;/li&gt;
&lt;li&gt;Wait timers.&lt;/li&gt;
&lt;li&gt;Protección de despliegues críticos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si todavía tienes credenciales hardcodeadas en tu código, este debería ser el primer cambio que realices.&lt;/p&gt;


&lt;h3&gt;
  
  
  2. OIDC con AWS (Zero Credentials)
&lt;/h3&gt;

&lt;p&gt;OIDC es un protocolo de autenticación que permite que dos servicios se reconozcan sin compartir credenciales.&lt;/p&gt;

&lt;p&gt;Tradicionalmente, muchos pipelines almacenan Access Keys de AWS dentro de GitHub Secrets.&lt;br&gt;
Aunque esto es mejor que hardcodearlas, seguimos dependiendo de credenciales permanentes que pueden ser filtradas o comprometidas.&lt;/p&gt;

&lt;p&gt;Con OpenID Connect (OIDC) podemos eliminar completamente ese problema.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Cómo funciona?&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;GitHub Actions inicia la ejecución del workflow.&lt;/li&gt;
&lt;li&gt;GitHub genera un token JWT temporal.&lt;/li&gt;
&lt;li&gt;AWS valida el token mediante un OIDC Provider.&lt;/li&gt;
&lt;li&gt;AWS verifica que el repositorio tenga permiso para asumir un rol específico.&lt;/li&gt;
&lt;li&gt;AWS entrega credenciales temporales.&lt;/li&gt;
&lt;li&gt;Las credenciales expiran automáticamente&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3rhwo70v35tzvwb61g2k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3rhwo70v35tzvwb61g2k.png" alt=" " width="800" height="836"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No hay keys. No hay tokens permanentes. Nada que pueda leakearse.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Paso 1 — Crear el OIDC Provider en IAM:&lt;/strong&gt;&lt;br&gt;
Provider URL: token.actions.githubusercontent.com&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F26qewlehd5xzjztqbdsw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F26qewlehd5xzjztqbdsw.png" alt=" " width="800" height="584"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Paso 2 — Crear un IAM Role con trust policy:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Statement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Principal"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"Federated"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:iam::ACCOUNT_ID:oidc-provider/token.actions.githubusercontent.com"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sts:AssumeRoleWithWebIdentity"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Condition"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"StringEquals"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"token.actions.githubusercontent.com:aud"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sts.amazonaws.com"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"StringLike"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"token.actions.githubusercontent.com:sub"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"repo:MI-ORG/MI-REPO:*"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La condición &lt;code&gt;StringLike&lt;/code&gt; es clave: solo TU repo puede asumir este rol. Si alguien forkea tu repo, no puede deployar.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Paso 3 — Usar en el workflow de Github Actions:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;permissions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;id-token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;write&lt;/span&gt;
  &lt;span class="na"&gt;contents&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;read&lt;/span&gt;

&lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;aws-actions/configure-aws-credentials@v4&lt;/span&gt;
    &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;role-to-assume&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ vars.AWS_ROLE_ARN }}&lt;/span&gt;
      &lt;span class="na"&gt;aws-region&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;us-east-1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eso es todo. Cero secrets de AWS en GitHub.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Secret Scanning
&lt;/h3&gt;

&lt;p&gt;Incluso con buenas prácticas, los errores siguen ocurriendo.&lt;/p&gt;

&lt;p&gt;Por eso GitHub incorpora Secret Scanning.&lt;br&gt;
Esta funcionalidad analiza automáticamente los commits buscando patrones asociados a credenciales conocidas.&lt;/p&gt;

&lt;p&gt;Actualmente puede detectar más de 200 tipos de secretos pertenecientes a más de 100 proveedores.&lt;br&gt;
Ejemplo: AWS, GitHub, Slack, Stripe, Twilio, npm, etc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Para habilitarlo:&lt;/strong&gt;&lt;br&gt;
Settings → Code security and analysis → Secret scanning → Enable&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb4mrax35c5o8h7betkxj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb4mrax35c5o8h7betkxj.png" alt=" " width="800" height="137"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cuando GitHub detecta una credencial:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Genera una alerta.&lt;/li&gt;
&lt;li&gt;Muestra exactamente dónde se encuentra.&lt;/li&gt;
&lt;li&gt;En algunos casos coordina la revocación automática con el proveedor.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feom2hnpvlgmdcj0bdxbs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feom2hnpvlgmdcj0bdxbs.png" alt=" " width="799" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Es una capa reactiva, pero extremadamente útil.&lt;/p&gt;


&lt;h3&gt;
  
  
  4. Push Protection
&lt;/h3&gt;

&lt;p&gt;Mientras Secret Scanning detecta problemas después del commit, Push Protection intenta detenerlos antes.&lt;/p&gt;

&lt;p&gt;Cuando GitHub detecta una credencial durante un push, simplemente bloquea la operación.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdpw3l0o2agvynd9yn3is.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdpw3l0o2agvynd9yn3is.png" alt=" " width="800" height="791"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1mmb45sqxim4prglx348.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1mmb45sqxim4prglx348.png" alt=" " width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El secret nunca llegó al repo. Nunca se expuso. Protección proactiva.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Para habilitarlo:&lt;/strong&gt;&lt;br&gt;
Settings → Code security and analysis → Push protection → Enable&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8tr65sumyjrihmrtoq0q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8tr65sumyjrihmrtoq0q.png" alt=" " width="800" height="104"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  5. Dependabot
&lt;/h3&gt;

&lt;p&gt;La seguridad no se limita únicamente a las credenciales.&lt;br&gt;
Muchas vulnerabilidades provienen de dependencias desactualizadas.&lt;/p&gt;

&lt;p&gt;Cuando se publica un CVE crítico que afecta una librería utilizada por nuestro proyecto, Dependabot puede:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Detectar la vulnerabilidad.&lt;/li&gt;
&lt;li&gt;Generar una alerta.&lt;/li&gt;
&lt;li&gt;Crear automáticamente un Pull Request con la actualización.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F91rq1k34savqexv265hx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F91rq1k34savqexv265hx.png" alt=" " width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Configuración&lt;/strong&gt; (&lt;code&gt;.github/dependabot.yml&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;
&lt;span class="na"&gt;updates&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;package-ecosystem&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;npm"&lt;/span&gt;
    &lt;span class="na"&gt;directory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/"&lt;/span&gt;
    &lt;span class="na"&gt;schedule&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;interval&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;weekly"&lt;/span&gt;
      &lt;span class="na"&gt;day&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;monday"&lt;/span&gt;

  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;package-ecosystem&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;github-actions"&lt;/span&gt;
    &lt;span class="na"&gt;directory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/"&lt;/span&gt;
    &lt;span class="na"&gt;schedule&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;interval&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;weekly"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Además de dependencias de aplicación, Dependabot también ayuda a mantener actualizadas las GitHub Actions utilizadas por nuestros pipelines.&lt;/p&gt;




&lt;h2&gt;
  
  
  Demo: Deploy completo sin credenciales
&lt;/h2&gt;

&lt;p&gt;Para demostrar cómo funcionan varias de estas capas trabajando juntas, preparé una aplicación sencilla que lee un secreto desde una variable de entorno y lo muestra en una página web.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;El código relevante:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;SECRET_MESSAGE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;SECRET_MESSAGE&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;No secret configured&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La aplicación no conoce el valor del secreto.&lt;br&gt;
Simplemente espera encontrar una variable de entorno durante la ejecución.&lt;/p&gt;

&lt;p&gt;La demostración consistió en desplegar esta aplicación en Amazon ECS Fargate, utilizando GitHub Actions para automatizar todo el proceso y OIDC para autenticarnos en AWS sin necesidad de almacenar Access Keys permanentes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;El flujo:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GitHub Secret (SECRET_MESSAGE)
       ↓
GitHub Actions (OIDC → sin AWS keys)
       ↓
Build Docker image → Push a ECR
       ↓
Update ECS Task Definition (inyecta el secret)
       ↓
Deploy a ECS Fargate
       ↓
App muestra el secret
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm92dnqd0x3d50fjm77ly.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm92dnqd0x3d50fjm77ly.png" alt=" " width="800" height="537"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resultado:&lt;/strong&gt; El secret se muestra en la app, pero si buscas en todo el repositorio, no lo vas a encontrar. Se inyecta en runtime a través de la Task Definition de ECS. Nunca existió en el código fuente.&lt;/p&gt;




&lt;h2&gt;
  
  
  Qué puedes hacer hoy
&lt;/h2&gt;

&lt;p&gt;Si te llevas algo de este artículo, que sea esto:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Habilita Push Protection&lt;/strong&gt;: Protección inmediata contra leaks accidentales.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Migra de AWS access keys a OIDC&lt;/strong&gt;: Eliminas el riesgo más grande de tu pipeline.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Agrega &lt;code&gt;dependabot.yml&lt;/code&gt;&lt;/strong&gt;: Un archivo y tus dependencias se mantienen actualizadas automáticamente.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Mueve secrets hardcodeados a GitHub Secrets&lt;/strong&gt;: Revisa tu código, busca tokens hardcodeados, y muévelos.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Conclusión
&lt;/h2&gt;

&lt;p&gt;La seguridad de credenciales no tiene que ser complicada.&lt;/p&gt;

&lt;p&gt;GitHub nos proporciona múltiples capas de protección que abarcan desde la prevención de errores humanos mediante Push Protection, hasta la detección de credenciales expuestas con Secret Scanning y la eliminación completa de credenciales permanentes mediante OIDC.&lt;/p&gt;

&lt;p&gt;La principal reflexión que quise transmitir durante mi charla en el GitHub Community Day Perú 2026 es que muchas veces utilizamos GitHub todos los días, pero no aprovechamos todo el potencial que nos ofrece en materia de seguridad.&lt;/p&gt;

&lt;p&gt;Con unas pocas configuraciones podemos reducir significativamente el riesgo de exposición de credenciales y fortalecer nuestros pipelines sin añadir complejidad innecesaria.&lt;/p&gt;

&lt;p&gt;Las diapositivas utilizadas para la presentación están disponibles en: &lt;a href="https://dev.tourl"&gt;https://speakerdeck.com/bnktch13/seguridad-en-github-para-devops&lt;/a&gt;&lt;br&gt;
Y el código completo del ejemplo utilizado durante la demostración está disponible en: &lt;a href="https://dev.tourl"&gt;https://github.com/BnkTCh/secure-deploy-demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Te invito a explorarlo, probarlo y adaptarlo a tus propios proyectos.&lt;/p&gt;

&lt;p&gt;Y si estuviste presente en la charla durante el GitHub Community Day Perú 2026, gracias por acompañarme y por todas las preguntas y conversaciones que hicieron la sesión aún más interesante.&lt;/p&gt;

</description>
      <category>seguridad</category>
      <category>github</category>
      <category>devops</category>
      <category>aws</category>
    </item>
    <item>
      <title>Prompts que construyen: cómo dominar Amazon Q Developer en tu día a día</title>
      <dc:creator>Bianca Torres</dc:creator>
      <pubDate>Mon, 05 Jan 2026 02:22:14 +0000</pubDate>
      <link>https://dev.to/bnkintech/prompts-que-construyen-como-dominar-amazon-q-developer-en-tu-dia-a-dia-1h57</link>
      <guid>https://dev.to/bnkintech/prompts-que-construyen-como-dominar-amazon-q-developer-en-tu-dia-a-dia-1h57</guid>
      <description>&lt;p&gt;¿Sabías que el 40% del tiempo de un desarrollador se va en tareas repetitivas como leer documentación, generar boilerplate y debuggear errores?&lt;/p&gt;

&lt;p&gt;Como DevOps Engineer, he descubierto que Amazon Q Developer puede transformar estas tareas tediosas en procesos eficientes. No es solo "otra IA más": es un asistente especializado que entiende el ecosistema AWS.&lt;/p&gt;

&lt;p&gt;En este artículo te muestro cómo usarlo de forma práctica y, más importante, cómo escribir prompts que generen resultados reales, no respuestas genéricas.&lt;/p&gt;

&lt;p&gt;Este artículo está basado en una charla que di sobre Amazon Q Developer y Prompt Engineering.&lt;/p&gt;

&lt;p&gt;Si prefieres el formato video, aquí puedes verla completa:&lt;br&gt;
&lt;a href="https://www.youtube.com/live/M3sr0p8G5OU?si=YI9GLC-6PN8ygRql" rel="noopener noreferrer"&gt;https://www.youtube.com/live/M3sr0p8G5OU?si=YI9GLC-6PN8ygRql&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk09auazy60uer27myu0a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk09auazy60uer27myu0a.png" alt=" " width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Qué es Amazon Q Developer?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Amazon Q Developer es un asistente de IA generativa enfocado en:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Desarrollo de software&lt;/li&gt;
&lt;li&gt;Administración de AWS&lt;/li&gt;
&lt;li&gt;Mejores prácticas oficiales&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Se integra directamente en:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IDEs como VS Code&lt;/li&gt;
&lt;li&gt;AWS Console&lt;/li&gt;
&lt;li&gt;CLI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A diferencia de otras herramientas genéricas, Amazon Q está entrenado con:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Documentación oficial de AWS&lt;/li&gt;
&lt;li&gt;Ejemplos reales&lt;/li&gt;
&lt;li&gt;Buenas prácticas del ecosistema cloud&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;¿Cómo funciona Amazon Q Developer?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Amazon Q Developer funciona sobre Amazon Bedrock, utilizando distintos Large Language Models (LLMs), entre ellos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Amazon Titan&lt;/li&gt;
&lt;li&gt;GPT (y otros modelos disponibles)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Algunos puntos clave:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No usa un único modelo fijo&lt;/li&gt;
&lt;li&gt;Cuanto más popular es un lenguaje o framework, mejor entrenado estará el modelo.&lt;/li&gt;
&lt;li&gt;Más datos de entrenamiento → mejores sugerencias&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Por eso, tecnologías comunes como Terraform, Kubernetes o Python suelen tener respuestas de muy buena calidad.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Qué podemos hacer con Amazon Q Developer?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;En el día a día, Amazon Q puede ayudarte a:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Autocompletar código más rápido&lt;/li&gt;
&lt;li&gt;Obtener soluciones simples sin salir del IDE&lt;/li&gt;
&lt;li&gt;Explicar y documentar código&lt;/li&gt;
&lt;li&gt;Explicar mensajes de error&lt;/li&gt;
&lt;li&gt;Generar pruebas&lt;/li&gt;
&lt;li&gt;Crear código base (boilerplate)&lt;/li&gt;
&lt;li&gt;Mejorar tu productividad en general&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La clave no es solo qué hace, sino cómo se lo pides.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Casos de uso reales donde Amazon Q brilla&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para DevOps Engineers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Infraestructura como código: Generar templates de CloudFormation/Terraform&lt;/li&gt;
&lt;li&gt;Troubleshooting: Interpretar logs de CloudWatch y errores de servicios AWS&lt;/li&gt;
&lt;li&gt;Automatización: Crear scripts de CI/CD y pipelines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para Developers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SDK de AWS: Generar código para interactuar con servicios AWS&lt;/li&gt;
&lt;li&gt;Serverless: Crear funciones Lambda con mejores prácticas&lt;/li&gt;
&lt;li&gt;Containerización: Dockerfiles optimizados para ECS/EKS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para Cloud Architects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Diseño de arquitecturas: Sugerir patrones y servicios apropiados&lt;/li&gt;
&lt;li&gt;Optimización de costos: Identificar oportunidades de ahorro&lt;/li&gt;
&lt;li&gt;Seguridad: Implementar controles y políticas IAM&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;¿Qué es un prompt?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Un prompt es simplemente:&lt;br&gt;
La instrucción que le das a la IA para que realice una tarea.&lt;br&gt;
Pero la diferencia entre frustración y productividad está en la calidad del prompt.&lt;/p&gt;

&lt;p&gt;Prompt vago vs Prompt bueno&lt;/p&gt;

&lt;p&gt;Prompt vago:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Explícame este error
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Prompt bueno:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Explícame este error que ocurre en un pod de Kubernetes en EKS cuando intento 
desplegar una aplicación Spring Boot en Java 17 y el pod entra en estado 
CrashLoopBackOff.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 El contexto lo es todo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Buenas prácticas de Prompt Engineering&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;La regla de las 4 C:&lt;/p&gt;

&lt;p&gt;Estas son las prácticas que mejor resultado me han dado usando Amazon Q Developer:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Claro&lt;br&gt;
Sé específico sobre lo que quieres.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Contexto&lt;br&gt;
Incluye información clave como:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Lenguaje&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Versión&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Servicio&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Entorno&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Conciso&lt;br&gt;
Evita el ruido innecesario.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Continuo&lt;br&gt;
Itera. Ajusta el prompt según la respuesta que recibes.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Checklist antes de enviar un prompt&lt;/p&gt;

&lt;p&gt;Antes de presionar Enter, pregúntate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;¿Qué quiero exactamente? (tarea + resultado esperado)&lt;/li&gt;
&lt;li&gt;¿Dónde corre? (lenguaje, versión, servicio, entorno)&lt;/li&gt;
&lt;li&gt;¿Es claro y corto?&lt;/li&gt;
&lt;li&gt;¿Qué siguiente paso pediré si no es perfecto?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Prompt engineering es un diálogo, no una orden única.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusión&lt;/strong&gt;&lt;br&gt;
Amazon Q Developer puede ahorrarte mucho tiempo si sabes cómo hablarle.&lt;/p&gt;

&lt;p&gt;No se trata de escribir prompts "bonitos", sino prompts útiles, con intención clara, contexto técnico y capacidad de iteración.&lt;/p&gt;

&lt;p&gt;Si eres DevOps Engineer, Cloud Engineer o Developer y trabajas con AWS, aprender a usar Amazon Q Developer bien es una ventaja real, no solo hype.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Próximos pasos:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Instala Amazon Q Developer en tu IDE favorito:&lt;br&gt;
&lt;a href="https://docs.aws.amazon.com/es_es/amazonq/latest/qdeveloper-ug/q-in-IDE-setup.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/es_es/amazonq/latest/qdeveloper-ug/q-in-IDE-setup.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Practica con un proyecto real - empieza con tareas simples&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Documenta tus prompts exitosos - crea tu propia biblioteca&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Comparte con tu equipo - la productividad se multiplica&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;¿Y tú?&lt;br&gt;
¿Ya usas Amazon Q Developer en tu día a día?&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>ai</category>
      <category>promptengineering</category>
    </item>
  </channel>
</rss>
