你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

配置无代理代码扫描(预览版)

Microsoft Defender for Cloud 中的无代理代码扫描为 Azure DevOps 和 GitHub 中的所有存储库提供快速且可缩放的安全覆盖。 无代理代码扫描会自动扫描代码和基础结构即代码(IaC),以识别漏洞和配置错误,而无需对生成或部署管道进行任何更改。 此方法使用单个 Azure DevOps 或 GitHub 连接器简化设置和维护,并提供广泛的覆盖范围、持续见解和可作的安全发现。 它使安全和开发团队能够专注于顺利解决风险,而不会中断开发工作流。

可以自定义要运行哪些扫描程序并确切地定义要包括或排除在扫描中的组织、项目或存储库。

先决条件

角色和权限

  • 若要设置和配置该连接器,请执行以下操作:

    • 项目集合管理员:在 Azure DevOps 中执行初始设置所必需的。
    • 订阅参与者:在 Azure 订阅中创建和配置连接器所必需的。
  • 若要查看安全结果,请执行以下操作:

    • 安全管理员:可以管理安全设置、策略和警报,但无法修改连接器。
    • 安全信息读取者:可以查看建议、警报和策略,但无法进行任何更改。

关键优势

Microsoft Defender for Cloud 中无代理代码扫描的一些主要优势包括:

  • 主动风险管理:在开发过程中尽早识别风险。 这可实现安全编码做法,并在漏洞到达生产环境之前减少漏洞。 
  • 轻松载入:使用最少的配置快速设置,无需更改管道。 
  • 企业级集中式管理:使用单个连接器自动扫描多个存储库中的代码。 这为大型环境提供了广泛的覆盖范围。 
  • 用于快速修正的快速见解:载入后立即接收可操作的漏洞见解。 这允许快速修复并减少曝光时间。 
  • 开发人员友好且无缝:无需变更或直接开发人员介入,能够独立于持续集成和持续部署(CI/CD)管道自主运行。 这允许在不中断开发人员生产力或工作流的情况下进行持续的安全监视。
  • 灵活的覆盖范围和控制:选择运行哪些扫描程序以及扫描哪些内容。 可以默认涵盖所有内容或自定义设置,以包括或排除特定组织、项目或存储库。 这样,就可以将安全覆盖范围与风险配置文件和运营需求相匹配,而无需额外的复杂性。

风险检测功能

无代理代码扫描通过提供针对代码和基础结构即代码模板(IaC)模板的目标安全建议来提高安全性。 这是对通过连接器提供的基础云安全态势管理安全建议的补充。 关键检测功能包括:

为存储库、管道和服务连接提供基础云安全状况管理建议,创建连接器可增强安全性。

扫描工具

无代理代码扫描使用各种开源工具在代码和基础结构即代码 (IaC) 模板中查找漏洞和配置错误:

工具 支持的 IaC/语言 许可证
强盗 Python语言 Apache 2.0
Checkov Terraform IaC 模板、Terraform 计划文件、AWS CloudFormation 模板、Kubernetes 清单文件、Helm 图表文件、Dockerfile、Azure 资源管理器 (ARM) IaC 模板、Azure Bicep IaC 模板、AWS SAM 模板(无服务器应用程序模型)、Kustomize 文件、无服务器框架模板、OpenAPI 规范文件 Apache 2.0
ESLint JavaScript、TypeScript、JSX、TSX 麻省理工学院
模板分析器 ARM IaC 模板、Bicep IaC 模板 麻省理工学院

这些工具支持各种语言和基础结构即代码(IaC)框架,确保跨代码库进行彻底的安全分析。

支持的系统和文件类型

版本控制系统

  • Azure DevOps:完全支持通过 Azure DevOps 连接器连接的存储库。

  • GitHub:完全支持通过 GitHub 连接器连接的存储库。

编程语言

  • Python语言
  • JavaScript/TypeScript

基础结构即代码 (IaC) 平台和配置

