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

将容器映像从代码映射到云

在容器注册表中存储的容器映像或 Kubernetes 群集中运行的容器映像中发现漏洞时,安全管理人员很难追溯到最初生成容器映像的 CI/CD 管道并识别开发者修正所有者。 借助 Microsoft Defender 云安全态势管理 (CSPM) 中的 DevOps 安全功能,可以将云原生应用程序从代码映射到云,以便轻松启动开发者修正工作流,并减少修正容器映像中漏洞所需的时间。

先决条件

  • 已加入 Defender for Cloud 的 Azure 帐户。 如果还没有 Azure 帐户,请免费创建一个帐户

  • Azure DevOps 或载入到 Microsoft Defender 的 GitHub 环境会自动共享并安装在所有连接的 Azure DevOps 组织中。 这样就会自动将任务注入到所有 Azure Pipelines 中,以收集进行容器映射所需的数据。

  • 对于 Azure DevOps,Microsoft Security DevOps (MSDO) 扩展安装在 Azure DevOps 组织中。

  • 对于 GitHub,Microsoft Security DevOps (MSDO) 操作在 GitHub 存储库中配置。 此外,GitHub 工作流必须具有“id-token: write”权限才能与 Defender for Cloud 联合。 有关示例,请参阅此 YAML

  • 已启用 Defender CSPM

  • 必须使用 Docker 生成容器映像,Docker 客户端必须在生成过程中能够访问 Docker 服务器。

将容器映像从 Azure DevOps 管道映射到容器注册表

在 Azure DevOps CI/CD 管道中生成容器映像并将其推送到注册表后,可以使用云安全资源管理器查看该映射:

  1. 登录 Azure 门户

  2. 导航到“Microsoft Defender for Cloud”>“云安全资源管理器”。 容器映像映射最多可能需要 4 小时才能在云安全资源管理器中显示。

  3. 若要查看基本映射,请选择“容器映像”>+>“由代码库推送”。

    屏幕截图显示如何找到容器的基本映射。

  4. (可选)选择“容器映像”旁边的 + 以将其他筛选器添加到查询中,例如“存在漏洞”以仅筛选具有 CVE 的容器映像。

  5. 运行查询后,将看到容器注册表与 Azure DevOps 管道之间的映射。 选择边缘旁边的“...”,查看有关 Azure DevOps 管道运行位置的更多详细信息。

    屏幕截图显示容器映射结果的高级查询。

下面是利用容器映像映射的高级查询的示例。 从向 Internet 公开的 Kubernetes 工作负载开始,可以将所有具有高严重性 CVE 的容器映像追溯到生成容器映像的 Azure DevOps 管道,从而使安全管理人员能够启动开发者修复工作流。

屏幕截图显示基本容器映射结果。

注意

如果你的 Azure DevOps 组织在 2023 年 11 月 15 日之前创建了 Azure DevOps 连接器,请导航到“组织设置”>“扩展”>“共享”并安装容器映像映射修饰器。 如果未看到与组织共享的扩展,请填写以下表单

将容器映像从 GitHub 工作流映射到容器注册表

  1. 确保已将 GitHub 连接器加入到 Defender for Cloud。

  2. 请运行以下 MSDO 工作流:

name: Build and Map Container Image

on: [push, workflow_dispatch]

jobs:
  build:
    runs-on: ubuntu-latest
    # Set Permissions
    permissions:
      contents: read
      id-token: write
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-python@v4
        with:
          python-version: '3.8' 
    # Set Authentication to Container Registry of Choice. 
    # The example below is for Azure Container Registry. Amazon Elastic Container Registry and Google Artifact Registry are also supported. 
   - name: Azure Container Registry Login 
        uses: Azure/docker-login@v1 
        with:
        login-server: <containerRegistryLoginServer>
        username: ${{ secrets.ACR_USERNAME }}
        password: ${{ secrets.ACR_PASSWORD }}
    # Build and Push Image
    - name: Build and Push the Docker image 
        uses: docker/build-push-action@v2
        with:
          push: true
          tags: ${{ secrets.IMAGE_TAG }}
          file: Dockerfile
     # Run Mapping Tool in MSDO
    - name: Run Microsoft Security DevOps Analysis
      uses: microsoft/security-devops-action@latest
      id: msdo

在 GitHub 工作流中生成容器映像并将其推送到注册表后,可以使用云安全资源管理器查看该映射:

  1. 登录 Azure 门户

  2. 导航到“Microsoft Defender for Cloud”>“云安全资源管理器”。 容器映像映射最多可能需要 4 小时才能在云安全资源管理器中显示。

  3. 若要查看基本映射,请选择“容器映像”>+>“由代码库推送”。

    屏幕截图显示基本容器映射。

  4. (可选)选择“容器映像”旁边的 + 以将其他筛选器添加到查询中,例如“存在漏洞”以仅筛选具有 CVE 的容器映像。

  5. 运行查询后,将看到容器注册表与 GitHub 工作流之间的映射。 选择边缘旁边的“...”,查看有关 GitHub 工作流运行位置的更多详细信息。

下面是利用容器映像映射的高级查询的示例。 从向 Internet 公开的 Kubernetes 工作负载开始,可以将所有具有高严重性 CVE 的容器映像追溯到生成容器映像的 GitHub 存储库,从而使安全管理人员能够启动开发者修复工作流。

屏幕截图显示基本容器映射结果。

后续步骤