Skip to main content

此版本的 GitHub Enterprise 已停止服务 2022-10-12. 即使针对重大安全问题,也不会发布补丁。 为了获得更好的性能、更高的安全性和新功能,请升级到最新版本的 GitHub Enterprise。 如需升级帮助,请联系 GitHub Enterprise 支持

第 2 阶段:准备大规模启用

在此阶段,� 将让开发人员做好准备并收集有关存储库的数据,以确保团队准备就绪,并且� 拥有试点计划和推出 code scanning 和 secret scanning 所需的一切。

本文是大规模采用 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组织/存储库
组织/存储库
Python2012组织/存储库
组织/存储库
Go983组织/存储库
组织/存储库
Java412组织/存储库
组织/存储库
Swift111组织/存储库
组织/存储库
Kotlin82组织/存储库
组织/存储库
C12组织/存储库
组织/存储库

可以从此表中筛选掉 GitHub Advanced Security 当前不支持的语言。

如果存储库具有多种语言,可以针对 GraphQL 结果设置� �式,如下表所示。 筛选掉不受支持的语言,但保留具有至少一种受支持语言的所有存储库。 可以在这些存储库上启用 code scanning,所有受支持的语言都将被扫描。

语言存储库数存储库名称
JavaScript/Python/Go16组织/存储库
组织/存储库
Rust/TypeScript/Python12组织/存储库
组织/存储库

了解哪些存储库正在使用哪些语言有助于� 在第 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 阶段:试点计划”。