Ir al contenido

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.

Bóveda de activos de NORA: tabla con nombre, tipo (secreto, credencial, texto), entorno, valor enmascarado y descripción.

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.

Un asset tiene un campo type que determina cómo se almacena y si su valor puede revelarse desde la interfaz.

TipoDescripción¿Legible desde el orquestador?
textValor de configuración no sensible (ruta, correo, URL, parámetro).Sí, un administrador puede revelarlo.
credentialPar usuario + contraseña/secreto. El campo username es obligatorio.No (solo escritura).
secretValor sensible único (API key, token, contraseña).No (solo escritura).
vaultReferencia a un secreto guardado en un vault externo; el valor se resuelve en cada lectura.No (se resuelve en tiempo de ejecución).

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:

CampoRequeridoNotas
nameNombre lógico, único por entorno.
typetext, credential, secret o vault.
valueValor a cifrar (o, para vault, la configuración del proveedor).
usernameSolo credentialUsuario asociado a la credencial.
descriptionNoTexto libre.
expires_atNoMarca de caducidad (informativa).
environmentNodev | staging | production (por defecto production).

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.

Ventana de terminal
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.

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ía boto3).
  • 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:

ProveedorCampos requeridosOpcionales
azure_keyvaultvault_url, azure_tenant_id, azure_client_id, azure_client_secret
aws_secrets_manageraws_regionaws_access_key_id, aws_secret_access_key
hashicorp_vaultvault_url, vault_tokenmount_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.

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):

Ventana de terminal
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 environment pedido 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, ... } }
  • 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.