0Pricing
Cloud & IT Cert Prep · Lección

Gestión segura de secretos y variables de entorno

Evite incluir secretos codificados directamente en el código fuente utilizando gestores de secretos (Vault, AWS Secrets Manager) e inyección de variables de entorno en tiempo de ejecución.

Gestión segura de secretos y variables de entorno es una lección gratuita de Cloud & IT Cert Prep en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Cloud & IT Cert Prep, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Cloud & IT Cert Prep incluye 4 lecciones en total.

El problema de los secretos codificados directamente

Los secretos codificados directamente —claves de API, contraseñas de bases de datos, claves privadas TLS y tokens OAuth insertados directamente en el código fuente— son una de las vulnerabilidades de seguridad más comunes y evitables. Los secretos presentes en el código fuente quedan expuestos en el historial del control de versiones (incluso después de eliminarlos), son visibles para todos los desarrolladores con acceso al repositorio y se filtran con frecuencia cuando los repositorios se hacen públicos por accidente. Herramientas como GitGuardian y truffleHog buscan continuamente secretos filtrados en plataformas como GitHub.

# DANGEROUS: hardcoded secret in source code
# db_password = 'P@ssw0rd#2026'
# api_key = 'sk-live-abc123xyz789'
# aws_secret = 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'

# These secrets are now:
# - In git history (even if later deleted)
# - Visible to all repo contributors
# - Potentially in CI/CD logs
# - Often leaked when repos go public accidentally

Variables de entorno: mejores, pero insuficientes

Las variables de entorno eliminan los secretos del código fuente al inyectarlos en tiempo de ejecución mediante el sistema operativo anfitrión o el orquestador de contenedores. La aplicación lee os.environ['DB_PASSWORD'] en lugar de un valor codificado directamente. Esto es mejor que codificar secretos directamente, pero las variables de entorno presentan puntos débiles: aparecen en las listas de procesos, se heredan en los procesos secundarios, a menudo terminan en volcados de memoria y registros de depuración, y requieren una rotación manual. Son adecuadas para el desarrollo, pero por sí solas no bastan para gestionar los secretos en producción.

# Environment variable pattern:
# In .env file (NEVER commit to git):
# DB_PASSWORD=P@ssw0rd#2026
# API_KEY=sk-live-abc123xyz789

# In .gitignore:
# .env
# *.env
# .env.*

# In application code:
# db_password = os.environ.get('DB_PASSWORD')
# api_key = os.environ.get('API_KEY')

# Risk: env vars visible in 'ps aux' output,
# inherited by child processes, appear in /proc/<pid>/environ

Gestores de secretos dedicados

Los gestores de secretos son sistemas diseñados específicamente para almacenar, rotar y auditar el acceso a secretos. Entre las principales soluciones se incluyen HashiCorp Vault (de código abierto y empresarial), AWS Secrets Manager, Azure Key Vault y Google Cloud Secret Manager. Las aplicaciones se autentican en el gestor de secretos durante el tiempo de ejecución, recuperan el secreto y lo utilizan; los secretos no se almacenan nunca en disco ni en variables de entorno. Todos los accesos quedan registrados, lo que permite auditar quién accedió a cada secreto y cuándo.

# HashiCorp Vault secret retrieval (conceptual):
# Application authenticates to Vault using:
#   - AWS IAM role (in cloud environments)
#   - Kubernetes service account token
#   - AppRole credentials

# After authentication, retrieve secret:
# vault kv get -field=password secret/prod/database

# In application (Python SDK):
# client = hvac.Client(url='https://vault.company.com')
# client.auth.aws.iam_login(role='prod-app')
# secret = client.secrets.kv.read_secret('prod/database')
# db_password = secret['data']['password']

Rotación automática de secretos

Una ventaja clave de los gestores de secretos frente a las variables de entorno es la rotación automática. AWS Secrets Manager puede rotar automáticamente las contraseñas de bases de datos RDS según una programación (por ejemplo, cada 30 días) sin necesidad de volver a desplegar la aplicación. El gestor de secretos actualiza la contraseña en la base de datos y el secreto almacenado simultáneamente. Las aplicaciones que recuperan los secretos en cada conexión reciben automáticamente la nueva credencial. Esto elimina la práctica habitual de utilizar contraseñas «permanentes» para cuentas de servicio que nunca se rotan.

# AWS Secrets Manager rotation configuration:
# Secret:         prod/app-database-credentials
# Rotation:       enabled
# Frequency:      every 30 days
# Lambda function: SecretsManager-MyRDSRotation

