Repository 最擔心的事情莫過不小心加入 Secret,尤其是 Public Repository,一來可能將伺服器、資料庫或其他服務直接開放讓大眾看光光,二來若處理不當,可能會保存在歷史記錄內,被爬蟲程式找出進而惡意使用,不得不謹慎。為了避免開發者疏忽大意將敏感資料放置 Repository,GitHub 本身加入了 Secret Scanning,若您為 Public Repository 則預設為啟用並對於已知類型的 Secret 進行掃描,避免意外事件而導致機密資訊外洩。
Secret Scanning 強制對 Public Repo 進行啟用(不能關閉);若為 Private Repo,則需要啟用 GitHub Advanced Security (Enterprise 版本)
Secret Scanning 不僅僅對於最新版本或主要分支(Main),甚至對於所有分支與整個 Git 紀錄進行掃描
常見的 Secret 為 token 或 private key,通常用於與外部服務進行溝通,由供應商所提供,通常建議不要儲存於 Repository,而是存在外部專用的安全位置。部分資訊可以參考:GitHub Action YAML 撰寫技巧 - 環境變數(Environment Variables) 與 秘密 (Secrets)
若有開發者提交貢獻時不小心簽入 Repository,Secret Scanning 透過比對會找出該 Secret ,並由其他 Provider 以郵件通知 Repository Owner,Secret 被加入至 Public Repo。
已知的 Secret 如 Azure DevOps Personal Access Token、Databricks Access Token、Google API Key...等,可以參考官方文件 About secret scanning,有提供更多已知類型秘密。
若您的服務也有提供相關的驗證授權機制,可以考慮加入 Secret scanning partner program
注意:下列為危險操作
舉個例子,我們將 Azure DevOps Personal Access Token 加入到 Repo 某個檔案內,過沒多久,Azure DevOps Service 即發初通知告知我,我的 PAT 在某個 GitHub Public Repo 內被掃描出來
另一個例子,是將 GitHub Personal Access Token 加入到 Repo 某個檔案內,過沒多久,GitHub 隨即通知我類似的警告
閱讀完上一篇 GitHub Advanced Security - 程式碼掃描 與本篇文章,應該對於 GitHub 進階安全功能有進一步了解。也如果先前所提到 因為 GitHub 以社群與開源協作 為出發點,所以與其他市面上常見的 DevOps 工具有所不同,很早就將基本安全機制內建於服務中,而不是讓使用者以選擇性方式加入 DevOps 工具中。希望讀者除了熟悉這些安全功能如何使用,也能透過這些既有功能,進一步思考如何在日常開發過程中,避免產生安全漏洞行為出現,才能達到 DevSecOps 的最原始的目的。
若喜歡我的文章,歡迎點 like, 分享與訂閱。
你可以在 Repository 手動加入 .github/secret_scanning.yml 檔案,並透過設定 paths-ignore,來排除掃描特定檔案
paths-ignore:
- "Config/*.config"
https://docs.github.com/en/code-security/secret-scanning/about-secret-scanning