Cloud & IT Cert Prep · Lección

Secrets Manager y Parameter Store

Rote automáticamente las credenciales de bases de datos con Secrets Manager, almacene configuraciones no secretas en Parameter Store e integre ambos servicios con Lambda y ECS

Lección 3 de 413 pasos

Secrets Manager y Parameter Store es una lección gratuita de Cloud & IT Cert Prep en CoddyKit. Esta es la lección 3 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 en el código

Un antipatrón habitual y peligroso consiste en almacenar secretos (contraseñas de bases de datos, claves de API y tokens de OAuth) en el código fuente de la aplicación, en variables de entorno o en archivos de configuración incluidos en el control de versiones. Cuando estos repositorios quedan expuestos, ya sea porque se hacen públicos accidentalmente o porque accede a ellos un atacante, todos los secretos quedan comprometidos de inmediato. AWS proporciona dos servicios administrados para eliminar este problema: AWS Secrets Manager para credenciales que necesitan rotación automática y AWS Systems Manager Parameter Store para valores de configuración y secretos que no requieren rotación.

# Anti-pattern: secrets in code (NEVER do this)
# db_password = 'supersecret123'
# api_key = 'sk-abc123def456'

# Best practice: retrieve at runtime
import boto3

client = boto3.client('secretsmanager', region_name='us-east-1')
response = client.get_secret_value(SecretId='prod/myapp/db-password')
password = response['SecretString']  # fresh value, always current

Descripción general de AWS Secrets Manager

AWS Secrets Manager es un servicio administrado para almacenar, recuperar y rotar automáticamente secretos. Cifra todos los secretos con KMS (de forma predeterminada, mediante una clave administrada por AWS, o mediante su CMK). Los secretos pueden almacenar cualquier dato estructurado como una cadena JSON de pares clave-valor. Secrets Manager cobra 0,40 USD por secreto al mes, más 0,05 USD por cada 10 000 llamadas a la API. Su principal diferencia respecto a Parameter Store es la rotación automática integrada para RDS, Redshift, DocumentDB y secretos personalizados mediante funciones de rotación de Lambda, sin necesidad de modificar la aplicación durante la rotación.

# Create a secret in Secrets Manager
aws secretsmanager create-secret \
  --name 'prod/myapp/database' \
  --description 'Production MySQL credentials' \
  --secret-string '{"username":"admin","password":"changeme123","host":"mydb.rds.amazonaws.com","port":3306,"dbname":"orders"}'

# Retrieve the secret (by application)
aws secretsmanager get-secret-value \
  --secret-id 'prod/myapp/database' \
  --query 'SecretString' \
  --output text | python3 -c 'import sys,json; s=json.load(sys.stdin); print(s["password"])'

Rotación automática con Secrets Manager

La rotación automática es la función más potente de Secrets Manager. Para las bases de datos de RDS, Secrets Manager rota las contraseñas de forma nativa: 1) Genera una contraseña nueva. 2) Actualiza la contraseña del usuario de la base de datos en RDS. 3) Actualiza el secreto con la contraseña nueva. 4) Verifica que las credenciales nuevas funcionan. Todo esto ocurre mientras la aplicación está en ejecución: sin tiempo de inactividad ni intervención manual. Las aplicaciones siempre llaman a get-secret-value para recuperar la contraseña actual, por lo que utilizan automáticamente las credenciales rotadas.

# Enable automatic rotation for RDS secret
aws secretsmanager rotate-secret \
  --secret-id 'prod/myapp/database' \
  --rotation-rules AutomaticallyAfterDays=30 \
  --rotation-lambda-arn arn:aws:lambda:us-east-1:123:function:SecretsManagerRDSMySQLRotationSingleUser

# AWS provides pre-built rotation Lambda functions for:
# - RDS MySQL/PostgreSQL/MariaDB/Oracle/SQL Server
# - DocumentDB
# - Redshift
# - Custom: write your own Lambda for other services

# Application code: always call GetSecretValue, never cache long-term

Almacenamiento en caché local de secretos

Llamar a Secrets Manager en cada consulta a la base de datos sería costoso y lento. La práctica recomendada es almacenar el secreto localmente en caché en memoria durante un periodo breve. AWS proporciona clientes oficiales de almacenamiento en caché de Secrets Manager para Java y Python, que almacenan los secretos en caché durante un TTL configurable. Cuando la caché caduca, el cliente vuelve a obtener el secreto de Secrets Manager. Si una aplicación recibe un error de autenticación (lo que indica que la contraseña se ha rotado), actualiza inmediatamente la caché y vuelve a intentarlo. Este patrón ofrece rendimiento y disponibilidad de información actualizada sin sobrecargar la API de Secrets Manager.

# Python: Secrets Manager caching client
# pip install aws-secretsmanager-caching

from botocore.session import get_session
from aws_secretsmanager_caching import SecretCache, SecretCacheConfig

client = get_session().create_client('secretsmanager')
cache = SecretCache(
    config=SecretCacheConfig(secret_refresh_interval=3600),  # cache 1 hour
    client=client
)

