Papan pemuka dibuka dengan baik dalam pelayar pada komputer riba, tetapi skrip hamparan yang sama gagal dengan ralat alamat tidak tersedia. Menghidupkan atau mematikan VPN tidak mengubah apa-apa, kerana permintaan tidak pernah meninggalkan komputer riba. Apps Script berjalan pada infrastruktur Google dan membuka sambungannya sendiri dari sana. Satu fakta itu menentukan keseluruhan reka bentuk.

Pisahkan dua soalan sebelum mengubah apa-apa: mesin mana yang menghantar permintaan, dan kelayakan apa yang diterima penerima.

Permintaan tidak pernah bermula pada komputer riba anda

Tab pelayar menghantar dari komputer riba, melalui penyesuai VPN, akhiran DNS dalaman dan masuk ke subnet peribadi. UrlFetchApp menghantar dari hos yang diuruskan oleh Google, jadi ia melihat penyelesai Google, alamat keluar Google dan tiada satu pun laluan split-tunnel anda. Kedua-dua laluan berkongsi dokumen hamparan, bukan lokasi rangkaian. Dalam log akses aplikasi, percubaan skrip muncul sebagai alamat Google dan bukan alamat kumpulan VPN, dan itulah pengesahan terpantas yang akan anda peroleh.

Sebab itu pembetulan setempat tidak melakukan apa-apa. Mengarahkan komputer riba ke penyelesai lain, memulakan semula klien VPN atau menambah entri dalam hosts mengubah laluan pelayar dan membiarkan laluan skrip tepat seperti asalnya.

Apa yang dikecualikan olehnya

Titik akhir dalaman sahaja tidak dapat dicapai dari Apps Script, dan senarai IP dibenarkan ialah pengganti lemah untuk kawalan akses pada kedudukan ini. Julat keluar Google luas, dikongsi dengan pelanggan lain dan mustahil diikat kepada satu skrip. Rujukan UrlFetchApp menyatakan bahawa permintaan berasal dari kumpulan IP Google, iaitu versi berwibawa bagi dakwaan itu. Membuka aplikasi dalaman kepada julat tersebut menerima trafik yang tidak boleh anda atributkan.

Sesi pelayar berkelakuan sama. Kuki atau sesi SSO dalam pelayar komputer riba tidak bergerak bersama permintaan, yang merupakan klien HTTPS baharu tanpa keadaan sesi. Apa-apa yang bergantung pada ubah hala SSO pelayar berakhir pada ubah hala itu, bukan pada data anda.

Dua bentuk yang boleh dilaksanakan

Bentuk pertama memberi skrip API yang diluluskan. Terbitkan perkhidmatan dalaman di belakang gerbang yang mengesahkan pemanggil, kemudian biarkan skrip mengemukakan kelayakan yang diterima gerbang, seperti token akaun perkhidmatan. Dalam Apps Script itu bermaksud pustaka OAuth2 atau ScriptApp.getOAuthToken(), bersama senarai identiti pemanggil yang dibenarkan di sebelah API dan bukan senarai IP.

Bentuk kedua membalikkan arah. Tugas dalaman menanyakan sistem peribadi dan menerbitkan hasil terkawal ke Sheet, objek Cloud Storage atau jadual BigQuery yang dibaca skrip. Tugas Cloud Run, penjadual setempat atau langkah ETL sedia ada boleh menjadi tugas itu, dan tiada satu pun perlu menerima sambungan masuk. Hamparan kemudian menggunakan set data dan bukan antara muka.

Bentuk mana yang menang bergantung pada kesegaran, kawalan peringkat medan dan siapa yang mesti boleh mengaudit pembaca.

Apa yang mesti terkandung dalam hasil terbitan

Suapan arah songsang memerlukan kontrak yang jelas: medan yang dibawanya, selang penyegaran, kumpulan pembaca dan apa yang berlaku apabila tugas dalaman gagal. Tanpa keempat-empatnya hamparan diam-diam menunjukkan angka semalam. Tambah lajur cap masa yang dijana dan kiraan baris supaya terbitan lapuk atau separa kelihatan dalam hamparan itu sendiri, tanpa sesiapa membuka log.

Arah API juga memerlukan kontrak: kelayakan apa yang diterima gerbang, skop apa yang dibawa token dan identiti pemanggil mana yang dibenarkan. Respons 200 yang mengandungi halaman log masuk bukan panggilan yang berjaya, jadi periksa badan dan bukan hanya kod status.

Baca ralat dari sebelah yang betul

Apps Script melaporkan hos yang tidak dapat dicapai sebagai pengecualian alamat tidak tersedia, yang bukan mesej sambungan ditolak pelayar. 403 dari gerbang bermaksud permintaan tiba dan kelayakan atau dasar ditolak. Halaman log masuk HTML bermaksud permintaan mencapai lapisan interaktif yang tidak dapat diselesaikan skrip. Tiga kegagalan berbeza dengan tiga pemilik berbeza.

Simpan log skrip di sebelah hasil pelayar dan bukan menggantikan satu dengan yang lain. Soalan yang tinggal kemudian ialah keputusan integrasi biasa: beri persekitaran itu akses yang diperlukan, atau hantar hasil terkawal kepadanya.

Artikel berkaitan