每次遇到資安相關議題,我就會曹操上身,進入猜忌多疑模式。(我想起上回在家裡實施無線路由器連線裝置 MAC 位址定期盤點,搞到全家人緊張兮兮的故事) 面對需要提供帳號、密碼、個資的情境,總會猶豫再三。

比起輸入帳號密碼驗證身分,API Key / 存取 Token 通常是更安全的選擇,我們可針對不同用途建立專屬 Key,只賦與必要存取範圍的必要作業權限,降低外流風險。同時,由於每支 Key 只應用在少數地方,更新工程較小,故可設定較短效期,時常註銷換新,進一步提高安全性。

最近有個需求,我要在 Linux 環境修改及編譯 Github 專案,需登入 Github 帳號 Push 修改結果。Github 在 2021 年已改為 Git 操作一律要用 OATH / Personal Access Token (PAT) 等 Token 方式登入 (註:Git Credential Manager 是以 OAuth 形式進行 2FA 雙因子驗證後儲存身分驗證,不需手動產生 PAT 參考),由於在 Linux 終端機環境沒法像 Windows / macOS 靠 Credential Manager 開啟瀏覽器登入 Github,手動產生 PAT 當成密碼使用感覺單純些,而在查資料過程我發現好東西 - Fine-Grained Personal Access Tokens for Github

Github 於 2022 推出可微調 PAT,最大的好處是能限定 PAT 可取存的 Repository 範圍,並可個別指定超過 50 種存取權限,設為 No Access、Read 或 Read and Write,甚至做到只能讀 Issue 不能看 Repository 內容,落實「只開放最小必要權限」的資安原則,我喜歡。

可微調 PAT 位於 Github 設定介面的 Settings / Developer settings / Fine-grained tokens 選單,Fine-grained personal access tokens 設定頁面 如下:

按下 Generate new token,可建立新 Token:

設定介面選項多到嚇人,但設定其實不複雜。重點是先選取可存取的 Repository [1] 及要授與的權限[2]。權限項目多到眼花撩亂,但如果只是想 pull/commit/push 參與專案維護,勾選 Contents 有 Read and Write 權限即可,另外有個 Metadata Read-Only 權限為必選,只需這兩項 [3] 權限就夠了。

按下【Generate token】會得到 github_pat_xxxxx... 格式的編碼字串,它可以在需要輸入 Github 帳號密碼的場合替代密碼使用,對指定 Repository 進行 pull / push。

在 Linux 平台可使用以下指令清除登入狀態,再設定帳密快取時間,省下每次 pull/push 都要重新登入的麻煩。

# 清除登入狀態 (for Linux)
git config --global --unset credential.helper
# 設定快取記憶密碼時間(單位是秒),108000 是 30 天
git config --global credential.helper 'cache --timeout=108000'

簡單實測,我先清除登入狀態[1],一開始 PAT 設定的 Repository 不包含 lyric-crawler,使用上面說的 github_pat_xxxxx... PAT 作為密碼 [2] 登入,會得到 invalid credentials 及 Authentication failed 錯誤 [3],此時修改 PAT 的可存取 Repository 清單納入 lyric-crawler,重新用同一 PAT 登入 [4],這次就 pull 成功了。以此驗證可微調 PAT 確實能精準控制 Token 可存取的 Repository 項目。

如此,我們便能為特定 Repository 建立專屬 PAT,即便 Token 外流或被盜用,風險也僅止於該 Repository,用起來更安心。

This blog post explains the benefits of using Fine-Grained Personal Access Tokens (PAT) for GitHub over traditional passwords, emphasizing improved security and granularity. This post provides a detailed guide on generating and using PATs in a Linux environment to manage GitHub repositories securely.


Comments

Be the first to post a comment

Post a comment