GH-500 數位教科書 開啟互動版

D2:設定與使用 Secret Protection

D2-O1 啟用與設定 Secret Protection

Secret scanning 掃描的不只是最新的程式碼。它會檢查所有分支的完整 Git 歷史,也會檢查 issue 與 pull request 的文字、Discussions、wiki 與 secret gist,找出寫死在其中的 API 金鑰、密碼與權杖。警示出現在 repository 的 Security and quality 頁籤。

誰需要啟用、誰不用

範圍 條件
公開 repository 自動掃描,不另外收費
組織擁有的私有與 internal repository 需要 GitHub Secret Protection(GitHub Team 或 Enterprise Cloud)
使用者擁有的私有與 internal repository 限於 Enterprise Cloud 的 Enterprise Managed Users,或已啟用 Secret Protection 的 GitHub Enterprise Server

實測註記(單次觀察,2026-11-02): 新建一個公開 repository 後,沒有做任何設定,secret scanning 與 push protection 都已是啟用狀態;non-provider patterns 與 validity checks 則是停用。上表只寫 secret scanning 對公開 repository 自動啟用,沒有提到 push protection;這個預設是 repository 的預設、帳號層級的設定,還是公開 repository 的規則,我沒有查證。詳見實測紀錄。

組織也可以在 Assessments 頁面隨時執行免費的程式碼掃描評估。

樣式類型與有效性檢查

操作示例:為單一 repository 啟用

  1. 開啟 repository 的 Settings;看不到時,從 More 下拉選單進入。
  2. 在側邊欄的 Security and quality 區塊選 Advanced Security。
  3. 在 Secret Protection 右側按 Enable,檢視影響後按 Enable Secret Protection。

啟用 Secret Protection 時,secret scanning 的使用者警示會一併啟用。要一次對多個 repository 啟用,組織擁有者使用 security configurations;步驟見官方的「Enabling security features at scale」,本節不展開。

判斷練習

情境: 你的組織有一批私有 repository,團隊以為「secret scanning 預設就會跑」,所以沒有做任何設定。

解析: 自動掃描只保證公開 repository。組織擁有的私有 repository 需要 GitHub Secret Protection,並在 Advanced Security 設定中啟用;沒有啟用就沒有警示,這不代表沒有外洩。

來源:About secret scanning(GH500-DOC-01)、Enabling secret scanning for your repository(GH500-DOC-06);2026-11-02 以頁面原文比對本節的數字與名稱;其餘敘述為整理,備考前請讀來源原文。

D2-O2 預防機密外洩

Push protection 在 secret 進入 repository 之前就攔截。偵測到疑似 secret 時,推送會被阻擋並說明原因;貢獻者必須檢視被標記的內容、移除敏感資訊後重新推送。這是「預防」,與事後才出現警示的 secret scanning 不同。

涵蓋的途徑與樣式

Push protection 支援四類樣式:partner patterns、generic patterns(私密金鑰、資料庫連線字串等結構化 secret)、custom patterns,以及 AI 偵測的 secret(公開預覽,針對密碼這類沒有固定格式的 secret)。

途徑 支援的樣式
命令列推送 全部四類
GitHub 網頁介面提交 全部四類
上傳檔案到 GitHub 全部四類
REST API 請求 partner、generic、custom;不含 AI 偵測

繞過與其後果

預設下,有寫入權限的人可以選擇繞過,並須從三個理由擇一:

理由 建立的警示
It's used in tests 已關閉,原因為 used in tests
It's a false positive 已關閉,原因為 false positive
I'll fix it later 開啟中(open)

繞過後,警示會出現在 repository、組織與企業的 Security and quality 頁籤,事件寫入稽核日誌,並以電子郵件通知有關注該 repository 的擁有者、security manager 與 repository 管理員,信中附上 secret 連結與繞過理由。

另有「使用者層級的 push protection」:只在 GitHub.com、綁定個人帳號、預設啟用,用來阻止你把 secret 推到公開 repository。除非 repository 層級也啟用了 push protection,否則你繞過它時不會產生警示。

判斷練習

情境: 開發者用 REST API 提交一個密碼,該密碼沒有固定格式,只能靠 AI 偵測辨識。團隊認為「所有途徑都有同樣保護」。

