GitHub advanced Security for Azure DevOps向Azure Repos添加了GitHub Advanced Security 的安全功能套件,并包含以下功能:
- 机密扫描推送保护:检查代码推送是否包含可公开机密(如凭据)的提交
- 机密扫描存储库扫描:扫描你的存储库并查找意外提交的公开机密
- 依赖项扫描 - 搜索开放源代码依赖项中的已知漏洞(直接和可传递)
- 代码扫描 - 使用 CodeQL 静态分析引擎识别代码级应用程序漏洞,如 SQL 注入和身份验证绕过
可以灵活地为企业提供高级安全性保护,以便为存储库启用适当的保护级别。 GitHub高级安全性适用于Azure DevOps,包括GitHub机密保护和GitHub代码安全性。
机密保护包括以下功能:
- 推送保护,防止机密泄漏在发生之前
- 带有通知的机密扫描警报,以在问题发生前捕捉到潜在的泄露
- 安全概述,提供组织风险和安全保护级别的见解
代码安全性包括以下功能:
- 依赖项警报,用于查找开源依赖项中的漏洞
- CodeQL 扫描,以直接在代码中检测漏洞
- 第三方工具的安全发现
- 安全概述,提供组织风险和安全保护级别的见解
GitHub Azure DevOps 的高级安全性仅适用于 Azure DevOps 服务,特别是适用于代码 Git 存储库。
Azure DevOps 的 GitHub 高级安全性支持 Azure Repos。 若要将 GitHub Advanced Security 与 GitHub 存储库配合使用,请参阅 GitHub Advanced Security。
先决条件
| 类别 | 要求 |
|---|---|
| 权限 | - 若要查看存储库的所有警报的摘要:存储库的 参与者 权限。 - 若要消除高级安全性中的警报:需有项目管理员权限。 - 若要管理高级安全性中的权限:需为项目集合管理员组成员或将高级安全性:管理设置权限设置为允许。 |
有关高级安全权限的详细信息,请参阅 “管理高级安全”权限。
自托管代理的额外先决条件
如果组织使用自承载代理,请将以下 URL 添加到 Allowlist,以便依赖项扫描任务可以提取漏洞咨询数据。 有关详细信息,请参阅 允许的 IP 地址和域 URL。
| 域名网址 | 说明 |
|---|---|
https://governance.dev.azure.com |
对于使用 dev.azure.com 域访问其 DevOps 实例环境的组织 |
https://dev.azure.com |
对于使用 dev.azure.com 域访问其 DevOps 实例的组织 |
https://advsec.dev.azure.com |
对于使用 dev.azure.com 域访问其 DevOps 实例的组织 |
https://{organization_name}.governance.visualstudio.com |
对于使用 {organization_name}.visualstudio.com 域访问其 DevOps 实例的组织 |
https://{organization_name}.visualstudio.com |
对于使用 {organization_name}.visualstudio.com 域访问其 DevOps 实例的组织 |
https://{organization_name}.advsec.visualstudio.com |
对于使用 {organization_name}.visualstudio.com 域访问其 DevOps 实例的组织 |
运行.NET运行时的兼容版本。 截至 2026 年 4 月,当前版本仍.NET 8.x。 如果代理上不存在兼容版本,依赖项扫描生成任务将下载 .NET。
确保将 CodeQL 捆绑包安装到代理上的代理工具缓存中。 可以将
enableAutomaticCodeQLInstall: true变量与 YAML 管道的AdvancedSecurity-Codeql-Init@1管道任务一起使用,或选中Enable automatic CodeQL detection and installation经典管道的复选框。 或者,有关手动安装说明,请参阅 用于 Azure DevOps 的 GitHub 高级安全代码扫描。
启用GitHub高级安全性
可以在组织、项目或存储库级别启用 Advanced Security。 要访问每个扫描工具和结果,需要先启用 Advanced Security。 启用 Advanced Security 后,将阻止任何包含机密的未来推送到已启用此策略的存储库,并且存储库机密扫描将在后台进行。
存储库级加入
- 请进入你的 Azure DevOps project 的 项目设置。
- 选择 Repos>Repositories。
- 选择要为其启用 Advanced Security 的存储库。
- 选择“启用”和“开始计费以激活 Advanced Security”。 对于启用了 Advanced Security 的任何存储库,防火墙图标现在显示在存储库视图中。
项目级启动
- 请进入你的 Azure DevOps project 的 项目设置。
- 选择 Repos。
- 选择“设置”选项卡。
- 选择全部启用,你会看到项目的活跃提交者数量的估计值显示出来。 此操作仅针对现有存储库启用产品。
- 选择“开始计费”,为项目中的每个现有存储库激活 Advanced Security。
- (可选)选择为新存储库自动启用高级安全性,以便将来任何新创建的存储库在创建时即启用高级安全性。 此设置与 “启用所有” 操作 独立存在,必须单独选择。
组织级别的入职培训
- 请转到你在 Azure DevOps 中的 组织设置。
- 选择“存储库”。
- 选择全部启用,会看到组织的活跃提交者数量的估计值显示出来。 此操作仅针对现有存储库启用产品。
- 选择“开始计费”,为组织的每个项目中的每个现有存储库激活 Advanced Security。
- (可选)选择 自动为新项目启用高级安全性,以便将来创建的任何新项目在创建时自动启用高级安全性。 此设置与 “启用所有” 操作 独立存在,必须单独选择。
可以在组织、项目或存储库级别启用机密保护或代码安全性。
存储库级加入
- 请进入你的 Azure DevOps project 的 项目设置。
- 选择 Repos>Repositories。
- 选择要为其启用 Advanced Security 的存储库。
- 切换 机密保护 或 代码安全性。
- 选择 “开始计费”。 现在,任何启用了产品的存储库的存储库视图中会显示一个盾牌图标。
- 若要选择启用 依赖项扫描默认设置,请选择“ 选项 ”并启用“依赖项扫描默认设置”复选框。
项目级启动
- 请进入你的 Azure DevOps project 的 项目设置。
- 选择 Repos。
- 选择“设置”选项卡。
- 选择“全部启用”,然后就会显示您的项目中每个产品的活跃提交者数的估计。 此操作仅为现有存储库启用所选产品。
- 切换 机密保护 或 代码安全性 的所需产品以及所有关联的子功能。
- 选择 “开始计费 ”以激活项目中每个现有存储库的机密保护和/或代码安全性。
- (可选)切换 “自动为新存储库启用高级安全性 ”,以便将来任何新创建的存储库在创建时启用 机密保护 或 代码安全性 。 此设置与 “启用所有” 操作 独立存在,必须单独选择。
组织级别的入职培训
- 请转到你在 Azure DevOps 中的 组织设置。
- 选择“存储库”。
- 选择“ 启用所有 ”,然后查看组织中各个产品的活跃贡献者数量的估计值。 此操作仅为现有存储库启用所选产品。
- 切换 机密保护 或 代码安全性 的所需产品以及所有关联的子功能。
- 选择“开始计费”,为组织的每个项目中的每个现有存储库激活 Advanced Security。
- (可选)切换 “自动为新项目启用高级安全性 ”,以便将来任何新创建的项目在创建时启用 机密保护 或 代码安全性 。 此设置与 “启用所有” 操作 独立存在,必须单独选择。
设置机密扫描
当你打开 Advanced Security 时,将自动启用机密扫描推送保护和存储库扫描。 可以从存储库设置页启用或禁用机密推送保护。
为所选存储库启用“高级安全性”(Advanced Security)后,将自动启动机密扫描。
设置依赖项扫描
若要获取对依赖项扫描功能的访问权限,需要为存储库启用 Code Security 产品。
依赖扫描是一种管道为基础的扫描工具。 结果按存储库聚合。 若要扫描默认分支,可以使用存储库设置页中的“扫描易受攻击的依赖项”设置。 此功能将自动将依赖项扫描任务包含在面向默认分支的任何管道中,或针对默认分支的任何拉取请求生成。
若要进行更高级的设置,或者如果要扫描所有分支,建议将依赖项扫描任务添加到要扫描的所有管道。 有关更多详细信息,请参阅 Azure DevOps 的 GitHub 高级安全功能中的依赖性扫描。
设置代码扫描
若要访问代码扫描功能,需要为存储库启用 代码安全 产品。
代码扫描也是一种基于管道的扫描工具,其中结果按存储库聚合。 可以使用 默认设置 或 高级设置启用代码扫描。 可以根据需求和扫描控制级别在同一组织中同时运行这两个系统。
默认设置 是启用代码扫描的最快方法。 默认安装程序使用Azure Pipelines按计划运行,检测存储库中支持 CodeQL 的语言,并自动配置扫描。 如果存储库中的语言发生更改,扫描配置会自动更新。
代理池和默认设置的扫描计划在组织中所有存储库之间共享。 可以从 CodeQL 默认设置可配置选项下拉列表中的>中配置这些选项。 有关每个选项的更多详细信息,请参阅 “配置默认安装选项”。
通过高级设置 ,可以直接将 CodeQL 管道任务添加到管道,从而完全控制扫描配置。 有关配置高级设置的详细信息,请参阅 “设置代码扫描”。
提示
建议从默认设置开始。 如果需要更好地控制扫描配置(例如不同的代理池、编译语言的自定义生成步骤或跨多个分支进行扫描),则可以在同一组织中运行默认设置和高级设置。 有关详细信息,请参阅 设置代码扫描。
若要生成警报,默认设置按每周计划运行。 任何检测到的漏洞都显示在“高级安全”选项卡中。
设置拉取请求注释
对于依赖项扫描和代码扫描,批注会为拉取请求自动配置,其中构建验证策略适用于您的管道中包含的依赖项扫描和/或代码扫描任务。 有关配置生成验证策略的详细信息,请参阅生成验证。
在扫描源分支(拉取请求)之前,拉取请求注释还需要对默认分支和目标分支进行高级安全扫描。 有关解决拉取请求分支警报的详细信息,请参阅管理有关拉取请求的依赖项扫描警报和管理拉取请求的代码扫描警报。
设置拉取请求状态检查
高级安全状态检查允许在检测到安全漏洞时阻止合并拉取请求。 这些状态检查会评估依赖扫描、代码扫描和机密扫描的结果,并根据这些结果向拉取请求发布状态。
有两种状态检查可用:
-
阻止所有严重和高漏洞 (
AdvancedSecurity/AllHighAndCritical):使用此检查强制要求在合并之前解决存储库中的所有严重性和高严重性警报。 -
阻止新的严重漏洞和高漏洞 (
AdvancedSecurity/NewHighAndCritical):使用此检查防止引入新漏洞,而无需首先修复所有现有漏洞。 此检查需要具有高级安全任务的 生成验证策略 才能扫描 PR 分支。
将状态检查配置为分支策略
若要在合并拉取请求之前要求执行高级安全状态检查,请将其配置为分支策略。 可以为每个存储库或项目设置它们。
- 转到 Project settings>Repos。
- (可选)选择要配置的存储库。
- 选择 “策略 ”,然后选择要保护的分支。 默认情况下,存储库的默认分支将受到保护。
- 如果尚未创建,请添加 生成验证 策略。 这两个状态检查都需要才能正确运行。 在生成验证管道中,如果有多个高级安全任务,请启用
Wait for ProcessingAdvancedSecurity-CodeQL-Analyze 和 AdvancedSecurity-Publish 任务的属性。 - 在 “状态检查”下,选择 + 以添加新状态检查策略。
- 在“状态检查”菜单中,输入AdvancedSecurity作为类型,然后在名称中输入AllHighAndCritical或NewHighAndCritical。 这些选项在首次成功运行包含高级安全任务的管道后显示)。
- 选择 策略要求 (必需或可选),并设置任何其他所需选项。 保留 高级选项 的默认值 - 更改授权标识或要求迭代 ID 会阻止状态检查发布。
- 选择“保存”。
有关配置状态检查策略的详细信息,请参阅 状态检查。
若要禁用高级安全性,当您下次为存储库重新启用高级安全性时,所有警报及其状态将保留在“高级安全性”选项卡中。