IaC 平台 支持的文件类型 说明
Terraform .tf.tfvars 支持 HCL2 语言的 Terraform IaC 模板,包括 .tfvars 中的变量文件。
Terraform 计划 JSON 文件 包括表示所计划的配置的 JSON 文件,用于分析和扫描。
AWS CloudFormation JSON、YAML 文件 支持用于定义 AWS 资源的 AWS CloudFormation 模板。
Kubernetes YAML、JSON 文件 支持用于定义群集中的配置的 Kubernetes 清单文件。
Helm Helm 图表目录结构、YAML 文件 遵循 Helm 的标准图表结构;支持 Helm v3 图表文件。
Docker 称为 Dockerfile 的文件 支持用于容器配置的 Dockerfile。
Azure ARM 模板 JSON 文件 支持 JSON 格式的 Azure 资源管理器 (ARM) IaC 模板。
Azure Bicep .bicep 文件 支持 Bicep IaC 模板,这是适用于 ARM 的特定于域的语言 (DSL)。
AWS SAM YAML 文件 支持适用于无服务器资源的 AWS 无服务器应用程序模型 (SAM) 模板。
Kustomize YAML 文件 支持用于 Kubernetes 自定义 (Kustomize) 的配置文件。
无服务器框架 YAML 文件 在定义无服务器体系结构时支持适用于无服务器框架的模板。
OpenAPI YAML、JSON 文件 支持用于定义 RESTful API 的 OpenAPI 规范文件。

在 Azure DevOps 和 GitHub 组织中启用无代理代码扫描

可以将 Azure DevOps 和 GitHub 组织连接到 Defender for Cloud,以启用无代理代码扫描。 按照 连接 Azure DevOps 组织连接 GitHub 组织 中的步骤开始。

显示了用于启用无代理代码扫描的设置过程的 GIF 图像

自定义扫描程序覆盖范围和范围

对于 GitHub 和 Azure DevOps,可以控制哪些扫描程序运行并确切地指定包含或排除在无代理扫描中的存储库。

显示无代理代码扫描的自定义设置的屏幕截图。

  • 选择扫描程序: 根据需要打开或关闭每个代码和基础结构即代码(IaC)扫描程序。

  • 设置扫描范围: 确定是否要默认扫描所有存储库,或定义自定义范围以包括或排除特定组织、项目或存储库。

    • 排除模式: 扫描除您列出的内容以外的所有内容。
    • 包含模式:仅扫描列出的内容
  • 自定义范围选项:

    • 对于 GitHub,按所有者或存储库设置范围。
    • 对于 Azure DevOps,按组织、项目或存储库设置范围。
  • 自动发现新存储库: 新存储库的自动发现始终仅限于连接器范围中包含的组织或项目。 使用排除模式且未设置自定义范围列表时,默认启用它。 将自动扫描新创建的存储库。

    自动发现功能在包含模式下不可用,因为仅扫描列出的存储库。

    这样,就可以将扫描与安全需求相匹配,在环境增长时使覆盖范围保持最新,并避免不必要的扫描或未扫描区域。

无代理代码扫描的工作原理

无代理代码扫描独立于 CI/CD 管道工作。 它使用 Azure DevOps 或 GitHub 连接器自动扫描代码和基础结构即代码 (IaC) 配置。 你无需修改管道或添加扩展。 此设置允许跨多个存储库进行广泛和连续的安全分析。 结果直接在 Microsoft Defender for Cloud 中处理和显示。

显示了无代理代码扫描的体系结构的示意图。

扫描过程

在连接器中启用无代理代码扫描功能后,扫描过程包括以下步骤:

  1. 存储库发现:系统会在创建连接器后立即自动标识通过 Azure DevOps 和 GitHub 连接器链接的所有存储库,然后每隔 8 小时进行一次。

  2. 代码检索:它从每个存储库的默认(main)分支安全地检索最新代码进行分析,最初是在连接器设置之后,然后每隔 3-4 天检索一次。

  3. 分析:系统使用 Microsoft Defender for Cloud 中托管和更新的一组内置扫描工具,在代码和基础结构即代码模板(IaC)模板中查找漏洞和错误配置。

  4. 结果调查处理:它通过 Defender for Cloud 的后端来处理扫描调查结果,以创建可操作的安全建议。

  5. 结果交付:系统在 Defender for Cloud 中以安全建议的形式显示调查结果,使安全团队能够查看和解决问题。

扫描频率和持续时间

  • 扫描频率
    • 创建连接器时,会评估存储库、管道和服务连接的安全状况,然后每隔 8 小时评估一次。
    • 系统在创建连接器后扫描代码和基础结构即代码 (IaC) 模板中的漏洞,然后每隔 2-4 天扫描一次。
  • 扫描持续时间:扫描通常在 15 到 60 分钟内完成,具体取决于存储库的大小和复杂性。

