Panel sa v prehliadači na notebooku otvorí bez problémov, ale ten istý skript tabuľky zlyhá s chybou nedostupnej adresy. Zapnutie či vypnutie VPN nič nezmení, pretože požiadavka notebook vôbec neopustí. Apps Script beží v infraštruktúre Google a odtiaľ otvára vlastné spojenie. Táto jediná skutočnosť určuje celý návrh.

Pred akoukoľvek zmenou oddeľte dve otázky: ktorý stroj odosiela požiadavku a aké prihlasovacie údaje prijíma príjemca.

Požiadavka nikdy nezačína na vašom notebooku

Karta prehliadača odosiela z notebooku, cez adaptér VPN, internú príponu DNS a do privátnej podsiete. UrlFetchApp odosiela z hostiteľa spravovaného Googlom, takže vidí resolvery Google, výstupné adresy Google a žiadnu z vašich split-tunnel trás. Obe cesty zdieľajú dokument tabuľky, nie sieťové umiestnenie. V prístupovom logu aplikácie sa pokus skriptu zobrazí ako adresa Google, nie ako adresa z fondu VPN, a to je najrýchlejšie potvrdenie, ktoré dostanete.

Preto miestne opravy nič nerobia. Nasmerovanie notebooku na iný resolver, reštart klienta VPN alebo pridanie záznamu do hosts zmení cestu prehliadača a cestu skriptu nechá presne takú, aká bola.

Čo to vylučuje

Na koncový bod dostupný len zvnútra sa z Apps Scriptu nedostanete a zoznam povolených IP je v tejto pozícii slabou náhradou kontroly prístupu. Výstupné rozsahy Google sú široké, zdieľané s ďalšími zákazníkmi a nemožno ich zviazať s jedným skriptom. Referencia UrlFetchApp uvádza, že požiadavky pochádzajú z fondu IP Google, čo je autoritatívna verzia tohto tvrdenia. Otvorenie internej aplikácie týmto rozsahom prepúšťa prevádzku, ktorú nemôžete priradiť.

Relácie prehliadača sa správajú rovnako. Cookie alebo relácia SSO v prehliadači notebooku necestuje s požiadavkou, ktorá je novým klientom HTTPS bez stavu relácie. Všetko, čo závisí od presmerovania SSO v prehliadači, končí na tomto presmerovaní, nie na vašich dátach.

Dve uskutočniteľné podoby

Prvá podoba dáva skriptu schválené API. Zverejnite internú službu za bránou, ktorá overuje volajúceho, a potom nechajte skript predložiť údaj, ktorý brána prijíma, napríklad token servisného účtu. V Apps Scripte to znamená knižnicu OAuth2 alebo ScriptApp.getOAuthToken(), plus zoznam povolených identít volajúceho na strane API namiesto zoznamu IP.

Druhá podoba obracia smer. Interná úloha sa dopytuje privátneho systému a publikuje riadený výsledok do Sheetu, objektu Cloud Storage alebo tabuľky BigQuery, ktorú skript číta. Úloha Cloud Run, miestny plánovač alebo existujúci krok ETL môžu byť touto úlohou a žiadna z nich nemusí prijímať prichádzajúce spojenie. Tabuľka potom spotrebúva dataset namiesto rozhrania.

Ktorá podoba zvíťazí, závisí od čerstvosti, kontroly na úrovni polí a od toho, kto musí vedieť čitateľa auditovať.

Čo musí publikovaný výsledok obsahovať

Tok opačným smerom potrebuje výslovnú zmluvu: polia, ktoré nesie, interval obnovy, skupinu čitateľov a to, čo sa stane, keď interná úloha zlyhá. Bez tých štyroch tabuľka ticho ukazuje včerajšie čísla. Pridajte generovaný stĺpec časovej pečiatky a počet riadkov, aby bol zastaraný alebo čiastočný publikovaný výsledok viditeľný v samotnej tabuľke, bez toho aby niekto otváral log.

Smer API potrebuje tiež zmluvu: aké prihlasovacie údaje brána prijíma, aké scopes token nesie a ktoré identity volajúceho sú povolené. Odpoveď 200, ktorá obsahuje prihlasovaciu stránku, nie je úspešné volanie, preto kontrolujte telo, nie len stavový kód.

Čítajte chybu zo správnej strany

Apps Script hlási nedostupného hostiteľa ako výnimku nedostupnej adresy, čo nie je správa prehliadača o odmietnutom spojení. 403 od brány znamená, že požiadavka dorazila a prihlasovací údaj alebo politika boli odmietnuté. HTML prihlasovacia stránka znamená, že požiadavka dosiahla interaktívnu vrstvu, ktorú skript nedokončí. Tri rôzne zlyhania s tromi rôznymi zodpovednými.

Držte log skriptu vedľa výsledku prehliadača, namiesto toho aby ste jedno nahrádzali druhým. Zostávajúca otázka je potom bežné integračné rozhodnutie: dať tomu prostrediu potrebný prístup alebo mu doručiť riadený výsledok.

Súvisiace články