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

识别 CI/CD 工作流中有漏洞的容器映像

本页介绍在你的 GitHub 工作流中构建了基于 Azure 容器注册表的容器映像的情况下,如何使用集成的漏洞扫描来扫描这种容器映像。

若要设置扫描程序,需要启用适用于容器注册表的 Microsoft Defender 和 CI/CD 集成。 当 CI/CD 工作流将映像推送到注册表时,可以查看注册表扫描结果以及 CI/CD 扫描结果摘要。

CI/CD 扫描的发现是对 Qualys 的现有注册表扫描结果的扩充。 Defender for Cloud 的 CI/CD 扫描由 Aqua Trivy 提供支持。

你将获取可跟踪性信息,例如 GitHub 工作流和 GitHub 运行 URL,以帮助识别导致易受攻击映像的工作流。

提示

在注册表扫描中发现的漏洞可能与 CI/CD 扫描的发现结果不同。 造成这些差异的一个原因是注册表扫描是连续的,而 CI/CD 扫描在工作流将映像推送到注册表之前立即进行。

可用性

方面 详细信息
发布状态: 此 CI/CD 集成处于预览状态。
建议仅在非生产工作流上试验此集成。
Azure 预览版补充条款包含适用于 beta 版、预览版或其他尚未正式发布的 Azure 功能的其他法律条款。
定价: 适用于容器注册表的 Microsoft Defender 按定价页中的定价计费
云: 商用云
国家(Azure 政府、Azure 中国世纪互联)

先决条件

若要在 CI/CD 工作流将映像推送到注册表时扫描映像,必须在订阅中启用“适用于容器注册表的 Microsoft Defender”。

设置 CI/CD 工作流的漏洞扫描

在 GitHub 工作流中启用映像的漏洞扫描:

步骤 1。 在 Defender for Cloud 中启用 CI/CD 集成

步骤 2。 将必要的行添加到 GitHub 工作流

步骤 1。 在 Defender for Cloud 中启用 CI/CD 集成

  1. 在 Defender for Cloud 的菜单中,打开“环境设置”。

  2. 选择相关订阅。

  3. 从该订阅的设置页的侧栏中,选择“集成”。

  4. 在出现的窗格中,选择一个要从你的工作流中推送 CI/CD 扫描结果的 Application Insights 帐户。

  5. 将身份验证令牌和连接字符串复制到 GitHub 工作流中。

    Enable the CI/CD integration for vulnerability scans of container images in your GitHub workflows.

    重要

    身份验证令牌和连接字符串用于将所获取的安全遥测与订阅中的资源相关联。 如果你对这些参数使用无效值,将导致遥测丢失。

步骤 2。 将必要的行添加到 GitHub 工作流并执行扫描

  1. 在 GitHub 工作流中,按如下所示启用 CI/CD 扫描:

    提示

    建议在存储库中创建两个机密,以便在 YAML 文件中引用,如下所示。 机密可以按照自己的命名约定进行命名。 在本示例中,将作为 AZ_APPINSIGHTS_CONNECTION_STRING 和 AZ_SUBSCRIPTION_TOKEN 来引用机密。

    重要

    向注册表的推送必须在发布结果之前进行。

    - name: Build and Tag Image
      run: |
        echo "github.sha=$GITHUB_SHA"
        docker build -t githubdemo1.azurecr.io/k8sdemo:${{ github.sha }} .
    
    - uses: Azure/container-scan@v0 
      name: Scan image for vulnerabilities
      id: container-scan
      continue-on-error: true
      with:
        image-name: githubdemo1.azurecr.io/k8sdemo:${{ github.sha }} 
    
    - name: Push Docker image 
      run: |
        docker push githubdemo1.azurecr.io/k8sdemo:${{ github.sha }}
    
    - name: Post logs to appinsights
      uses: Azure/publish-security-assessments@v0
      with: 
        scan-results-path: ${{ steps.container-scan.outputs.scan-report-path }}
        connection-string: ${{ secrets.AZ_APPINSIGHTS_CONNECTION_STRING }}
        subscription-token: ${{ secrets.AZ_SUBSCRIPTION_TOKEN }} 
    
  2. 运行将映像推送到所选容器注册表的工作流。 将映像推送到注册表后,将运行注册表扫描,你可以在 Microsoft Defender for Cloud 中查看 CI/CD 扫描结果以及注册表扫描结果。 运行上述 YAML 文件将在生成系统中安装 Aqua Security 的 Trivy 实例。 Trivy 已获得 Apache 2.0 许可证的许可,并且依赖于数据馈送,其中许多数据馈送都包含自己的使用条款。

  3. 查看 CI/CD 扫描结果

查看 CI/CD 扫描结果

  1. 若要查看发现结果,请打开“建议”页。 如果发现问题,你会看到建议“容器注册表映像应已解决漏洞发现(由 Qualys 提供支持)”。

    Recommendation to remediate issues .

  2. 选择建议。

    “建议详细信息”页随即打开,并且其中包含其他信息。 这些信息包括具有易受攻击映像(“受影响的资源”)的注册表列表以及补救步骤。

  3. 打开“受影响的资源”列表并选择不正常的注册表,以查看其中具有易受攻击映像的存储库。

    Select an unhealthy registry.

    “注册表详细信息”页随即打开,并列出受影响的存储库。

  4. 选择特定的存储库以查看其中具有易受攻击映像的存储库。

    Select an unhealthy repository.

    “存储库详细信息”页随即打开。 它列出了易受攻击的映像以及对发现结果严重性的评估。

  5. 选择特定映像以查看漏洞。

    Select an unhealthy image.

    所选映像的发现结果列表随即打开。

    Image scan results.

  6. 若要详细了解哪些 GitHub 工作流正在推送这些易受攻击的映像,请选择信息气泡:

    CI/CD findings about specific GitHub branches and commits.

后续步骤

详细了解 Microsoft Defender for Cloud 的高级防护计划