# Returns cached value unless refresh interval expired
secret = cache.get_secret_string('prod/myapp/database')

AWS Systems Manager Parameter Store

AWS Systems Manager (SSM) Parameter Store es un almacén jerárquico de pares clave-valor, gratuito (para parámetros estándar), destinado a datos de configuración y secretos. Admite los tipos de parámetro String, StringList y SecureString. SecureString cifra los valores con KMS. A diferencia de Secrets Manager, Parameter Store NO admite la rotación automática; está diseñado para valores de configuración que cambian con poca frecuencia. Los parámetros estándar son gratuitos y pueden almacenar hasta 4 KB. Los parámetros avanzados admiten valores más grandes (hasta 8 KB), políticas de parámetros (caducidad y recordatorios de rotación) y tienen un coste de 0,05 USD por parámetro al mes.

# Create Parameter Store parameters
aws ssm put-parameter \
  --name '/prod/myapp/db-host' \
  --value 'mydb.cluster-abc.us-east-1.rds.amazonaws.com' \
  --type String

aws ssm put-parameter \
  --name '/prod/myapp/db-password' \
  --value 'mysecretpassword' \
  --type SecureString \
  --key-id alias/my-kms-key

# Retrieve parameter
aws ssm get-parameter \
  --name '/prod/myapp/db-password' \
  --with-decryption \
  --query 'Parameter.Value' --output text

Jerarquía de Parameter Store e IAM

Organice los valores de Parameter Store mediante una estructura jerárquica de rutas que refleje su entorno y la arquitectura de su aplicación. Esto permite crear políticas de IAM detalladas que concedan acceso a los parámetros según el prefijo de la ruta. Por ejemplo, puede conceder a una función de Lambda acceso únicamente a los parámetros bajo /prod/payment-service/; no podrá acceder a los parámetros de otros servicios. Este principio de mínimo privilegio aplicado a la configuración impide que un servicio comprometido lea los secretos de otro servicio.

# Parameter hierarchy
/prod/payment-service/db-password
/prod/payment-service/stripe-api-key
/prod/order-service/db-password
/prod/order-service/redis-url
/staging/payment-service/db-password

# IAM policy: payment-service Lambda can ONLY read its params
{
  'Effect': 'Allow',
  'Action': ['ssm:GetParameter', 'ssm:GetParameters', 'ssm:GetParametersByPath'],
  'Resource': 'arn:aws:ssm:us-east-1:123:parameter/prod/payment-service/*'
}

# Get all parameters for an app at once
aws ssm get-parameters-by-path \
  --path '/prod/payment-service/' \
  --with-decryption --recursive

Secrets Manager frente a Parameter Store: cuándo usar cada uno

Elija entre los dos servicios según sus requisitos: use Secrets Manager cuando necesite la rotación automática de secretos, almacene credenciales de bases de datos, deba compartir el secreto entre varias cuentas de AWS o la normativa exija políticas de rotación documentadas. Use Parameter Store cuando necesite valores de configuración (no secretos), quiera una solución gratuita para un almacenamiento sencillo de pares clave-valor, necesite una configuración jerárquica con control de acceso basado en rutas o deba almacenar el historial de versiones de los parámetros. Muchas arquitecturas utilizan ambos servicios: Parameter Store para la configuración y Secrets Manager para las credenciales.

# Usage comparison:
# Secrets Manager:
#   Cost: $0.40/secret/month
#   Rotation: Automatic (RDS, custom Lambda)
#   Cross-account: Yes
#   Best for: Database passwords, API keys, OAuth tokens

# Parameter Store:
#   Cost: Free (standard) / $0.05/month (advanced)
#   Rotation: Manual only
#   Cross-account: No (use Secrets Manager)
#   Best for: Config values, feature flags, non-rotating secrets

Integración con Lambda y ECS

Las funciones de Lambda y las tareas de ECS deben recuperar los secretos al iniciarse, no en cada invocación. Para Lambda: recupere los secretos en el código de inicialización (fuera de la función del controlador) y almacénelos en variables globales; el entorno de ejecución de Lambda persiste entre invocaciones, por lo que los secretos solo se recuperan una vez durante la vida de cada entorno. Para ECS: use el campo secrets en la definición de tarea para inyectar valores de Secrets Manager o SecureString de Parameter Store como variables de entorno; ECS los recupera y los inyecta al iniciar la tarea, sin necesidad de modificar el código de la aplicación.

# ECS task definition: inject secret as environment variable
{
  'containerDefinitions': [{
    'name': 'api',
    'image': 'my-api:latest',
    'secrets': [
      {
        'name': 'DB_PASSWORD',
        'valueFrom': 'arn:aws:secretsmanager:us-east-1:123:secret:prod/myapp/database:password::'
      },
      {
        'name': 'API_KEY',
        'valueFrom': '/prod/myapp/api-key'
      }
    ]
  }]
}
# Application reads DB_PASSWORD from env var
# ECS injects the current secret value at task start

