Public API pre On Premise data

Zdravim borci,
zisiel by sa mi vas nazor, pripadne skusenosti s nejakym riesenim.

Mam on premise SQL Server databazu pre intranetovy system, ktory je pristupny iba z firemnej siete.
Firma chce spristupnit niektore svoje data (DB views) cez public Web API pre svojich klientov.

Prvy problem je, ze samotne dotazy na databazu su pomerne narocne, takze asi budem dotazy predpocitavat raz denne do nejakych tabuliek.

Druhy problem bezpecnost - vobec sa necitim komfortne s tym, ze otvorim pristup k serverom vo firemnej siete do internetu, navyse do DB (samozrejme cez WebAPI, nie priamo). Napriklad DDos utok, by mohol spravit sarapatu

Hned ma napadol Azure API Gateway s DDos ochranou, ktory by pristupoval k privatnemu on premise REST API, ale to je to tusim drahe. 1000 eur za mesiac, ak sa nemylim, ci?

Druhe riesenie, by bolo ukladat / cachovat si potrebne data v Azure a samotne Web Api by bolo Azure App Service, ktory by uz nemusel liezt do On Premise databazy.
Toto sa da spravit na milion sposobov. Mate nejake odporucania, alebo skusenosti?

Ak budes predpocitavat do tabuliek, tak tie tabulky daj do Azure SQL, ten nie je nejak drahy a nad tym si spravis vlastne API napr cez Azure Functions. Keby tam siel DDOS, tak to odstavi len tu sluzbu, nie celu firemnu db.

V principe ano, mna skor zaujimaju konkretne technicke detaily.

Ako to davat do Azure? Tlacit to tam, alebo tahat?
Uploadovat zakazdym cely resultset (cca 100 000) riadkov, alebo zistovat zmeny?
Preco nie Azure Tables, alebo CosmosDb?

Mozno exituje nejake enterprise riesenie, ktore na zaklade transaction logu zosynchronizuje vybrane tabulky automaticky, alebo co ja viem co.

Co sa tyka bezpecnosti.
Tak RestApi urcite nevystrkuj len tak. Ak ho chces mat on prem, urcite pren predrad napriklad Appache, alebo iny webovy server, ktory ti zabezpeci nejaku ochranu. Napriklad trottling, maximalnu velkost requestov atd… (aby nebolo mozne pretazit databazu).

Ide o to aby komponent pred RestApi spadol skor ako RestApi, alebo odfiltroval utok. Takto zapojenie prevadzkujem uz dlhsie, zatial bez “hekerskych problemov”, ale pred tym je este load balancer a WAF.

Tiez by ti asi pomohlo mat to RestApi autentifikone, kludne aj API klucom, ale neviem ci to use case dovoluje.

Co sa taka hybridneho rienia, Azure mal Azure Relay, ktory umoznil vytunelovat konekciu na Azure serveri s tym, ze ju inicilizovala on-premise strana. Skus pozriet, uz o tom moc prehlad nemam.

Co sa tyka hostovania v Azure, tak mne je na toto sympaticka pouzitie Azure Tables, ale produkcne skunosti s tym nemam.

Ahoj,

my sme na niečo podobné zvažovali Data Factory - Data Integration Service | Microsoft Azure.
Nateraz to riešime tak, že máme AZURE Funkciu, ktorá v určitých časových intervaloch berie dáta z viacerých databáz (mikroslužieb) agreguje ich a ukladá ich do AZURE SQL (niečo sú jednoduché tabuľky a pre niečo máme dimenzie a tabuľky faktov). Dáta nespracovávame všetky ale na základe rowversion (máme poznačené posledne spracované rowversion (Transact-SQL) - SQL Server | Microsoft Docs). Nad tým máme máme postavené authentifikované a autorizované API.

Table storage je fajn, používame ho aj v produkcií. Ale záleží to od toho čo tam chceš ukladať a ako sa na to chceš pýtať. Ak ti to vyhovuje z pohľadu tvojho use case tak by som do toho šiel. Je to lacné a rýchle.

Ak chceš Api “ochrániť” pred DDOS a nechceš odstaviť ani dané Api, tak by som použil rate limiting. Dobré skúsenosti mám s stefanprodan/AspNetCoreRateLimit: ASP.NET Core rate limiting middleware (github.com)