解析: AI 偵測的 secret 在命令列、網頁介面與檔案上傳受保護,但 REST API 不含這一類。評估防護範圍時要按途徑逐項核對,不能用「有啟用 push protection」概括。

來源:About push protection(GH500-DOC-02);2026-11-02 以頁面原文比對本節的數字與名稱;其餘敘述為整理,備考前請讀來源原文。

D2-O3 管理與回應 Secret Protection 警示

審查警示後的流程是:評估、修復,再關閉。關閉時在 Close as 下拉選單選一個原因,可附註解,再按 Close alert。你可以設定警示通知,也可以稽核團隊如何回應;管理員還能控制誰有權限關閉警示(delegated alert dismissal)。

修復的優先順序

  1. 把已提交的 secret 視為已外洩。
  2. 更新所有使用舊憑證的服務;若是 GitHub personal access token,刪除舊的並建立新的。
  3. 依 secret 供應商的不同,檢查安全日誌,確認有無未經授權的活動。
  4. 私有 repository 中外洩的 GitHub personal access token(仍有效或尚未確認者),可通報 GitHub 請其撤銷;此功能目前為公開預覽。通報前宜先輪替憑證,以免撤銷後讓依賴它的工作流程中斷。

官方強調:憑證一旦撤銷,改寫 Git 歷史通常不必要,而且耗時。優先順序是讓憑證失效,不是清除歷史。

判斷練習

情境: 團隊發現某個 API 金鑰留在三個月前的 commit 裡,決定先花兩天用 rebase 把歷史清乾淨,再處理金鑰。

解析: 順序反了。金鑰在被發現的那一刻就應視為已外洩;先撤銷或輪替,才能終止風險。歷史改寫可以之後再評估,且往往不需要。

本節沒有列出「Close as」的完整原因清單:官方該頁面只說明要從下拉選單選一個原因,未列出全部標籤。需要精確標籤時請在實際的警示畫面核對。

來源:Resolving alerts from secret scanning(GH500-DOC-03)、About secret scanning(GH500-DOC-01);2026-11-02 以頁面原文比對本節的數字與名稱;其餘敘述為整理,備考前請讀來源原文。

D2-O4 控制存取、原則與自訂

委派繞過(delegated bypass)

預設下有寫入權限的人都能繞過 push protection。委派繞過把這項權限收斂給指定對象,其他貢獻者的繞過要送審。它提供兩種授權:

永遠可以繞過的對象包括:組織擁有者、security manager、被加入繞過名單的團隊、預設角色或自訂角色,以及擁有細部權限「review and manage secret scanning bypass requests」的自訂角色。不在名單上的貢獻者提出的請求進入審查流程,請求在 7 天後過期。

自訂樣式(custom patterns)

自訂樣式可定義在 repository、組織或企業三個層級。表單包含必填的 Pattern name 與 Secret format(規則運算式),以及 More options(周圍內容與額外比對條件)和 Sample test string(確認樣式符合預期)。

流程是:先 Save and dry run,找出符合項但不建立警示;結果最多顯示 1,000 筆,檢視誤判、調整後再跑。確認後按 Publish pattern。

層級 dry run 範圍
Repository 目前的 repository
組織 全部 repository,或最多 10 個選定的
企業 最多 10 個選定且你擁有管理權限的

發佈後,才能按 Enable 對該樣式啟用 push protection。在組織層級,它只對已啟用 push protection 的 repository 生效;官方提醒,對常見樣式啟用 push protection 可能干擾貢獻者。企業層級的樣式,只有建立者能編輯或執行 dry run。

判斷練習

情境: 你剛寫好一個公司內部權杖的自訂樣式,想立刻讓 push protection 擋住它。

解析: 先 dry run 檢視誤判,確認後 Publish,之後才有 Enable push protection 的選項。跳過 dry run 就發佈,等於讓貢獻者承擔誤判的代價。

本節沒有涵蓋學習指南中的「alert recipients 與 exclusions」:我尚未找到可核對的官方頁面,寫入前不補寫。

來源:About delegated bypass for push protection(GH500-DOC-04)、Defining custom patterns for secret scanning(GH500-DOC-05);2026-11-02 以頁面原文比對本節的數字與名稱;其餘敘述為整理,備考前請讀來源原文。