La API de PlantCare Enterprise implementa un modelo de seguridad Zero-Trust (cero confianza). Cada petición se autentica y valida en múltiples capas para garantizar la privacidad de los datos de cultivos y la integridad de la infraestructura.

1. Autorización de cliente a API (Claves de API)

Los clientes se autentican utilizando una clave permanente y segura pk_ent_ generada al registrarse. Este token de portador (bearer token) es validado directamente por la capa de enrutamiento del API Gateway antes de que la petición llegue al backend.

sequenceDiagram participant Client as Cliente participant GW as "API Gateway" participant KV as "Almacén de Secretos" participant API as "Servicio Backend" Client->>GW: "Solicitud con Bearer pk_ent_..." GW->>KV: "Validar Clave y Permisos" alt "Clave Válida" GW->>API: "Proxy de Solicitud + Encabezados de Identidad" else "Clave Inválida" GW-->>Client: "401 No Autorizado" end

2. Seguridad del almacenamiento (Escaneo de malware)

Las cargas de fotos para agricultura de precisión deben estar libres de malware. Cada imagen de diagnóstico foliar cargada en el almacén de objetos se escanea automáticamente en busca de firmas de virus de forma asíncrona antes de iniciar la evaluación del modelo.

sequenceDiagram participant GCS as "Almacén de Objetos" participant Func as "Función de Escaneo" participant Scan as "Escáner de Malware" GCS->>Func: "Evento: Objeto Finalizado" Func->>Scan: "Solicitud de Escaneo con Token Firmado" Scan->>Scan: "Análisis de Firmas de Malware" alt "Archivo Infectado" Scan-->>Func: "Estado: infectado" Func->>GCS: "ELIMINAR Objeto" Func->>Func: "Registrar Incidente de Seguridad" else "Archivo Limpio" Scan-->>Func: "Estado: limpio" end

3. Autorización de servicio a servicio

Cuando el servicio de backend necesita comunicarse con microservicios de procesamiento interno (como el Procesador de Imágenes), evita por completo las credenciales estáticas compartidas. El servicio solicita tokens de identidad firmados efímeros generados por el Servidor de Metadatos de la nube local.

sequenceDiagram participant API as "Servicio de Análisis" participant Meta as "Servidor de Metadatos" participant Proc as "Procesador de Imágenes" API->>Meta: "Obtener Token ID (Audience: URL del Procesador)" Meta-->>API: "Token de Identidad Firmado" API->>Proc: "POST /process (Authorization: Bearer Token)" Proc->>Proc: "Validar Firma del Token" alt "Token Válido" Proc-->>API: "200 OK (Imagen Procesada)" else "Token Inválido" Proc-->>API: "403 Prohibido" end

4. Aislamiento de red

Para proteger aún más la infraestructura interna, los contenedores críticos de backend (como el Procesador de Imágenes) están configurados con reglas de INGRESS_TRAFFIC_INTERNAL_ONLY. Son completamente inaccesibles desde el internet público, incluso si se cuenta con un token de identidad válido. Toda la comunicación se enruta a través de conectores de red privada.

5. Moderación de contenido y anti-spam

Cada análisis de cultivo está sujeto a un filtro de spam automatizado basado en etiquetas. El gateway evalúa las etiquetas devueltas por el modelo para bloquear cargas fuera de tema o que violen las políticas antes de que consuman las cuotas de la API B2B.

Cómo funciona

  1. El diagnóstico de IA devuelve una lista de detected_objects (etiquetas) para cada foto subida.
  2. Cada etiqueta se clasifica en una categoría de peso específica (+10 para fuera de tema, +100 para abuso).
  3. Si la puntuación supera el umbral, la puerta de enlace bloquea la solicitud y genera un evento.
sequenceDiagram participant AI as "Modelo de IA" participant SF as "Filtro de Spam" participant DB as "Base de Datos" participant MQ as "Cola de Moderación" AI->>SF: "detected_objects: [coche, perro, ...]" SF->>SF: "Puntuación = Σ peso(etiqueta)" alt "Puntuación < 20 (Inofensivo)" SF-->>AI: "PERMITIR" else "Puntuación ≥ 20 (Spam)" SF->>MQ: "Añadir a cola (ERR_IMAGE_SPAM)" SF->>DB: "IncrementSpamScore(uid)" SF-->>AI: "BLOQUEAR + Reembolso de cuota" else "Etiqueta de abuso detectada" SF->>MQ: "Añadir a cola (ERR_SECURITY_VIOLATION)" SF->>DB: "PenalizeUser: bloqueo 24h + +50" SF-->>AI: "BLOQUEAR + Reembolso de cuota" end

Categorías de peso de etiquetas

Categoría Peso Ejemplos
Inofensivo 0 plant, leaf, hand, table, pot, soil
Fuera de tema +10 c/u car, pet, food, screen, clothing, animal
Abuso +100 c/u weapon, drugs, nudity, id_card, passport, explicit

Acciones de aplicación

Puntuación Acción Penalización
0–10 ✅ Permitido Ninguna
≥20 🚫 Bloqueado La puntuación de spam se acumula; bloqueo automático al llegar a ≥50
≥100 🚫 Bloqueado Bloqueo de cuenta inmediato de 24h + +50 puntuación de spam

Protección de cuota: Los análisis bloqueados reembolsan la cuota del usuario — nunca se te cobra por un análisis bloqueado.
Verificación de planta: Si la IA detecta que no hay ninguna planta en la imagen (is_plant_present: false), la transacción se envía a la cola de moderación sin penalización.

Cola de moderación administrativa

Los administradores pueden revisar las transacciones marcadas en el Dashboard Enterprise y elegir entre:
Aprobar — volver a procesar la imagen, omitiendo el filtro de spam.
Bloquear — confirmar el bloqueo y mantener la transacción fallida.
Banear usuario — aplicar un bloqueo de 24h y +50 de puntuación de spam.