本文是大规模采用 GitHub Advanced Security 系列的一部分。 有关本系列的上一篇文� ,请参阅“第 1 阶段:与推出战略和目� �保持一致”。
准备启用 code scanning
Code scanning 是一项功能,可用于分析 GitHub 仓库中的代� �,以查找安全漏洞和编� �错误。 分析发现的任何问题都显示在 GitHub Enterprise Server 中。 有关详细信息,请参阅“关于代� �扫描”。
在数百个存储库中推出 code scanning 可能很困难,尤其是在效率低下时。 遵循这些步骤将确保推出既高效又成功。 准备期间,� 将与� 的团队合作,使用自动化来收集有关存储库的数据,并启用 code scanning。
让团队为 code scanning 做好准备
首先,让团队准备好使用 code scanning。 使用 code scanning 的团队越多,推动修正计划并监视推出进度所需的数据就越多。 在此阶段,重点关注利用 API 和运行内部启用事件。
� 的� �心关注应该是让尽可能多的团队准备好使用 code scanning。 � 也可以鼓励团队进行适当的修正,但我们建议在此阶段优先启用和使用 code scanning 而不是修复问题。
收集有关存储库的信息
可以以编程方式收集有关存储库中使用的各种编程语言的信息,然后使用这些数据在使用同一语言的所有存储库上启用 code scanning,并使用 GitHub Enterprise Server 的 GraphQL API。
注意:要在不手动运行本文所述的 GraphQL 查询的情况下收集这些数据,可以使用我们的公开工具。 有关详细信息,请参阅“ghas-enablement 工具”存储库。
如果要从贵公司旗下多个组织的存储库中收集信息,可以使用以下查询来获取这些组织的名称,然后将这些信息提供给存储库查询。 将 OCTO-ENTERPRISE 替换为贵公司名称。
query {
enterprise(slug: "OCTO-ENTERPRISE") {
organizations(first: 100) {
totalCount
nodes {
name
}
pageInfo {
endCursor
hasNextPage
}
}
}
}
� 可以通过在组织级别按语言整理存储库来� �识哪些存储库使用哪些语言。 可以修改以下示例 GraphQL 查询,将 OCTO-ORG 替换为组织名称。
query {
organization(login: "OCTO-ORG") {
repositories(first: 100) {
totalCount
nodes {
nameWithOwner
languages(first: 100) {
totalCount
nodes {
name
}
}
}
pageInfo {
endCursor
hasNextPage
}
}
}
}
有关运行 GraphQL 查询的详细信息,请参阅“使用 GraphQL 形成调用”。
然后,将 GraphQL 查询中的数据转换为可读� �式,例如表。
语言 | 存储库数 | 存储库名称 |
---|---|---|
JavaScript (TypeScript) | 4212 | 组织/存储库 组织/存储库 |
Python | 2012 | 组织/存储库 组织/存储库 |
Go | 983 | 组织/存储库 组织/存储库 |
Java | 412 | 组织/存储库 组织/存储库 |
Swift | 111 | 组织/存储库 组织/存储库 |
Kotlin | 82 | 组织/存储库 组织/存储库 |
C | 12 | 组织/存储库 组织/存储库 |
可以从此表中筛选掉 GitHub Advanced Security 当前不支持的语言。
如果存储库具有多种语言,可以针对 GraphQL 结果设置� �式,如下表所示。 筛选掉不受支持的语言,但保留具有至少一种受支持语言的所有存储库。 可以在这些存储库上启用 code scanning,所有受支持的语言都将被扫描。
语言 | 存储库数 | 存储库名称 |
---|---|---|
JavaScript/Python/Go | 16 | 组织/存储库 组织/存储库 |
Rust/TypeScript/Python | 12 | 组织/存储库 组织/存储库 |
了解哪些存储库正在使用哪些语言有助于� 在第 3 阶段确定试点计划的候选存储库,且有助于� 准备好在第 5 阶段中以一次一种语言的方式在所有存储库中启用 code scanning。
为设备启用 code scanning
继续试点计划并在整个企业中推出 code scanning 之前,必须先为设备启用 code scanning。 有关详细信息,请参阅“为设备配置代� �扫描”。
准备启用 secret scanning
如果项目与外部服务通信,它可能使用令牌或私钥进行身份验证。 如果将密� �检入仓库,则对仓库具有读取权限的任何人都可以使用该密� �以您的权限访问外部服务。 Secret scanning 将扫描 GitHub 存储库中所有分支的整个 Git 历史记录以获取机密,然后提醒� 的推送。 有关详细信息,请参阅“关于机密扫描”。
启用 secret scanning 时的注意事项
GitHub Enterprise Server 的 secret scanning 功能与 code scanning 略有不同,� 为它不需要针对每种编程语言或每个存储库进行特定配置,并且总体来说只需较少配置即可开始使用。 这意味着可以轻松在组织级别启用 secret scanning,但在组织级别单击“全部启用”并勾选“为每个新存储库自动启用 secret scanning”选项会产生以下应留意的下游影响 :
- 许可证使用情况
即使没有人正在使用代� �扫描,为所有存储库启用 secret scanning 仍将使用所有许可证。 除非计划增� 组织中的活跃开发人员人数,否则该操作很好。 如果未来� 个月活跃开发人员人数很可能增大,� 可能会超出许可证上限,� 法在新创建的存储库上使用 GitHub Advanced Security。 - 最初检测到的大量机密
如果在大型组织上启用 secret scanning,请做好准备,� 将发现大量机密。 有时这会让组织感到震惊,并触发警报。 如果想在所有存储库中同时启用 secret scanning,请计划如何响应整个组织的多个警报。
可以为各个存储库启用 Secret scanning。 有关详细信息,请参阅“为存储库配置 secret scanning”。 如上所述,还可以为组织中的所有存储库启用 Secret scanning。 有关为所有存储库启用的详细信息,请参阅“为组织管理安全和分析设置”。
secret scanning 的自定义模式
Secret scanning 检测大量默认模式,但也可以配置为检测自定义模式,例如基础结构独有的机密� �式或 GitHub Enterprise Server 的 secret scanning 目前不检测的集成商所用的机密� �式。 有关合作伙伴模式支持的机密的详细信息,请参阅“机密扫描模式”。
审� �存储库并与安全和开发团队沟通时,生成机密类型列表,稍后� 将使用这些类型为 secret scanning 配置自定义模式。 有关详细信息,请参阅“为机密扫描定义自定义模式”。
有关本系列的下一篇文� ,请参阅“第 3 阶段:试点计划”。