Los secretos llegan a los servidores que los usan, no al pipeline de en medio
El agente crunu funciona en tus servidores Linux, mantiene en memoria los entornos descifrados e inicia tus programas con ellos. La CI recibe un token para el entorno que compila, vinculado a un repositorio y una rama. Los valores de production no tienen por qué pasar por la CI.
Lo que preguntan equipos como el tuyo
Las preguntas que surgen cuando un equipo como el tuyo reúne sus secretos en un solo lugar. La guía de abajo responde a cada una de ellas.
- ¿Cómo recibe un servidor su entorno sin un archivo en disco?
- ¿Cómo mantenemos los valores de production fuera de la CI?
- ¿Cómo atamos un token de CI a un repositorio y una rama?
- ¿Qué pasa con los servicios en marcha si no se puede llegar a la bóveda?
- ¿Cuánto tarda en surtir efecto la revocación de una máquina?
- ¿Podemos servir production solo a nuestras propias redes?
- ¿Quién puede inscribir máquinas sin ver los valores?
- ¿Cómo sabe un script de despliegue por qué falló crunu?
Las partes de Crunu que lo cubren
Todas las partes funcionan con la misma regla: el servidor guarda datos cifrados, claves públicas y documentos firmados, y nunca tiene una clave que abra tus valores.
Máquinas
Inscribe un servidor con un código de un solo uso, y el agente crunu mantiene sus entornos en memoria e inicia tus programas con ellos.
Más información
CI/CD
Da a cada pipeline un token de servicio limitado a sus entornos y vincúlalo a tu proveedor de CI con OIDC, para que un token filtrado no pueda iniciar sesión por sí solo.
Más información
Reglas de red
Sirve el contenido de un entorno solo a redes IPv4 e IPv6 permitidas, con reglas firmadas que no se pueden relajar a escondidas.
Más información
Registro de auditoría
Los inicios de sesión, los permisos, las versiones, las rotaciones y los rechazos van a un registro encadenado con hashes que puedes verificar con un clic y exportar.
Más información
Control de acceso
Da a cada persona, máquina y pipeline solo los entornos que necesita, con roles respaldados por claves de cifrado y no solo por comprobaciones del servidor.
Más información
Cómo funciona para equipos de plataforma
En esta página
Dónde se filtran los secretos de camino a un proceso
Llevar un valor hasta un proceso en marcha es el momento en que suele escaparse: un .env incrustado en una imagen, una clave de production guardada en las variables de la CI, un usuario de despliegue que puede leerlo todo.
El trabajo es que cada máquina y cada pipeline reciban exactamente sus entornos, que nada acabe en disco a menos que tú lo elijas, y que revocar sea una sola acción.
Cuatro pasos de un servidor nuevo a un servicio en marcha
- Crea la máquina. Elige sus entornos y cómo entregarlos: Environment key, que siempre da la última versión de cada archivo, o Selected files, una copia sellada solo de los archivos que la máquina necesita. Selected files se puede revocar sin cambiar la clave del entorno.
- Instala e inscribe. El diálogo «Enroll machine» muestra un comando que instala el agente, comprueba su SHA-256 e inscribe la máquina con un código de un solo uso. El código es válido 15 minutos por defecto y 24 horas como máximo, y se lee de stdin o de una variable, nunca de un argumento.
- Aprueba por la huella.
crunu enrollmuestra la huella de la máquina. Aprueba la máquina después de comprobar que coincide con la de la app. - Inicia tu servicio a través del agente. El usuario del servicio debe estar en el grupo
crunu. Con--restart on-change, el programa se reinicia con los valores nuevos cuando cambian.
# /etc/systemd/system/payments-api.service
[Service]
User=payments
ExecStart=/usr/local/bin/crunu run --env payments-api/production --restart on-change -- /opt/payments-api/bin/serverLo que hacen por ti el agente y los tokens
| Necesidad | Lo que hace Crunu |
|---|---|
| Ningún secreto en disco | El servicio del agente mantiene los entornos descifrados solo en memoria y se los entrega a crunu run mediante un socket local abierto al grupo crunu. Consulta systemd. |
| Archivos donde una herramienta los espera | crunu pull escribe los archivos con permisos 0600 en dos fases, conserva la versión anterior como .prev, no sigue enlaces simbólicos y se niega a escribir en los archivos de inicio del shell, en .ssh/ y en los directorios de systemd. --env-out escribe un archivo env para EnvironmentFile=. |
| Un agente que puedes auditar | Un binario estático de Go que solo usa la biblioteca estándar. En Linux está protegido de otros procesos del mismo usuario, los volcados de memoria están desactivados y el servicio se ejecuta en un sandbox de systemd. Las actualizaciones comprueban una firma Ed25519. |
| Servidores que aguantan una caída | El agente consulta el servidor cada minuto y renueva su concesión cada 5 minutos. Si no puede llegar al servidor, entrega el último estado verificado hasta que vence la concesión, 24 horas por defecto. |
| CI sin production | Los tokens de servicio reciben solo los entornos que concedes, con una concesión, un límite de usos y redes. Una vinculación de CI (OIDC) ata un token a un repositorio, una rama y un entorno de despliegue en GitHub Actions, GitLab CI, Bitbucket Pipelines o cualquier emisor OIDC. Un token de CI reutilizado se rechaza. |
| Production solo desde redes conocidas | Listas de redes firmadas y políticas de red del entorno para IPv4 e IPv6. Endurecer se aplica al instante; relajar espera 15 minutos con una alerta y la opción de deshacer, o se aplica al instante con una segunda firma. Los pases de máquina cubren los cambios de dirección, 24 horas por defecto. |
| Revocar con una sola acción | Revocar una máquina borra sus entornos de la memoria en cuestión de minutos mientras la máquina está en línea, y rota las claves de los entornos que tenía. Un código de inscripción reutilizado señala una posible interceptación. |
| Señales | Alertas por inicios de sesión desde dispositivos nuevos, códigos de inscripción reutilizados, máquinas en direcciones nuevas, tokens de CI reutilizados, concesiones vencidas y eventos de red, enviadas a un webhook firmado con HMAC o por correo. Slack, Microsoft Teams y PagerDuty se conectan mediante sus webhooks entrantes. |
Fallos que puedes distinguir
Cuando crunu no puede entregar las variables, su código de salida indica por qué, para que un script de despliegue pueda reaccionar. En los demás casos, crunu run devuelve el propio código de salida de tu programa.
| Código | Significado |
|---|---|
3 | La máquina no está inscrita o nadie ha iniciado sesión |
4 | Se revocó el acceso o venció la concesión |
5 | No hay conexión ni un estado verificado válido |
6 | Falló la comprobación de una firma o de un certificado |
7 | La política de red del entorno no permite esta dirección |
Dónde se detiene el agente
- El servicio funciona en Linux con systemd. En macOS,
crunufunciona como herramienta de línea de comandos, sin servicio en segundo plano. No hay versión para Windows. - No hay operador de Kubernetes, chart de Helm ni driver CSI, ni proveedor de Terraform, ni SDK. Los programas reciben los valores mediante
crunu run. - No hay sincronización integrada con Vercel, Cloudflare, AWS Secrets Manager ni GitHub Secrets. Puedes enviar valores desde la CI con
crunu runy la CLI de la propia plataforma. - Sin secretos dinámicos. Crunu no genera contraseñas de base de datos de corta duración; eso requeriría una clave en el servidor.
- Una máquina es un destinatario legítimo. Quien tenga root en ella puede leer lo que se le entregó, y un proceso en marcha conserva sus variables hasta que se reinicia.
- Las restricciones de red las aplica el servidor, no el cifrado. Un servidor comprometido no las respetaría, y todas las máquinas detrás de un mismo NAT tienen la misma dirección.
Cada limitación, con lo que puedes hacer al respecto, está en la página de limitaciones.
Si también operas el servidor
Los equipos que quieren el servidor en su propia infraestructura pueden ejecutarlo en Docker, Cloudflare Workers, Vercel o Google Cloud Run, y pasar de uno a otro con un solo archivo de exportación que no contiene valores sin cifrar. Un comando doctor comprueba un despliegue, y un endpoint de estado expone métricas en formato Prometheus. El servidor no se publica como descarga pública. Escribe a support@crunu.com. La página de autoalojamiento compara las plataformas.
Documentación e integraciones relacionadas
- Instalar el agente en un servidor
- Máquinas y concesiones
- crunu run
- crunu pull
- Inscribir una máquina y ejecutar el servicio
- Variables de entorno y códigos de salida
- Vincular un token de servicio a la CI con OIDC
- Restringir production a la red de una oficina
- Autoalojamiento: visión general y plataformas
- systemd
- Docker
- GitHub Actions
- GitLab CI
- Bitbucket Pipelines
Dudas frecuentes
¿No está aquí? Escribe a support@crunu.com y te responderá una persona.
¿Qué pasa con los servicios en marcha si no se puede llegar a Crunu?
Siguen funcionando. El agente entrega el último estado verificado hasta que vence su concesión, 24 horas por defecto. Si no hay un estado válido, crunu run termina con el código 5.
¿Cuánto tarda en surtir efecto la revocación de una máquina?
Unos minutos mientras la máquina está en línea: el agente consulta el servidor cada minuto y borra sus entornos en cuanto se revoca. Una máquina que sigue sin conexión pierde el acceso cuando vence su concesión.
¿Puede la CI desplegar en production sin ver los secretos de production?
Sí, y es la configuración que recomienda Crunu. El servidor de production ejecuta el agente y obtiene su propio entorno; el pipeline entrega el código y reinicia el servicio.
¿crunu funciona en contenedores?
El script de instalación tiene un modo sin root pensado para la CI y los contenedores, probado en las imágenes node:24, Ubuntu 24.04 y Alpine 3.22. Con un token de servicio, crunu inicia sesión y descifra dentro de su propio proceso, sin archivos de estado.
¿Alguien puede inscribir máquinas sin ver ningún valor?
Sí. El rol Operator en un entorno no tiene clave: añade máquinas y solicita acceso para ellas, y un propietario o un administrador lo aprueba.
¿Hay soporte para Kubernetes?
No. No hay operador, chart de Helm ni driver CSI.