# Secretos para aplicaciones

> Guarda los secretos de tus aplicaciones y pipelines en Ironchip y léelos con cualquier cliente de Vault, con redes permitidas, caducidad y registro de cada lectura.

URL: https://docs.ironchip.com/pam/boveda/secretos/

Esta página explica cómo guardar los secretos de tus aplicaciones, pipelines y scripts en Ironchip, y cómo los leen con la API de secretos de Ironchip, que habla la de Vault. Es para quien administra los secretos y para quien integra una aplicación.

## Cómo funciona

- **Secrets** guarda los secretos de la compañía, organizados en rutas como `billing/stripe`. Los valores se escriben y no se vuelven a mostrar nunca, ni en la consola ni en ningún otro sitio de Ironchip.
- **Workloads** da de alta cada aplicación, pipeline o script que los lee. Cada workload tiene su propia credencial y solo lee los secretos y carpetas que le das, desde las redes que le permites.
- La aplicación entra con un **cliente de Vault** cualquiera: las CLI `vault` y `bao`, los SDK de Vault, Terraform o External Secrets. No hace falta cambiar código.
- En **cada petición** Ironchip comprueba que el workload está activo, que no ha caducado, que pregunta desde una de sus redes y que usa su credencial vigente. Cada petición queda registrada.

## Antes de empezar

Necesitas estos permisos (consulta [Puesta en marcha](https://docs.ironchip.com/pam/administracion/primeros-pasos/)):

- **PAM secrets** para escribir y borrar secretos.
- **PAM workloads** para dar de alta workloads y emitir sus credenciales.

## Guardar un secreto

1. Ve a **PAM > Secrets > Secrets** y haz clic en **Add secret**.

   [Imagen: Página Secrets con las rutas de los secretos, sus campos, la versión y la fecha de cambio]

2. En **Path**, escribe la ruta, por ejemplo `billing/stripe`. Las barras crean carpetas.
3. En **Fields**, añade cada campo con su **Name** (por ejemplo `api_key`) y su **Value**. Hasta 32 campos, de 64 KiB cada uno.
4. Haz clic en **Add secret**.

Para cambiarlo, abre **Options > Write new version** y escribe de nuevo **todos** los campos: los valores no se conservan de la versión anterior y un campo que no escribas no estará en la nueva. **Options > Remove secret** lo borra con todas sus versiones; los workloads que lo leían dejan de encontrarlo en ese momento.

## Dar de alta un workload

1. Ve a **PAM > Secrets > Workloads** y haz clic en **Add workload**.

   [Imagen: Página Workloads con cada workload, lo que lee, desde dónde y su estado]

2. Rellena **Name** (por ejemplo, `billing-worker`) y, si quieres, **Description (optional)**.
3. En **Secrets it reads**, escribe las rutas separadas por comas. Una ruta que termina en `/` es una carpeta, con todo lo que contiene: `billing/stripe, ci/`.
4. En **Short-lived credentials it asks for (optional)**, marca los roles de [credenciales temporales](https://docs.ironchip.com/pam/boveda/credenciales-temporales/) que puede pedir.
5. En **Networks it may be used from**, escribe las direcciones o rangos desde los que se conecta, por ejemplo `10.20.0.0/16, 203.0.113.7`. Vacío significa desde cualquier sitio.
6. En **Expires**, elige **Never**, **30 days**, **90 days** o **1 year**.
7. Haz clic en **Add and issue credential**.

La consola muestra la credencial **una sola vez**. Guárdala en el gestor de secretos de tu pipeline o de tu plataforma: el `secret_id` no se guarda en Ironchip y la única forma de tener otro es sustituirlo.

## Leer un secreto desde la aplicación

La ventana de la credencial muestra las variables y los comandos listos para copiar. Con la CLI de Vault:

```bash
export VAULT_ADDR=https://<API_HOST>
export VAULT_ROLE_ID=<ROLE_ID>
export VAULT_SECRET_ID=<SECRET_ID>

export VAULT_TOKEN=$(vault write -field=token auth/approle/login role_id="$VAULT_ROLE_ID" secret_id="$VAULT_SECRET_ID")
vault kv get -mount=secrets billing/stripe
```

- `VAULT_ADDR` es la dirección de la API de Ironchip que aparece en la credencial.
- El inicio de sesión es el método AppRole de Vault: `role_id` y `secret_id`.
- El token dura una hora y se puede renovar hasta un día.
- Los secretos están en el montaje `secrets`. Un workload solo puede leer; no puede escribir ni borrar.

Cualquier cliente que sepa hablar con Vault sirve: configura en él la misma dirección, el método AppRole y la ruta del secreto.

## Gestionar un workload

En **Options**, en su fila:

| Acción                | Qué hace                                                                                                         |
| --------------------- | ---------------------------------------------------------------------------------------------------------------- |
| **Open**              | Abre su página: lo que lee, desde dónde, cuándo caduca y su actividad.                                           |
| **Edit workload**     | Cambia lo que lee, las redes o la caducidad.                                                                     |
| **Issue credential**  | Emite una credencial nueva. La anterior y todos los tokens obtenidos con ella dejan de funcionar al instante.    |
| **Enable or disable** | Deshabilitado, no entra nada suyo, ni siquiera los tokens que ya tiene. Al habilitarlo de nuevo vuelven a valer. |
| **Remove workload**   | Lo borra con su credencial. Los secretos que leía se quedan.                                                     |

El estado de cada workload es uno de estos: **Active**, **Not used yet** (tiene credencial y no la ha usado), **No credential**, **Expired** o **Disabled**.

## Auditar las lecturas

En la página del workload, la pestaña **Activity** muestra sus últimas peticiones: cuándo, qué pidió (método y ruta), desde qué dirección y la respuesta. Si Ironchip la rechazó, aparece el motivo, por ejemplo que llegó desde una red no permitida o con una credencial sustituida. Las peticiones se conservan 90 días.

## Problemas frecuentes

| Respuesta o síntoma                               | Qué hacer                                                                                      |
| ------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
| `that credential has been replaced`               | Alguien emitió una credencial nueva. Usa la última.                                            |
| `Ironchip's secrets API does not serve this path` | La ruta no es de secretos ni de credenciales temporales. Revisa el montaje (`-mount=secrets`). |
| `permission denied` en un secreto                 | El workload no tiene esa ruta o su carpeta en **Secrets it reads**.                            |
| Rechazado desde la red del pipeline               | Añade su dirección o rango en **Networks it may be used from**.                                |

## Más información

- [Credenciales temporales](https://docs.ironchip.com/pam/boveda/credenciales-temporales/): credenciales de AWS, Google Cloud, Azure y bases de datos que caducan solas.
- [Bóveda de credenciales](https://docs.ironchip.com/pam/conceptos/boveda/)
