GitHub Azure DevOps 的高级安全性使用静态分析结果交换格式 (SARIF) 文件中的信息在存储库中创建代码扫描警报。 SARIF 文件属性用于填充警报信息,例如警报标题、位置和说明文本。
可以使用多个静态分析安全测试工具(包括 CodeQL)来生成 SARIF 文件。 结果必须使用 SARIF 版本 2.1.0。 有关 SARIF 的详细信息,请参阅 SARIF 教程。
先决条件
类别 | 要求 |
---|---|
权限 | - 若要查看存储库的所有警报的摘要:存储库的 参与者 权限。 - 若要消除高级安全性中的警报: 项目管理员 权限。 - 若要管理高级安全性中的权限:需要成为 项目集合管理员 组的成员,或者将 高级安全性:管理设置 权限设置为 允许。 |
有关高级安全权限的详细信息,请参阅 “管理高级安全”权限。
使用 Azure Pipelines 上传代码扫描分析
若要使用 Azure Pipelines 将非Microsoft SARIF 文件上传到存储库,管道需要使用 AdvancedSecurity-Publish
任务,该任务是与 GitHub Advanced Security for Azure DevOps 捆绑的任务的一部分。 要使用的主要输入参数包括:
-
SarifsInputDirectory
:配置要上传的 SARIF 文件的目录。 预期的目录路径是绝对路径。 -
Category
:(可选)为 SARIF 文件中的结果分配类别。 通过此参数,可以通过多种方式分析同一提交,并使用 GitHub 中的代码扫描视图查看结果。 例如,您可以使用多个工具进行分析,在单存储库中,您可以根据已更改文件的子集分析存储库的不同片段。
以下代码演示了一个与 Microsoft Defender for Cloud 团队所拥有的 Microsoft Security DevOps 任务 的集成示例。
trigger:
- main
pool:
vmImage: ubuntu-latest
steps:
- task: MicrosoftSecurityDevOps@1
inputs:
command: 'run'
categories: 'IaC'
- task: AdvancedSecurity-Publish@1
inputs:
SarifsInputDirectory: '$(Build.ArtifactStagingDirectory)/.gdn/'
结果指纹生成
如果 SARIF 文件不包含 partialFingerprints
,则 AdvancedSecurity-Publish
任务会为你计算 partialFingerprints
字段,并尝试阻止重复的警报。 仅当存储库包含 SARIF 文件和静态分析中使用的源代码时,才能创建 partialFingerprints
高级安全性。 有关防止重复警报的详细信息,请参阅 提供数据来跟踪跨运行的代码扫描警报。
验证工具结果
可以检查 SARIF 属性是否具有支持上传的大小,以及该文件是否与代码扫描兼容。 此外,每个 SARIF 文件中存在的数据对象存在特定限制:
SARIF 数据 | 限度 | 注意 |
---|---|---|
每个文件的运行次数 | 20 | |
每次运行的结果 | 5,000 | 高级安全性将检查安全字段在结果中是否为非空,然后排序以选取前 5,000 个结果。 否则,在结果到达时选择 5,000 个结果。 |
每次运行的规则数 | 没有 | 未来的单次运行限制为 25,000 条规则。 |
每次运行的工具扩展数 | 没有 | 每次运行的工具扩展将来的限制为 100 个。 |
每个结果的位置数 | 没有 | 高级安全将选取前100个结果。 警报接口将仅显示每个结果的第一个位置。 |
每个规则的标记数 | 没有 | 高级安全系统将选取前 10 个。 |
警报限制 | 没有 |
有关排查 SARIF 文件问题的详细信息,请参阅 验证 SARIF 文件。 若要验证 SARIF 文件是否符合高级安全的要求,请参阅 SARIF 验证程序 并选择 Azure DevOps ingestion rules
。