Parameter Store para los ID de AMI de EC2

Un uso práctico, aunque a menudo olvidado, de Parameter Store es almacenar ID de AMI y otras referencias de despliegue. En lugar de incluir los ID de AMI directamente en las plantillas de CloudFormation (que quedan obsoletos cuando se publican nuevas AMI), haga referencia a un valor de Parameter Store. Su canalización de CI/CD actualiza el ID de AMI en Parameter Store cada vez que se crea una nueva AMI dorada. CloudFormation lee el ID de AMI más reciente de Parameter Store en el momento del despliegue. AWS también publica los ID de las AMI más recientes de Amazon Linux en rutas públicas de Parameter Store a las que puede hacer referencia directamente.

# Get AWS public AMI ID from Parameter Store
aws ssm get-parameter \
  --name '/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64' \
  --query 'Parameter.Value' --output text

# CloudFormation: reference public AMI parameter
Parameters:
  LatestAmiId:
    Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>'
    Default: '/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64'

Resources:
  MyEC2:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: !Ref LatestAmiId

Auditoría y cumplimiento de los secretos

La gobernanza de secretos exige saber quién accedió a ellos y cuándo. AWS CloudTrail registra cada llamada a la API de Secrets Manager y Parameter Store: GetSecretValue, PutParameter, GetParameter. Esto le proporciona un registro de auditoría completo para el cumplimiento normativo. Utilice alarmas de CloudWatch sobre las métricas de CloudTrail para recibir alertas cuando se acceda a los secretos de forma distinta a los patrones habituales; por ejemplo, si se accede a un secreto de producción desde una entidad principal de IAM inusual o desde una IP que no pertenece a su rango conocido, genere una alerta para investigarlo.

# CloudTrail metric filter: alert on unexpected secret access
aws logs put-metric-filter \
  --log-group-name CloudTrail/management-events \
  --filter-name 'SecretAccessOutsideHours' \
  --filter-pattern '{ $.eventSource = "secretsmanager.amazonaws.com" && $.eventName = "GetSecretValue" && $.userAgent != "lambda.amazonaws.com" }' \
  --metric-transformations \
    metricName=UnexpectedSecretAccess,metricNamespace=Security,metricValue=1

# Then create CloudWatch alarm on this metric
# Alert fires when non-Lambda principal accesses secrets

Uso compartido de secretos entre cuentas

En las arquitecturas con varias cuentas, las aplicaciones de una cuenta a veces necesitan secretos administrados en otra (por ejemplo, una cuenta central de Seguridad administra todas las contraseñas de RDS). Las políticas de recursos de Secrets Manager permiten el acceso entre cuentas. Configure en el secreto una política basada en recursos que conceda a un rol de la cuenta consumidora permiso para llamar a GetSecretValue. El rol de la cuenta consumidora también debe tener una política de IAM que permita realizar llamadas al ARN del secreto. Las políticas de claves de KMS también deben conceder a la cuenta consumidora acceso a la CMK utilizada para cifrar el secreto.

# Secret resource policy: allow cross-account access
aws secretsmanager put-resource-policy \
  --secret-id 'prod/shared/rds-password' \
  --resource-policy '{
    "Statement": [{
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::999999999999:role/AppRole"
      },
      "Action": "secretsmanager:GetSecretValue",
      "Resource": "*"
    }]
  }'

# KMS key policy must also allow account 999999999999
# IAM policy in 999999999999 must allow GetSecretValue on ARN

Comprobación rápida

Compruebe su comprensión de los conceptos de AWS Solutions Architect (SAA-C03) tratados en esta lección.

Repaso de la lección

En esta lección ha aprendido lo siguiente: Secrets Manager proporciona rotación automática para las credenciales de bases de datos y las claves de API, y es la opción preferida para los secretos que deben rotarse; Parameter Store proporciona almacenamiento jerárquico y gratuito de configuraciones, con control de acceso de IAM basado en rutas; y ECS y Lambda pueden inyectar secretos como variables de entorno sin cambios en el código de la aplicación. CloudTrail proporciona registros de auditoría para todos los accesos a secretos. A continuación, exploraremos WAF, Shield y Network Firewall.

Gratis para empezar

Aprende Cloud & IT Cert Prep con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
150
Lecciones
600

Preguntas frecuentes

¿La lección «Secrets Manager y Parameter Store» es gratis?

Sí — el texto completo de «Secrets Manager y Parameter Store» 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 «Secrets Manager y Parameter Store»?

Rote automáticamente las credenciales de bases de datos con Secrets Manager, almacene configuraciones no secretas en Parameter Store e integre ambos servicios con Lambda y ECS 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 3 de 4.

¿Cuánto tiempo toma la lección «Secrets Manager y Parameter Store»?

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. KMS, ACM y patrones de cifrado
  2. GuardDuty, Inspector y Macie
  3. Secrets Manager y Parameter Store
  4. WAF, Shield y Network Firewall
← Volver a Cloud & IT Cert Prep