Miksi Apps Script ei tavoita sisäistä sovellustasi VPN:n kautta
Apps Script toimii Googlen verkossa, ei kannettavassa, jossa VPN on. Suunnittele datapolku koneelle, joka lähettää pyynnön.
Kojelauta avautuu kannettavan selaimessa hyvin, mutta sama laskentataulukon skripti epäonnistuu osoitteen tavoittamattomuutta koskevalla virheellä. VPN:n kytkeminen päälle tai pois ei muuta mitään, koska pyyntö ei lähde kannettavasta lainkaan. Apps Script suoritetaan Googlen infrastruktuurissa ja avaa oman yhteytensä sieltä. Tämä yksi seikka ratkaisee koko suunnittelun.
Erottele kaksi kysymystä ennen kuin muutat mitään: mikä kone lähettää pyynnön ja minkä tunnistetiedon vastaanottaja hyväksyy.
Pyyntö ei koskaan ala kannettavaltasi
Selainvälilehti lähettää kannettavasta VPN-sovittimen, sisäisen DNS-liitteen kautta ja yksityiseen aliverkkoon. UrlFetchApp lähettää Googlen hallinnoimalta isännältä, joten se näkee Googlen ratkaisimet, Googlen lähtöosoitteet eikä yhtään split-tunnel-reiteistäsi. Kaksi polkua jakavat laskentataulukkoasiakirjan, eivät verkkosijaintia. Sovelluksen käyttölokissa skriptin yritys näkyy Google-osoitteena eikä VPN-poolin osoitteena, ja se on nopein vahvistus, jonka saat.
Siksi paikalliset korjaukset eivät tee mitään. Kannettavan osoittaminen toiselle ratkaisimelle, VPN-asiakasohjelman uudelleenkäynnistys tai hosts-merkinnän lisääminen muuttaa selaimen polkua ja jättää skriptin polun täsmälleen sellaiseksi kuin se oli.
Mitä se sulkee pois
Vain sisäiseen päätepisteeseen ei pääse Apps Scriptistä, ja IP-sallittujen luettelo on tässä kohdassa heikko korvike pääsynvalvonnalle. Googlen lähtöalueet ovat laajoja, jaettuja muiden asiakkaiden kanssa eikä niitä voi sitoa yhteen skriptiin. UrlFetchApp-viite kertoo, että pyynnöt tulevat Googlen IP-poolista, mikä on väitteen virallinen versio. Sisäisen sovelluksen avaaminen näille alueille päästää sisään liikennettä, jota et voi kohdentaa.
Selainistunnot käyttäytyvät samoin. Kannettavan selaimen eväste tai SSO-istunto ei matkusta pyynnön mukana, joka on tuore HTTPS-asiakasohjelma ilman istuntotilaa. Kaikki, mikä riippuu selaimen SSO-uudelleenohjauksesta, päättyy siihen uudelleenohjaukseen eikä tietoihisi.
Kaksi toteuttamiskelpoista muotoa
Ensimmäinen muoto antaa skriptille hyväksytyn API:n. Julkaise sisäinen palvelu portin takana, joka todentaa kutsujan, ja anna skriptin sitten esittää tunnistetieto, jonka portti hyväksyy, kuten palvelutilin token. Apps Scriptissä se tarkoittaa OAuth2-kirjastoa tai ScriptApp.getOAuthToken()-kutsua sekä kutsujan identiteettien sallittua luetteloa API:n puolella IP-luettelon sijaan.
Toinen muoto kääntää suunnan. Sisäinen työ kysyy yksityiseltä järjestelmältä ja julkaisee hallitun tuloksen Sheetiin, Cloud Storage -objektiin tai BigQuery-tauluun, jota skripti lukee. Cloud Run -työ, paikallinen ajastin tai olemassa oleva ETL-vaihe voivat kaikki olla se työ, eikä minkään niistä tarvitse hyväksyä saapuvaa yhteyttä. Taulukko kuluttaa silloin tietojoukon rajapinnan sijaan.
Kumpi muoto voittaa, riippuu tuoreudesta, kenttätason hallinnasta ja siitä, kenen on voitava auditoida lukija.
Mitä julkaistun tuloksen on sisällettävä
Vastakkaiseen suuntaan kulkeva syöte tarvitsee nimenomaisen sopimuksen: kentät, joita se kuljettaa, päivitysvälin, lukijaryhmän ja sen, mitä tapahtuu, kun sisäinen työ epäonnistuu. Ilman näitä neljää taulukko näyttää hiljaa eilisen luvut. Lisää luotu aikaleimasaraake ja rivimäärä, jotta vanhentunut tai osittainen julkaisu on näkyvissä itse taulukossa ilman, että kukaan avaa lokia.
API-suunta tarvitsee myös sopimuksen: minkä tunnistetiedon portti hyväksyy, mitä scopeja token kuljettaa ja mitkä kutsujan identiteetit ovat sallittuja. 200-vastaus, joka sisältää kirjautumissivun, ei ole onnistunut kutsu, joten tarkista runko eikä vain tilakoodi.
Lue virhe oikealta puolelta
Apps Script ilmoittaa tavoittamattoman isännän osoitteen tavoittamattomuuden poikkeuksena, mikä ei ole selaimen yhteys hylätty -viesti. Portin 403 tarkoittaa, että pyyntö saapui ja tunnistetieto tai käytäntö hylättiin. HTML-kirjautumissivu tarkoittaa, että pyyntö saavutti interaktiivisen kerroksen, jota skripti ei voi suorittaa loppuun. Kolme eri epäonnistumista ja kolme eri omistajaa.
Pidä skriptin loki selaimen tuloksen vieressä sen sijaan, että korvaisit toisen toisella. Jäljelle jäävä kysymys on silloin tavallinen integraatiopäätös: anna sille ympäristölle tarvittava pääsy tai toimita sille hallittu tulos.