GitHub Advanced Security - 秘密扫描 (Secret Scanning)

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。
https://ithelp.ithome.com.tw/upload/images/20210923/2009149454ze5m7LLf.png

已知的 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 内被扫描出来
https://ithelp.ithome.com.tw/upload/images/20210923/20091494L49UzqQmXh.png

另一个例子,是将 GitHub Personal Access Token 加入到 Repo 某个档案内,过没多久,GitHub 随即通知我类似的警告
https://ithelp.ithome.com.tw/upload/images/20210923/20091494NBZ7MrAtni.png


阅读完上一篇 GitHub Advanced Security - 程序码扫描 与本篇文章,应该对於 GitHub 进阶安全功能有进一步了解。也如果先前所提到 因为 GitHub 以社群与开源协作 为出发点,所以与其他市面上常见的 DevOps 工具有所不同,很早就将基本安全机制内建於服务中,而不是让使用者以选择性方式加入 DevOps 工具中。希望读者除了熟悉这些安全功能如何使用,也能透过这些既有功能,进一步思考如何在日常开发过程中,避免产生安全漏洞行为出现,才能达到 DevSecOps 的最原始的目的。

若喜欢我的文章,欢迎点 like, 分享与订阅。


补充:私有储存库排除 Secret Scanning

你可以在 Repository 手动加入 .github/secret_scanning.yml 档案,并透过设定 paths-ignore,来排除扫描特定档案

https://ithelp.ithome.com.tw/upload/images/20210922/20091494QIG0pI334k.png

paths-ignore:
  - "Config/*.config"

参考资料

https://docs.github.com/en/code-security/secret-scanning/about-secret-scanning


<<:  UISearchController 出来挑土豆 Day 18

>>:  Day 17: swiftUI与Coroutine强强联手,迸出新滋味.

Kotlin Android 第3天,从 0 到 ML - 基本语法和基本型态

前言: 简单介绍 kotlin的基本语法和基本型态。 大纲: 变数宣告 变数名称 : 变数型态 = ...

TailwindCSS - 价目表卡片实战 - 登入弹窗开发

这次要来实作一个登入的弹窗效果,以前做弹窗大多是使用 Bootstrap 的弹窗元件或是 ligh...

AAC 转档 MP3

对於AAC 这个音讯格式,可能大多数人都不太熟悉。但是AAC 是 iTunes 里常见的音乐档案格式...

musl libc 简介与其 porting(二)Say hello to my little friend!

今天到了 day3,上次有预告了这次会开始进行RISC-V 32平台的musl libc porti...

javascript流程控制-回圈

while回圈计算1加到100: for回圈计算1加到100: break跟continue的范例:...