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

Microsoft Defender for Cloud 中的无代理代码扫描

Microsoft Defender for Cloud 中的无代理代码扫描为 Azure DevOps 中的所有存储库提供快速且可缩放的安全性覆盖。 它快速查找代码和基础结构即代码 (IaC) 设置中的漏洞,且无需更改代理或持续集成和持续部署 (CI/CD) 管道。 此方法使用单个 Azure DevOps 连接器简化了设置和维护,并提供广泛的覆盖范围、持续见解和可操作的安全调查结果。 它使安全和开发团队能够专注于顺利解决风险,而不会中断开发工作流。

先决条件

  • 发布状态:公共预览版

  • 支持的用例

  • :Azure 商业云

  • 支持的区域:澳大利亚东部、加拿大中部、美国中部、东亚、美国东部、北欧、瑞典中部、英国南部、西欧

  • 支持的环境:Azure DevOps 连接器

  • 角色和权限

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

    • 项目集合管理员:在 Azure DevOps 中执行初始设置所必需的。
    • 订阅参与者:在 Azure 订阅中创建和配置连接器所必需的。

    若要查看安全结果,请执行以下操作:

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

关键优势

  • 主动风险管理:在开发过程中尽早识别风险。 这支持安全编码做法,并在漏洞到达生产环境之前减少漏洞。
  • 轻松载入:使用最少的配置快速设置,无需更改管道。
  • 企业级集中式管理:使用单个连接器自动扫描多个存储库中的代码。 这针对大型环境提供了广泛的覆盖范围。
  • 用于快速修正的快速见解:载入后立即接收可操作的漏洞见解。 这可实现快速修复并减少曝光时间。
  • 对开发人员友好且无缝:独立于持续集成和持续部署 (CI/CD) 管道运行,无需进行更改,也无需开发人员直接参与。 这允许在不中断开发人员生产力或工作流的情况下进行持续的安全监视。

风险检测功能

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

创建连接器通过为存储库、管道和服务连接提供一组基本的安全建议来增强安全性。

扫描工具

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

工具 支持的 IaC/语言 许可证
Bandit 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 MIT
模板分析器 ARM IaC 模板、Bicep IaC 模板 MIT
Terrascan Terraform IaC 模板 (HCL2)、Kubernetes 清单文件 (YAML/JSON)、Dockerfile、AWS CloudFormation 模板 (YAML/JSON)、Azure ARM IaC 模板、Helm 图表文件 (v3)、Kustomize 文件 Apache 2.0

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

支持的平台和文件类型

版本控制系统

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

编程语言

  • 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) 的配置文件。
Serverless Framework YAML 文件 在定义无服务器体系结构时支持适用于无服务器框架的模板。
OpenAPI YAML、JSON 文件 支持用于定义 RESTful API 的 OpenAPI 规范文件。

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

若要将 Azure DevOps 组织连接到 Defender for Cloud 并启用无代理代码扫描,请参阅连接 Azure DevOps 组织中的说明。 下图显示了快速、直接明了的设置过程,指导你完成无缝加入的每个步骤。

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

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

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

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

扫描过程

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

  1. 存储库发现:系统会在连接器创建后立即自动识别通过 Azure DevOps 连接器链接的所有存储库,然后每隔 8 小时进行一次。
  2. 代码检索:它从每个存储库的默认(主)分支中安全地检索最新代码进行分析,首次是在设置连接器后,然后每 3-4 天一次。
  3. 分析:系统使用一组在 Microsoft Defender for Cloud 中管理和更新的内置扫描工具来查找代码和 IaC 模板中的漏洞和配置错误。
  4. 结果调查处理:它通过 Defender for Cloud 的后端来处理扫描调查结果,以创建可操作的安全建议。
  5. 结果交付:系统在 Defender for Cloud 中以安全建议的形式显示调查结果,使安全团队能够查看和解决问题。

扫描频率和持续时间

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

查看和管理扫描结果

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

访问结果

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

  2. 查看建议列表,其中包括以下调查结果:

  3. 选择任何有关详细信息的建议,包括受影响的文件、严重性级别和修正指导。

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

使用 Microsoft 安全 DevOps 扩展的无代理代码扫描和管道内扫描都在 Azure DevOps 中提供安全扫描。 它们满足不同的需求,但协同工作。 下表重点介绍了有助于选择适合你的安全性和开发需求的选项的主要差异。

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

可伸缩性和性能影响

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

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

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

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

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

限制(公共预览版)

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

  • 无二进制扫描:系统仅扫描代码和基础结构即代码 (IaC) 文件。

  • 扫描频率:它每隔 3-4 天扫描一次存储库。

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

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

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