Mengapa Apps Script tidak bisa menjangkau aplikasi internal Anda lewat VPN
Apps Script berjalan di jaringan Google, bukan di laptop yang memegang VPN. Rancang jalur data untuk mesin yang mengirim permintaan.
Dasbor terbuka dengan baik di browser pada laptop, tetapi skrip spreadsheet yang sama gagal dengan galat alamat tidak tersedia. Menyalakan atau mematikan VPN tidak mengubah apa pun, karena permintaan sama sekali tidak meninggalkan laptop. Apps Script berjalan di infrastruktur Google dan membuka koneksinya sendiri dari sana. Satu fakta itu menentukan seluruh rancangan.
Pisahkan dua pertanyaan sebelum mengubah apa pun: mesin mana yang mengirim permintaan, dan kredensial apa yang diterima penerima.
Permintaan tidak pernah dimulai di laptop Anda
Tab browser mengirim dari laptop, melalui adaptor VPN, sufiks DNS internal, dan masuk ke subnet privat. UrlFetchApp mengirim dari host yang dikelola Google, jadi ia melihat resolver Google, alamat keluar Google, dan tidak satu pun rute split-tunnel Anda. Kedua jalur berbagi dokumen spreadsheet, bukan lokasi jaringan. Di log akses aplikasi, upaya skrip muncul sebagai alamat Google, bukan alamat dari kumpulan VPN, dan itulah konfirmasi tercepat yang akan Anda dapatkan.
Karena itu perbaikan lokal tidak melakukan apa pun. Mengarahkan laptop ke resolver lain, memulai ulang klien VPN, atau menambahkan entri di hosts mengubah jalur browser dan membiarkan jalur skrip persis seperti sebelumnya.
Apa yang tersingkir olehnya
Titik akhir yang hanya internal tidak terjangkau dari Apps Script, dan daftar IP yang diizinkan adalah pengganti lemah untuk kontrol akses pada posisi ini. Rentang keluar Google lebar, dibagi dengan pelanggan lain, dan mustahil diikat ke satu skrip. Referensi UrlFetchApp menyatakan bahwa permintaan berasal dari kumpulan IP Google, yang merupakan versi otoritatif dari klaim itu. Membuka aplikasi internal bagi rentang itu menerima lalu lintas yang tidak bisa Anda atribusikan.
Sesi browser berperilaku sama. Cookie atau sesi SSO di browser laptop tidak ikut bersama permintaan, yang merupakan klien HTTPS baru tanpa status sesi. Apa pun yang bergantung pada pengalihan SSO browser berakhir di pengalihan itu, bukan di data Anda.
Dua bentuk yang bisa dijalankan
Bentuk pertama memberi skrip API yang disetujui. Publikasikan layanan internal di belakang gateway yang mengautentikasi pemanggil, lalu biarkan skrip menyajikan kredensial yang diterima gateway, seperti token akun layanan. Di Apps Script itu berarti pustaka OAuth2 atau ScriptApp.getOAuthToken(), plus daftar identitas pemanggil yang diizinkan di sisi API alih-alih daftar IP.
Bentuk kedua membalik arah. Tugas internal menanyakan sistem privat dan menerbitkan hasil terkendali ke Sheet, objek Cloud Storage, atau tabel BigQuery yang dibaca skrip. Tugas Cloud Run, penjadwal lokal, atau langkah ETL yang sudah ada dapat menjadi tugas itu, dan tidak satu pun perlu menerima koneksi masuk. Spreadsheet lalu mengonsumsi kumpulan data alih-alih antarmuka.
Bentuk mana yang menang bergantung pada kesegaran, kendali tingkat bidang, dan siapa yang harus dapat mengaudit pembaca.
Apa yang harus dimuat hasil terbitan
Umpan arah balik memerlukan kontrak eksplisit: bidang yang dibawanya, interval penyegaran, kelompok pembaca, dan apa yang terjadi ketika tugas internal gagal. Tanpa keempatnya, spreadsheet diam-diam menampilkan angka kemarin. Tambahkan kolom stempel waktu yang dihasilkan dan jumlah baris agar terbitan basi atau sebagian terlihat di spreadsheet itu sendiri, tanpa siapa pun membuka log.
Arah API juga memerlukan kontrak: kredensial apa yang diterima gateway, scopes apa yang dibawa token, dan identitas pemanggil mana yang diizinkan. Respons 200 yang memuat halaman masuk bukan panggilan yang berhasil, jadi periksa isi bodi dan bukan hanya kode status.
Baca galat dari sisi yang benar
Apps Script melaporkan host yang tidak terjangkau sebagai pengecualian alamat tidak tersedia, yang bukan pesan koneksi ditolak milik browser. 403 dari gateway berarti permintaan tiba dan kredensial atau kebijakan ditolak. Halaman masuk HTML berarti permintaan mencapai lapisan interaktif yang tidak bisa diselesaikan skrip. Tiga kegagalan berbeda dengan tiga pemilik berbeda.
Simpan log skrip di samping hasil browser alih-alih menggantikan yang satu dengan yang lain. Pertanyaan yang tersisa lalu menjadi keputusan integrasi biasa: beri lingkungan itu akses yang dibutuhkannya, atau kirimkan hasil terkendali kepadanya.