# Rotation process:
# 1. Lambda creates new DB password
# 2. Updates secret in Secrets Manager
# 3. Updates password on RDS instance
# 4. Tests new credentials work
# 5. Deprecates old credentials
# Application: always calls GetSecretValue at runtime -> gets fresh value

La defensa de .gitignore

La primera línea de defensa contra los secretos confirmados en el repositorio es un archivo .gitignore correctamente mantenido que excluya todos los archivos que puedan contener secretos. Sin embargo, .gitignore solo evita confirmaciones futuras: los secretos que ya se hayan confirmado permanecen en el historial de git. Si se confirman secretos por accidente, deben considerarse comprometidos de inmediato: rote el secreto y, opcionalmente, use herramientas como git filter-repo para reescribir el historial (es necesario para cumplir con las normativas, pero no es suficiente por sí solo, ya que es posible que el secreto ya se haya extraído).

# Recommended .gitignore entries for secret files:
# .env
# .env.*
# *.pem
# *.key
# *.p12
# *.pfx
# credentials.json
# service_account*.json
# secrets.yaml
# config/secrets.yml
# terraform.tfvars  (may contain cloud credentials)
# .aws/credentials

# Pre-commit hook to scan for secrets before commit:
# pre-commit install
# hook: detect-secrets / gitleaks / truffleHog

Secretos en la infraestructura como código

Los archivos de infraestructura como código (IaC), como los de Terraform, CloudFormation y los manifiestos de Kubernetes, suelen contener secretos: cadenas de conexión a bases de datos, claves de API en declaraciones de variables de entorno y certificados TLS. Estos archivos suelen confirmarse en el control de versiones, lo que crea un riesgo de exposición de secretos. Entre las soluciones se incluyen los secretos dinámicos de Vault (Vault genera una credencial de corta duración específica para cada ejecución de Terraform), los Secrets de Kubernetes (almacenados en etcd, deben cifrarse en reposo) y external-secrets-operator, que sincroniza secretos desde un administrador de secretos a Kubernetes durante el tiempo de ejecución.

Principio de mínimo privilegio para los secretos

Cada aplicación o servicio debe acceder únicamente a los secretos que necesita específicamente: el principio de mínimo privilegio aplicado a los secretos. Una aplicación web necesita la contraseña de la base de datos, pero no la clave privada de la CA. Un trabajo de generación de informes necesita credenciales de solo lectura para la base de datos, no acceso de escritura. Los administradores de secretos hacen cumplir este principio mediante políticas de acceso que especifican qué identidades (roles de IAM, cuentas de servicio, AppRoles) pueden leer qué secretos, y registran todos los accesos con fines de auditoría.

# Vault policy: web application can read DB password only
# policy name: web-app-policy
# path 'secret/prod/database' {
#   capabilities = ['read']
# }
# path 'secret/prod/tls-certs/*' {
#   capabilities = []  # DENY - app does not need TLS keys
# }

# This policy is assigned to the web app's AppRole.
# The reporting service gets a separate policy with
# only 'secret/prod/reporting-db-readonly' access.

Secretos dinámicos

Los secretos dinámicos se generan bajo demanda para un solicitante específico y caducan automáticamente. Vault puede generar una credencial temporal de base de datos válida durante 1 hora y asociada al servicio específico que la solicitó. Una vez caducada, la base de datos revoca automáticamente la credencial. Este enfoque elimina las credenciales estáticas de larga duración que podrían sustraerse; incluso si un atacante captura una credencial dinámica, esta caduca rápidamente y queda vinculada a la identidad solicitante en los registros de auditoría.

# Vault dynamic secrets: temporary DB credentials
# Application calls Vault to get a DB credential:
# vault read database/creds/web-app-role
#
# Vault response:
# username: v-web-app-x7k2m-1234567890  (unique, temporary)
# password: A1b2C3d4E5f6G7h8            (randomly generated)
# lease_duration: 1h                     (auto-expires)
#
# After 1 hour, Vault instructs DB to revoke this user.
# No static password ever exists for the attacker to steal.

Secretos en las canalizaciones de CI/CD

