Skip to main content
Sign in →

Roles y permisos (RBAC)

ShieldAgent aplica control de acceso basado en roles en cada endpoint de API. Esta página documenta los roles integrados, la matriz de permisos y el permiso exacto requerido por cada endpoint.

Descripción general

Cada solicitud autenticada se comprueba contra el rol del llamador en el tenant objetivo. Los permisos siguen un patrón resource:action (p. ej. agent:write). Los administradores de plataforma omiten el ámbito del tenant y tienen todos los permisos. Los roles con ámbito de tenant se asignan por tenant, por lo que un usuario puede ser auditor en un tenant y tenant_admin en otro.

La caché de permisos tiene un TTL de 60 segundos con degradación elegante — si la base de datos no está temporalmente disponible, se sirven permisos obsoletos en lugar de denegar el acceso.

Roles integrados

ShieldAgent incluye seis roles del sistema. Los roles personalizados aún no son compatibles — las asignaciones usan estos roles integrados.

RolÁmbitoDescripción
platform_adminPlataformaAcceso completo a la plataforma en todos los tenants. Reservado para operadores de ShieldAgent.
tenant_adminTenantGestión completa de un tenant: usuarios, configuración, facturación, todos los subrecursos.
security_operatorTenantMonitorización, triaje de incidentes, gestión de alertas, revisión de riesgos.
auditorTenantAcceso de solo lectura a informes de cumplimiento, registro de auditoría y exportación.
aiops_engineerTenantCiclo de vida de agentes, configuración de servidores MCP/vínculos, autoría de políticas.
viewerTenantPanel de solo lectura y datos de resumen.

Matriz de permisos

La matriz siguiente muestra cada permiso y qué roles lo incluyen. platform_admin y tenant_admin tienen todos los permisos y se omiten para mayor legibilidad.

PermisoDescripciónsec_opauditoraiopsviewer
agent:readVer / listar agentes
agent:writeCrear o actualizar agentes
agent:deleteEliminar agentes
agent:configureModificar configuración de agente / líneas base
policy:readVer / listar políticas
policy:writeCrear o actualizar políticas
policy:deleteEliminar políticas
audit:readVer eventos del registro de auditoría
audit:exportExportar datos de auditoría
compliance:readVer informes de cumplimiento
compliance:writeCrear o actualizar registros de cumplimiento
compliance:exportExportar datos de cumplimiento
risk:readVer puntuaciones de riesgo y tendencias
risk:configureModificar umbrales de riesgo / sobreescrituras
incident:readVer incidentes
incident:writeCrear o actualizar incidentes
incident:triageReconocer, asignar o resolver
mcp_server:readVer registros de servidores MCP
mcp_server:writeCrear o actualizar servidores MCP
mcp_server:deleteEliminar servidores MCP
alert:readVer alertas
alert:writeCrear o actualizar reglas de alerta
alert:deleteEliminar reglas de alerta
alert:triageReconocer o resolver eventos de alerta
review:readVer revisiones pendientes
review:triageAprobar o rechazar revisiones
user:readVer cuentas de usuario
user:writeCrear o actualizar usuarios y roles
user:deleteEliminar cuentas de usuario
tenant:readVer configuración del tenant
tenant:writeModificar configuración del tenant / facturación
export:readVer configuraciones de exportación
export:writeCrear o actualizar configuraciones de exportación
dashboard:readVer datos del panel agregado

Requisitos de autenticación de endpoints

Cada endpoint con ámbito de tenant requiere un JWT válido más el permiso listado. El middleware valida tanto la pertenencia al tenant como el permiso específico antes de que se ejecute el manejador. Se devuelve un 403 Forbidden si la comprobación falla.

Agents

MétodoRutaPermiso
GET/tenants/:tenantId/agentsagent:read
POST/tenants/:tenantId/agentsagent:write
PUT/tenants/:tenantId/agents/:agentIdagent:write
PATCH/tenants/:tenantId/agents/:agentIdagent:configure
DELETE/tenants/:tenantId/agents/:agentIdagent:delete

Policies

MétodoRutaPermiso
GET/tenants/:tenantId/policiespolicy:read
POST/tenants/:tenantId/policiespolicy:write
PUT/tenants/:tenantId/policies/:policyIdpolicy:write
DELETE/tenants/:tenantId/policies/:policyIdpolicy:delete

Audit Trail

MétodoRutaPermiso
GET/tenants/:tenantId/auditaudit:read
GET/tenants/:tenantId/audit/verify-chainaudit:read

Compliance

MétodoRutaPermiso
GET/tenants/:tenantId/compliance/reportcompliance:read
GET/tenants/:tenantId/compliance/controlscompliance:read
POST/tenants/:tenantId/compliance/versionscompliance:write

Incidents

MétodoRutaPermiso
GET/tenants/:tenantId/incidentsincident:read
POST/tenants/:tenantId/incidentsincident:write
PATCH/tenants/:tenantId/incidents/:incidentIdincident:triage

Users & Tenants

MétodoRutaPermiso
GET/tenants/:tenantId/usersuser:read
POST/tenants/:tenantId/users/inviteuser:write
PATCH/tenants/:tenantId/users/:userIduser:write
GET/tenants/:tenantIdtenant:read
PUT/tenants/:tenantIdtenant:write

Uso del middleware

Los manejadores de rutas adjuntan comprobaciones RBAC como hooks preHandler de Fastify. Hay dos variantes disponibles:

requireTenantPermission(...perms)

Valida que el llamador pertenece al tenant en :tenantId y tiene al menos uno de los permisos listados. Usado por todos los endpoints con ámbito de tenant.

typescript
fastify.get(
  '/tenants/:tenantId/agents',
  { preHandler: [authenticate, rbac.requireTenantPermission('agent:read')] },
  async (request, reply) => { /* handler */ }
);

requirePermission(...perms)

Comprueba el permiso sin ámbito de tenant. Usado para endpoints a nivel de plataforma como plantillas de políticas o listado de planes de facturación.

typescript
fastify.get(
  '/policy-templates',
  { preHandler: [authenticate, rbac.requirePermission('policy:read')] },
  async (request, reply) => { /* handler */ }
);

Endpoints públicos

Un pequeño número de endpoints omiten la autenticación por completo:

POST/auth/signupCrear una nueva cuenta
POST/auth/loginAutenticarse y recibir JWT
GET/healthzSonda de actividad (sin límite de tasa)

Asignación de roles

Los roles se asignan por usuario por tenant mediante la tabla user_roles. Un usuario puede tener diferentes roles en diferentes tenants. Las asignaciones rastrean quién otorgó el rol y admiten expiración opcional.

typescript
// Assign a role via the API
PATCH /tenants/:tenantId/users/:userId
{
  "role": "security_operator"
}
// Requires: user:write permission

Los valores de rol heredados (admin, tenant) se normalizan automáticamente a sus equivalentes RBAC (platform_admin, tenant_admin) a nivel de middleware.

Roles y permisos (RBAC)