Чаму Apps Script не дасягае вашай унутранай праграмы праз VPN
Apps Script працуе ў сетцы Google, а не на ноўтбуку, дзе ўключаны VPN. Праектуйце шлях даных для машыны, якая адпраўляе запыт.
Прыборная панэль добра адкрываецца ў браўзеры на ноўтбуку, а той жа скрыпт табліцы вяртае памылку недаступнасці адраса. Уключэнне і выключэнне VPN нічога не мяняе, бо запыт наогул не пакідае ноўтбук. Apps Script выконваецца ў інфраструктуры Google і адкрывае сваё ўласнае злучэнне адтуль. Гэты адзіны факт вызначае ўвесь дызайн.
Аддзяліце два пытанні, перш чым нешта мяняць: якая машына адпраўляе запыт і якое пасведчанне прымае атрымальнік.
Запыт ніколі не пачынаецца на вашым ноўтбуку
Укладка браўзера адпраўляе з ноўтбука, праз адаптар VPN, унутраны суфікс DNS і ў прыватную падсетку. UrlFetchApp адпраўляе з хоста, якім кіруе Google, таму ён бачыць рэзалверы Google, адрасы выхаду Google і ніводзін з вашых маршрутаў split-tunnel. Два шляхі маюць агульны толькі дакумент табліцы, а не сеткавае месца. У журнале доступу праграмы спроба скрыпта выглядае як адрас Google, а не як адрас з пула VPN, і гэта найхутчэйшае пацвярджэнне, якое вы атрымаеце.
Таму лакальныя выпраўленні нічога не даюць. Пераключэнне ноўтбука на іншы рэзалвер, перазапуск кліента VPN або даданне запісу ў hosts змяняе шлях браўзера і пакідае шлях скрыпта такім, якім ён быў.
Што гэта выключае
Да пункта, даступнага толькі знутры, з Apps Script не дабрацца, а спіс дазволеных IP у гэтым месцы — слабая замена кантролю доступу. Дыяпазоны выхаду Google шырокія, агульныя з іншымі кліентамі і іх немагчыма прывязаць да аднаго скрыпта. Даведка UrlFetchApp сцвярджае, што запыты паходзяць з пула IP Google, і гэта аўтарытэтная версія такога сцвярджэння. Адкрыццё ўнутранай праграмы для гэтых дыяпазонаў пускае трафік, які вы не можаце прыпісаць.
Сесіі браўзера паводзяць сябе гэтак жа. Cookie або сесія SSO у браўзеры ноўтбука не падарожнічае разам з запытам, які з'яўляецца свежым кліентам HTTPS без стану сесіі. Усё, што залежыць ад перанакіравання SSO у браўзеры, сканчаецца на гэтым перанакіраванні, а не на вашых даных.
Дзве працоўныя формы
Першая форма дае скрыпту зацверджаны API. Апублікуйце ўнутраную службу за шлюзам, які аўтэнтыфікуе выклікаючага, і няхай скрыпт прадстаўляе пасведчанне, якое шлюз прымае, напрыклад токен сэрвіснага акаўнта. У Apps Script гэта азначае бібліятэку OAuth2 або ScriptApp.getOAuthToken(), а таксама спіс дазволеных ідэнтычнасцей выклікаючага на баку API замест спісу IP.
Другая форма перавяртае кірунак. Унутраная задача запытвае прыватную сістэму і публікуе кантраляваны вынік у Sheet, аб'ект Cloud Storage або табліцу BigQuery, якую чытае скрыпт. Задача Cloud Run, лакальны планавальнік або існуючы крок ETL могуць быць такой задачай, і ніводная з іх не павінна прымаць уваходнае злучэнне. Тады табліца спажывае набор даных замест інтэрфейсу.
Якая форма пераможа, залежыць ад свежасці, кантролю на ўзроўні палёў і ад таго, хто павінен мець магчымасць аўдыту чытача.
Што павінен змяшчаць апублікаваны вынік
Зваротнаму патоку патрэбен яўны кантракт: палі, якія ён нясе, інтэрвал абнаўлення, група чытачоў і што адбываецца, калі ўнутраная задача падае. Без гэтых чатырох табліца ціха паказвае ўчорашнія лікі. Дадайце згенераваны слупок з адзнакай часу і колькасць радкоў, каб састарэлая або частковая публікацыя была бачная ў самой табліцы, без таго каб хтосьці адкрываў журнал.
Кірунак API таксама патрабуе кантракта: якое пасведчанне прымае шлюз, якія scopes нясе токен і якія ідэнтычнасці выклікаючага дазволеныя. Адказ 200, які змяшчае старонку ўваходу, не з'яўляецца паспяховым выклікам, таму правярайце цела, а не толькі код стану.
Чытайце памылку з правільнага боку
Apps Script паведамляе пра недаступны хост як выключэнне недаступнасці адраса, і гэта не паведамленне браўзера пра адмову ў злучэнні. 403 ад шлюза азначае, што запыт дайшоў і пасведчанне або палітыка былі адхіленыя. HTML-старонка ўваходу азначае, што запыт дасягнуў інтэрактыўнага слоя, які скрыпт не можа завяршыць. Тры розныя збоі з трыма рознымі ўладальнікамі.
Трымайце журнал скрыпта побач з вынікам браўзера, а не замяняйце адно другім. Тады пытанне, якое засталося, — звычайнае інтэграцыйнае рашэнне: даць гэтаму асяроддзю патрэбны доступ або даставіць яму кантраляваны вынік.