昨天 Vibe Coding 圈子發生了一件大事,
話題延燒橫跨了工程師界、麻瓜界、行銷界。
如果他沒刪文的話,原始發文在此:
https://www.facebook.com/share/p/17FKcqBW6K/
如果他刪文了,社群上也有非常多的截圖可以參考😆
這個事件以我的視角來簡述的話就是:
有人不懂 Google AI Studio 的用法,
不小心發佈了一個工具給大家用,衍生了台幣一萬元左右的費用。
而他認為這都是 Google 的錯,大罵了一番。
這個事件激起了各方人士從不同角度的思考。
其中有一些做資訊教育的朋友,
有的慶幸自己課程早有納入相關資安內容,
有的則是開始反思自己的課程是不是要多放一些這種非功能面的教學。
把功能快速開發出來固然重要,
但資安課題卻是一個不能忽略的底線。
所以我今天就決定在我的 GASO 地圖上,
新增更多的資安相關知識點。
並且把一些重點寫進鐵人賽文章裡。
不過仔細一想,資安領域又廣又深,
真的要寫,
不要說 30 天鐵人賽不夠寫了,
寫 300 天都不一定能完整涵蓋。
我就先從新手比較常發問的幾個關鍵開始。
今天先來聊聊「權限最小化(Least Privilege)」原則,
這不僅在 Google Apps Script 是一個重要觀念,
在任何系統都是!
當我們說「權限最小化(Least Privilege)」時,你可以把它想成:只借出必要的那一把鑰匙,不要把全家所有房間的鑰匙都給出去。
GAS(Google Apps Script)每做一件事,都需要相對應的「Scope(存取權限)」。你的目標是:只要求程式「一定需要」的那幾個 Scope,不要圖方便一次要一大包。
當你第一次執行或部署腳本時,Google 會跳出授權畫面,列出像:
.../spreadsheets.readonly
(只能讀取試算表).../gmail.send
(代你寄信).../drive
(完整存取你的雲端硬碟)這些就是 Scope。Scope 越大、風險越高;如果程式或代碼被誤改/被人濫用,資料外洩的範圍就越大。
例:讀取一個 Google Sheet,整理後寄出一封 Email。
→ 需要的權限其實只有:spreadsheets.readonly
+ gmail.send
。
appsscript.json
,加入你要的最小範圍:{
"timeZone": "Asia/Taipei",
"exceptionLogging": "STACKDRIVER",
"oauthScopes": [
"https://www.googleapis.com/auth/spreadsheets.readonly",
"https://www.googleapis.com/auth/gmail.send"
]
}
提醒:不手動指定時,GAS 會「自動偵測」你在程式碼裡用到的服務來決定 Scopes,常常比你實際需要的還多。手動列出可以更精準。
能用 *.readonly
的就用它(如 spreadsheets.readonly
、calendar.readonly
)。
真的要寫入,才改用可寫的(如 spreadsheets
、calendar
)。
https://www.googleapis.com/auth/drive
(完整雲端硬碟存取)。https://www.googleapis.com/auth/drive.file
。drive.metadata.readonly
。script.external_request
UrlFetchApp
會需要 https://www.googleapis.com/auth/script.external_request
。
不需要就不要列;需要時,也在程式碼裡限制只打到特定網域。
調整好 oauthScopes
後:
需求:讀取指定 Sheet 的資料,寄出 Email 摘要。
最小 Scopes:
"oauthScopes": [
"https://www.googleapis.com/auth/spreadsheets.readonly",
"https://www.googleapis.com/auth/gmail.send"
]
為什麼不需要 Drive/Gmail 其他大範圍?
SpreadsheetApp.openById()
只讀資料 → spreadsheets.readonly
就夠。gmail.send
就夠,不必讀收件匣或刪信。有些人為了開發求快,
權限直接整個開下去,
我覺得也不是不行,前提是你完全知道自己在做什麼。
如果你知道當意外發生時,最慘的損害會是什麼,而且你願意承擔這個風險,
那就是個人取捨問題了。
舉例來說,
如果我為了開發一個新專案,
開了一個獨立全新的 Google 帳號,
裡面乾淨的很,沒有個資、沒有敏感資訊,
而且沒有牽動任何付款方式。
如果這個獨立新帳號安全到一個地步是我可以直接把他交給陌生人也不擔心的話,
那我在裡面權限大開、隨便測試,應該也不會怎麼樣……吧?
不過資安領域真的水很深,
我們往往不知道我們不知道什麼,
時時保持謙卑的心,
一邊照著業界 Best Practice 做,一邊學習其中背後的道理,
通常是不會錯的。
一個人瞎搞一通可以走得快,
跟著前輩腳步小心前進才能走得遠。
Google Apps Script 資安小教室,我們明天見!
如果想要看一些我鐵人賽之外的 Google Apps Script 分享,
也歡迎追蹤我的 Threads 和 Facebook