¿Qué es lo que no te gusta de Google Cloud Firestore?
Fuimos hackeados, y nuestro número de lecturas se disparó literalmente por miles de millones de lecturas en un corto período, nuestra factura se disparó por miles de dólares y como no pudimos explicar esto a nuestros interesados, tuvimos que cerrar el desarrollo y nuestros trabajos son menos estables que antes.
Configuramos alertas y cuotas en nuestra API, pero las lecturas eludieron la API y así nos alertaron cuando apareció nuestra factura; si tuviéramos nuestro tiempo de nuevo, habríamos encontrado una manera de establecer alertas en las lecturas de Firevase en sí, pero habíamos operado con la premisa de que las lecturas habrían sido a través de nuestras APIs.
Nuestro equipo de seguridad nos aconsejó que el requisito de incluir el archivo de credenciales de Google en nuestra aplicación de Android (para que la aplicación sepa el punto final a usar) significaba que nuestro punto final de Firestore estaba abierto para que cualquiera lo viera, por lo que confiábamos en que las reglas funcionaran. Estábamos seguros de que eso estaba bien y que tener reglas en su lugar mitigaría estos riesgos.
Lo que experimentamos fue que un agente malicioso, sin obtener ningún beneficio propio, encontró una manera de destrozar nuestro servicio y aumentar nuestra factura.
Por si ayuda a alguien, nuestras reglas están abajo. Estas no funcionaron y de repente nos enfrentamos a una factura masiva que ha dañado enormemente la reputación de nuestra unidad de negocio dentro de nuestra organización.
No hemos recibido (hasta la fecha, han pasado unos 20 días desde que se notó el ataque) ninguna asistencia útil de Google para rastrear cómo funcionó el ataque, pero nuestro equipo de seguridad supone que alguien logró fingir que sus solicitudes se originaban desde nuestro dominio.
Usamos autenticación de Microsoft; nuestro producto estaba dirigido a clientes empresariales, y habíamos probado con éxito la seguridad con cuentas no autenticadas y cuentas autenticadas fuera de nuestro dominio.
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth != null && request.auth.token.email.matches('.*@["nuestro dominio"]);
}
}
} Reseña recopilada por y alojada en G2.com.