Las canalizaciones de CI/CD suelen necesitar secretos, como credenciales de proveedores cloud para la implementación, tokens de registros de Docker y claves de firma. Nunca almacene secretos en scripts ni archivos de configuración de la canalización. En su lugar, use el almacén de secretos integrado en la plataforma de canalización (GitHub Actions Secrets, GitLab CI Variables, Jenkins Credentials Store) o recupere los secretos de un almacén central durante el tiempo de ejecución mediante una identidad de máquina. Marque las variables secretas como ocultas en los registros para evitar su exposición accidental en la salida de compilación.

# GitHub Actions: using secrets in pipeline
# secrets.yml in GitHub Settings -> Secrets (encrypted storage)
# Secret: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY

# In .github/workflows/deploy.yml:
# env:
#   AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
#   AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

# Best practice: use OIDC federation instead
# GitHub -> AWS trust relationship via OIDC token
# -> No static AWS keys needed at all

Auditoría del acceso a secretos

Los administradores de secretos proporcionan registros de auditoría exhaustivos de cada evento de acceso a secretos: qué identidad accedió a qué secreto, desde qué IP, a qué hora y si el acceso se realizó correctamente o fue denegado. Estos registros son fundamentales para el cumplimiento normativo (SOC 2, PCI-DSS) y la respuesta a incidentes. Cuando se sospecha que una credencial está comprometida, los registros de auditoría revelan qué sistemas accedieron a ella y cuándo, lo que permite identificar rápidamente los sistemas potencialmente afectados y tomar decisiones de contención.

Hooks de preconfirmación para prevenir secretos

Los hooks de preconfirmación son scripts que se ejecutan automáticamente antes de finalizar cada confirmación de git y permiten detectar secretos antes de que entren en el historial del control de versiones. Herramientas como detect-secrets (Yelp), GitLeaks y git-secrets (AWS) se integran como hooks de preconfirmación y analizan los archivos preparados en busca de patrones que coincidan con claves de API, cadenas de conexión, claves privadas y tokens JWT. Si se detecta un secreto, se rechaza la confirmación y se solicita al desarrollador que elimine la credencial. El framework pre-commit facilita añadir y compartir configuraciones de hooks entre equipos.

# Installing detect-secrets as pre-commit hook:
# 1. Install: pip install detect-secrets
# 2. Create baseline: detect-secrets scan > .secrets.baseline
# 3. Add to .pre-commit-config.yaml:
#    repos:
#      - repo: https://github.com/Yelp/detect-secrets
#        rev: v1.4.0
#        hooks:
#          - id: detect-secrets
#            args: ['--baseline', '.secrets.baseline']
# 4. Install hooks: pre-commit install

# Now every commit attempt is scanned:
# git commit -m 'add config'
# -> detect-secrets runs
# -> if AWS key pattern found: COMMIT BLOCKED
# -> developer must remove secret and use secrets manager

Comprobación rápida

Compruebe su comprensión de los conceptos de CompTIA Security+ (SY0-701) tratados en esta lección.

Resumen de la lección

En esta lección ha aprendido que: los secretos codificados directamente en el código fuente deben eliminarse y sustituirse por administradores de secretos como Vault o AWS Secrets Manager; la rotación automática elimina las credenciales de larga duración que los atacantes podrían aprovechar incluso después de la intrusión inicial; y los secretos dinámicos y las políticas de acceso basadas en el mínimo privilegio minimizan el valor de cualquier secreto individual que quede expuesto. A continuación, exploraremos la seguridad de las dependencias y el análisis de composición de software.

Preguntas frecuentes

¿La lección «Gestión segura de secretos y variables de entorno» es gratis?

Sí — el texto completo de «Gestión segura de secretos y variables de entorno» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Cloud & IT Cert Prep, actualiza a CoddyKit PRO. El curso de Cloud & IT Cert Prep incluye 4 lecciones en total.

¿Qué aprenderé en «Gestión segura de secretos y variables de entorno»?

Evite incluir secretos codificados directamente en el código fuente utilizando gestores de secretos (Vault, AWS Secrets Manager) e inyección de variables de entorno en tiempo de ejecución. Practicas Cloud & IT Cert Prep con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Cloud & IT Cert Prep?

No se requiere experiencia previa. Cloud & IT Cert Prep en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Gestión segura de secretos y variables de entorno»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Cloud & IT Cert Prep?

Sí. Cada lección de Cloud & IT Cert Prep incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Validación de entradas y codificación de salidas
  2. Gestión segura de secretos y variables de entorno
  3. Seguridad de dependencias y análisis de composición de software
  4. DevSecOps: integrar la seguridad desde el inicio en los pipelines
← Volver a Cloud & IT Cert Prep