查看和管理扫描结果

扫描完成后,可以在 Microsoft Defender for Cloud 中访问安全调查结果。

访问结果

  1. 导航到 Microsoft Defender for Cloud 中的安全建议选项卡。

  2. 查看有关 Azure DevOps 和 GitHub 存储库的建议,例如:

  3. 有关这两个平台支持的完整建议,请参阅: Azure DevOps 和 GitHub 安全建议

    建议包括要求多审阅者批准、限制机密访问以及为 Azure DevOps 和 GitHub 环境强制实施最佳做法等项。

    选择任何建议以查看有关受影响文件、严重性和修正步骤的详细信息。

无代理代码扫描与管道内扫描之间的差异

使用 Microsoft Security DevOps 扩展进行的无代理的代码扫描和管道内扫描均可在 Azure DevOps 和 GitHub 中提供安全扫描。 它们满足不同的需求,但相互补充。 下表重点介绍了有助于选择最适合安全性和开发需求的选项的主要差异。

方面 无代理代码扫描 管道内扫描
用例匹配 提供广泛的覆盖范围,对开发人员的干扰最小 提供详细的、管道集成的扫描,并带有可定制的控件
扫描范围和覆盖范围 重点介绍基础结构即代码(IaC)和代码漏洞扫描,每 2-4 天计划一次 提供广泛的覆盖范围,包括二进制文件和容器映像,在每次管道运行时触发
设置和配置 创建连接器后无需进一步设置 需要在每个 CI/CD 管道中手动完成安装和配置
管道集成 独立于 (CI/CD) 管道运行,无需修改工作流 集成在 CI/CD 管道中,需要在每个管道中配置
扫描程序自定义 允许选择要运行的扫描程序 允许使用特定扫描程序、类别、语言、敏感度级别和非 Microsoft 工具进行自定义
结果和反馈 提供对 Defender for Cloud 中的调查结果的访问 在 CI/CD 管道中提供近乎实时的反馈,结果还显示在 Defender for Cloud 中
中断和失败条件 无法中断生成 可配置为基于安全调查结果的严重性中断生成

可伸缩性和性能影响

无代理代码扫描可避免在订阅中创建资源,并且不需要在管道过程中进行扫描。 它使用 Azure DevOps 和 GitHub REST API 来拉取元数据和代码。 这意味着 API 调用计入 Azure DevOps 和 GitHub 速率限制,但不会产生直接数据传输成本。 该服务管理扫描,以确保它们保持在 Azure DevOps 和 GitHub 速率限制内,而不会中断开发环境。 此方法提供了跨存储库的高效、高性能扫描,而不会影响 DevOps 工作流。 有关详细信息,请参阅 Azure DevOps 速率和使用限制GitHub REST API 的速率限制

针对无代理代码扫描的数据安全性、合规性和访问控制

Microsoft Defender for Cloud 的无代理代码扫描服务通过实施严格的数据安全和隐私措施,确保对代码的安全和合规处理:

  • 数据加密和访问控制:系统使用行业标准协议加密传输中的所有数据。 只有经授权的 Defender for Cloud 服务才能访问你的代码。
  • 数据驻留和保留:扫描发生在与 Azure DevOps 和 GitHub 连接器(美国或欧盟)相同的地理位置,以遵守数据保护法。 系统仅在扫描期间处理代码并随后安全地删除代码,且没有长期存储。
  • 对存储库的访问:该服务为 Azure DevOps 和 GitHub 生成安全访问令牌以执行扫描。 此令牌允许检索必要的元数据和代码,而无需在订阅中创建资源。 只有 Defender for Cloud 组件具有访问权限,从而保护数据完整性。
  • 合规性支持:该服务遵守用于数据处理和隐私的监管和安全标准,确保按照区域数据保护要求安全地处理和扫描客户代码。

这些措施确保了安全、合规和高效的代码扫描过程,维护了你的数据隐私和完整性。

限制(公共预览版)

在公共预览版阶段,存在以下限制。

  • 无二进制扫描:仅执行代码(SAST)和 IaC 扫描工具。

  • 扫描频率:它在启用后扫描存储库,然后在每 2-4 天后扫描一次。

  • 存储库大小:它将扫描限定于小于 1 GB 的存储库。

  • 分支覆盖范围:扫描仅涵盖默认分支(通常 main)。

  • 工具自定义:你无法自定义扫描工具。