Assets y credenciales
Un asset es un valor reutilizable que vive en el orquestador de NORA y que tus robots consumen en tiempo de ejecución: una ruta de carpeta, una dirección de correo, un usuario y contraseña, una API key, etc. En lugar de incrustar estos datos en el código del proceso, los defines una vez en NORA y el robot los pide por nombre cuando los necesita.

Los assets están cifrados en reposo (cifrado autenticado con una clave maestra y datos asociados —AAD— que vinculan cada ciphertext a su campo) y están aislados por organización (tenant): un robot solo puede leer los assets de su propia organización.
Tipos de asset
Sección titulada «Tipos de asset»Un asset tiene un campo type que determina cómo se almacena y si su valor puede revelarse desde la interfaz.
| Tipo | Descripción | ¿Legible desde el orquestador? |
|---|---|---|
text | Valor de configuración no sensible (ruta, correo, URL, parámetro). | Sí, un administrador puede revelarlo. |
credential | Par usuario + contraseña/secreto. El campo username es obligatorio. | No (solo escritura). |
secret | Valor sensible único (API key, token, contraseña). | No (solo escritura). |
vault | Referencia a un secreto guardado en un vault externo; el valor se resuelve en cada lectura. | No (se resuelve en tiempo de ejecución). |
Identidad de un asset
Sección titulada «Identidad de un asset»Cada asset se identifica por la combinación nombre + entorno dentro de la organización (restricción única). El campo environment puede ser dev, staging o production (por defecto production). Esto te permite tener, por ejemplo, un asset api-erp distinto en staging y en production sin colisión.
Campos disponibles al crear un asset:
| Campo | Requerido | Notas |
|---|---|---|
name | Sí | Nombre lógico, único por entorno. |
type | Sí | text, credential, secret o vault. |
value | Sí | Valor a cifrar (o, para vault, la configuración del proveedor). |
username | Solo credential | Usuario asociado a la credencial. |
description | No | Texto libre. |
expires_at | No | Marca de caducidad (informativa). |
environment | No | dev | staging | production (por defecto production). |
Assets de tipo credencial
Sección titulada «Assets de tipo credencial»Un asset credential guarda dos partes cifradas por separado: el username y el value (la contraseña o secreto). Ambos campos son obligatorios al crear el asset; si omites username, la API responde con error de validación.
curl -X POST https://nora-api.valisoftconsulting.com/api/v1/assets \ -H "Authorization: Bearer <token_de_sesion>" \ -H "Content-Type: application/json" \ -d '{ "name": "erp-login", "type": "credential", "username": "robot_facturacion", "value": "S3cret0-ERP", "environment": "production" }'La respuesta va envuelta en {"data": ...} y nunca incluye el valor ni el usuario descifrados, solo los metadatos del asset:
{ "data": { "id": "a1b2c3d4-0000-0000-0000-000000000000", "name": "erp-login", "type": "credential", "environment": "production", "description": null, "expires_at": null, "created_at": "2026-06-19T10:00:00Z", "updated_at": "2026-06-19T10:00:00Z" }}Crear, actualizar y eliminar assets requiere rol admin; listarlos y ver sus metadatos también lo permite el rol operator.
Integración con vaults externos
Sección titulada «Integración con vaults externos»Un asset de tipo vault no guarda el secreto en NORA: guarda la configuración de conexión a un vault externo y resuelve el valor en cada lectura. Proveedores soportados:
azure_keyvault— Azure Key Vault (REST API + credenciales de cliente OAuth2).aws_secrets_manager— AWS Secrets Manager (víaboto3).hashicorp_vault— HashiCorp Vault (API HTTP, KV v1 y v2).
La configuración del proveedor se guarda como JSON en el campo value e incluye, como mínimo, las claves provider y secret_name, más los parámetros propios del proveedor:
| Proveedor | Campos requeridos | Opcionales |
|---|---|---|
azure_keyvault | vault_url, azure_tenant_id, azure_client_id, azure_client_secret | — |
aws_secrets_manager | aws_region | aws_access_key_id, aws_secret_access_key |
hashicorp_vault | vault_url, vault_token | mount_path (def. secret), kv_version (def. 2) |
Cuando el secreto del vault es un JSON con username/password (AWS y HashiCorp), NORA devuelve value (la contraseña) y username.
Cómo los usa un robot
Sección titulada «Cómo los usa un robot»Los robots no usan tu sesión: leen los assets a través de la API pública con una cabecera X-API-Key (clave nora_ak_...) que debe tener el scope assets:read. El endpoint busca por nombre y entorno y devuelve el valor descifrado (o resuelto desde el vault):
curl "https://nora-api.valisoftconsulting.com/api/v1/assets/by-name/erp-login?environment=production" \ -H "X-API-Key: nora_ak_xxxxxxxxxxxxxxxxxxxx"{ "data": { "name": "erp-login", "type": "credential", "environment": "production", "value": "S3cret0-ERP", "username": "robot_facturacion" }}Detalles de comportamiento:
- Requiere scope
assets:read(o una key sin restricción de scopes). - Si la API key declara una lista blanca de entornos, el
environmentpedido debe estar en ella. - El endpoint está limitado a 30 peticiones por minuto por IP.
- Cada lectura exitosa queda registrada en el log de auditoría de la organización.
sequenceDiagram
participant Bot as Robot (agente)
participant API as API pública NORA
participant Vault as Vault externo
Bot->>API: GET /api/v1/assets/by-name/{name}<br/>X-API-Key (assets:read)
alt Asset tipo vault
API->>Vault: Resuelve secreto (Azure/AWS/HashiCorp)
Vault-->>API: value (+ username)
else text / credential / secret
API->>API: Descifra value (+ username)
end
API-->>Bot: { "data": { value, username, ... } }
Referencias de API
Sección titulada «Referencias de API»- Assets (API pública) — endpoint
GET /assets/by-name/{name}y detalles de scopes. - Autenticación — cómo crear y usar API keys
nora_ak_.... - Jobs — cómo un robot ejecuta procesos que consumen assets.
Consulta Assets (API pública) y la referencia de la API para los endpoints relacionados.