Lucrez la un proiect în care clienții fac schimb de date cu servicii. Am proiectat un proxy între serviciu și client care anonimizează datele utilizatorului, astfel încât oricine intră în baza de date să obțină doar o cantitate masivă de date inutile.
Desigur, stratul nostru proxy trebuie să se scaleze, așa că îl punem în spatele unui echilibrator de încărcare folosind k8s.
Problema este: Load Balancer este în prezent SPOF (single point of failure) al sistemului nostru. Dacă un atacator îl controlează pentru a încetini traficul și a-l redirecționa către o singură instanță a proxy-urilor noastre, atunci el poate realiza reidentificarea și astfel să compromită întregul serviciu.
Investigăm multe abordări, iar una dintre ele este „no load balancer”. În această arhitectură, fiecare client trebuie să preia de pe un alt server (care este, în modelul nostru, complet de încredere) IP-urile proxy-urilor, apoi alege unul dintre ele aleatoriu. Folosind această tehnică, un atacator ar trebui să controleze un procent mare de clienți pentru a obține reidentificare, ceea ce este mult mai greu. Și întregul s-ar autoechilibra.
Această viziune asupra întregului sistem are un dezavantaj uriaș, deoarece are nevoie de un IP public pentru fiecare instanță de proxy, dar scapă complet de problema principală.
Tehnic, toate acestea sunt fezabile. Dar cum rămâne cu lumea reală? Am foarte puțină experiență în implementarea serviciilor de producție, așa că orice părere este binevenită.