Ինչու 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-ի տեղեկանքը նշում է, որ հարցումները գալիս են Google-ի IP լողավազանից, ինչը այդ պնդման հեղինակավոր տարբերակն է։ Ներքին հավելվածը այդ միջակայքերի համար բացելը ներս է թողնում երթևեկություն, որը չեք կարող վերագրել։
Բրաուզերի սեսիաները նույն կերպ են վարվում։ Նոութբուքի բրաուզերում 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 մուտքի էջը նշանակում է, որ հարցումը հասել է ինտերակտիվ շերտի, որը սկրիպտը չի կարող ավարտել։ Երեք տարբեր ձախողում՝ երեք տարբեր պատասխանատուով։
Պահեք սկրիպտի մատյանը բրաուզերի արդյունքի կողքին՝ մեկը մյուսով չփոխարինելով։ Մնացած հարցն այնուհետև սովորական ինտեգրման որոշում է՝ տալ այդ միջավայրին անհրաժեշտ մուտքը, կամ հանձնել նրան վերահսկվող արդյունք։