Zašto Apps Script ne može dosegnuti vašu internu aplikaciju preko VPN-a
Apps Script radi na Googleovoj mreži, a ne na prijenosniku s VPN-om. Projektirajte put podataka za stroj koji šalje zahtjev.
Nadzorna ploča lijepo se otvara u pregledniku na prijenosniku, a ista skripta za proračunsku tablicu pada s pogreškom nedostupne adrese. Uključivanje i isključivanje VPN-a ništa ne mijenja jer zahtjev uopće ne napušta prijenosnik. Apps Script izvršava se na Googleovoj infrastrukturi i odande otvara vlastitu vezu. Ta jedna činjenica određuje cijeli dizajn.
Odvojite dva pitanja prije bilo kakve promjene: koji stroj šalje zahtjev i koje vjerodajnice prihvaća primatelj.
Zahtjev nikada ne počinje na vašem prijenosniku
Kartica preglednika šalje s prijenosnika, kroz VPN adapter, interni DNS sufiks i u privatnu podmrežu. UrlFetchApp šalje s hosta kojim upravlja Google, pa vidi Googleove razrješivače, Googleove izlazne adrese i nijednu od vaših split-tunnel ruta. Dva puta dijele dokument proračunske tablice, a ne mrežno mjesto. U zapisu pristupa aplikacije pokušaj skripte pojavljuje se kao Googleova adresa, a ne kao adresa iz VPN skupa, i to je najbrža potvrda koju ćete dobiti.
Zato lokalne popravke ne rade ništa. Usmjeravanje prijenosnika na drugi razrješivač, ponovno pokretanje VPN klijenta ili dodavanje unosa u hosts mijenja putanju preglednika, a putanju skripte ostavlja točno kakva je bila.
Što to isključuje
Do krajnje točke dostupne samo iznutra ne može se doći iz Apps Scripta, a popis dopuštenih IP adresa slab je nadomjestak za kontrolu pristupa na tom mjestu. Googleovi izlazni rasponi široki su, dijeljeni s drugim korisnicima i nemoguće ih je vezati uz jednu skriptu. Referenca za UrlFetchApp navodi da zahtjevi potječu iz Googleovog IP skupa, što je mjerodavna verzija te tvrdnje. Otvaranje interne aplikacije tim rasponima propušta promet koji ne možete pripisati.
Sesije preglednika ponašaju se jednako. Kolačić ili SSO sesija u pregledniku prijenosnika ne putuje sa zahtjevom, koji je svjež HTTPS klijent bez stanja sesije. Sve što ovisi o SSO preusmjeravanju u pregledniku završava na tom preusmjeravanju, a ne na vašim podacima.
Dva izvediva oblika
Prvi oblik daje skripti odobreni API. Objavite internu uslugu iza pristupnika koji provjerava identitet pozivatelja, a zatim neka skripta predstavi vjerodajnicu koju pristupnik prihvaća, poput tokena servisnog računa. U Apps Scriptu to znači biblioteku OAuth2 ili ScriptApp.getOAuthToken(), uz popis dopuštenih identiteta pozivatelja na strani API-ja umjesto popisa IP adresa.
Drugi oblik okreće smjer. Interni posao šalje upit privatnom sustavu i objavljuje kontrolirani rezultat u Sheet, objekt Cloud Storagea ili tablicu BigQueryja koju skripta čita. Cloud Run posao, lokalni planer ili postojeći ETL korak mogu biti taj posao i nijedan od njih ne mora prihvatiti dolaznu vezu. Tablica tada troši skup podataka umjesto sučelja.
Koji oblik pobjeđuje ovisi o svježini, kontroli na razini polja i o tome kome čitatelj mora biti revizijski dostupan.
Što objavljeni rezultat mora sadržavati
Potok u obrnutom smjeru treba izričit ugovor: polja koja nosi, interval osvježavanja, skupinu čitatelja i što se događa kad interni posao ne uspije. Bez tih četiriju tablica tiho prikazuje jučerašnje brojke. Dodajte generirani stupac s vremenskom oznakom i broj redaka kako bi zastarjela ili djelomična objava bila vidljiva u samoj tablici, bez da itko otvara zapisnik.
Smjer API-ja također treba ugovor: koje vjerodajnice prihvaća pristupnik, koje scopes nosi token i koji su identiteti pozivatelja dopušteni. Odgovor 200 koji sadrži stranicu za prijavu nije uspješan poziv, pa provjerite tijelo, a ne samo statusni kod.
Čitajte pogrešku s prave strane
Apps Script prijavljuje nedostupnog hosta kao iznimku nedostupnosti adrese, što nije preglednikova poruka o odbijenoj vezi. 403 od pristupnika znači da je zahtjev stigao i da su vjerodajnice ili pravilo odbijeni. HTML stranica za prijavu znači da je zahtjev stigao do interaktivnog sloja koji skripta ne može dovršiti. Tri različita kvara s tri različita vlasnika.
Držite zapisnik skripte uz rezultat preglednika umjesto da jedno zamjenjujete drugim. Preostalo je pitanje tada obična integracijska odluka: dajte tom okruženju pristup koji mu treba ili mu dostavite kontrolirani rezultat.