# AWS Secrets Manager

> Una caja fuerte para contraseñas y claves de API, para que nunca vivan en tu código.

- Nivel: Intermedio
- Temas: AWS, Seguridad
- URL: https://tidbit.legios.com.ar/es/aws-secrets-manager/
- En inglés: [AWS Secrets Manager](https://tidbit.legios.com.ar/aws-secrets-manager/)

**AWS Secrets Manager** guarda los valores sensibles que necesita una aplicación: contraseñas de bases de datos, claves de API de servicios externos, claves privadas, tokens. Guardás un secreto bajo un nombre como `prod/payments/stripe-key`, y tu código lo pide por nombre en tiempo de ejecución a través de la API de AWS, con IAM decidiendo quién tiene permiso para leerlo. El valor está cifrado en reposo y nunca aparece en los logs.

El problema que ataca son los secretos en el lugar equivocado: adentro del código fuente, en un archivo de configuración subido a Git, en una variable de entorno que ve cualquiera que entre al servidor. Una vez que una contraseña llega a un repositorio es prácticamente pública, aunque después la borres. Secrets Manager además **rota** los secretos: para una base Amazon RDS puede cambiar la contraseña cada 30 días solo y actualizar el valor guardado, así una credencial filtrada dura poco.

Ejemplo: una función AWS Lambda necesita conectarse a una base de datos. Su rol de IAM permite `secretsmanager:GetSecretValue` sobre un secreto específico. Al arrancar, la función pide el secreto, se conecta, y lo cachea unos minutos. Cuando la contraseña rota, el próximo pedido trae la nueva. Ningún desarrollador ve jamás la contraseña de producción.

AWS también tiene Systems Manager Parameter Store, un lugar más simple y barato para valores de configuración (y para secretos que no necesitan rotación). Secrets Manager es la opción cuando importan la rotación y la auditoría.

## Una analogía

La caja de llaves de la recepción de un hotel. El personal que necesita la llave maestra la firma al retirarla y la devuelve; nadie la lleva en el bolsillo ni anota la combinación en un papelito.

## Para quedarse

- Los secretos están cifrados, se leen por nombre a través de la API, y el acceso lo controla IAM.
- Rotación automática para RDS, Redshift y DocumentDB; rotación a medida con una función Lambda para cualquier otra cosa.
- Cada lectura queda registrada en CloudTrail, así sabés quién accedió a qué y cuándo.
- Se cobra por secreto por mes más llamadas a la API; Parameter Store es la opción barata para configuración común.

## Para seguir leyendo

- [¿Qué es AWS Secrets Manager? (documentación oficial)](https://docs.aws.amazon.com/es_es/secretsmanager/latest/userguide/intro.html)
- [Página de AWS Secrets Manager](https://aws.amazon.com/es/secrets-manager/)

## Términos relacionados

- [Base de datos](https://tidbit.legios.com.ar/es/database/): Un depósito ordenado de datos que los programas consultan y actualizan sin riesgo.
- [Clave de API](https://tidbit.legios.com.ar/es/api-key/): Un texto secreto que identifica a tu app cuando llama a la API de otro.
- [Token](https://tidbit.legios.com.ar/es/token/): El pedacito de texto que un modelo de lenguaje realmente lee.
- [API](https://tidbit.legios.com.ar/es/api/): El menú de cosas que un programa le deja pedir a otro programa.
- [IAM](https://tidbit.legios.com.ar/es/iam/): El reglamento que dice quién puede hacer qué en tu cuenta de AWS.
- [Cifrado](https://tidbit.legios.com.ar/es/encryption/): Mezclar datos para que solo quien tiene la clave pueda leerlos.
- [Código fuente](https://tidbit.legios.com.ar/es/source-code/): El texto legible que escriben quienes programan y a partir del cual se arma un programa.
- [Git](https://tidbit.legios.com.ar/es/git/): Una máquina del tiempo para el código: cada cambio guardado, por quién y por qué.
