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

使用 Defender for Cloud CLI 进行的管道扫描中的 CI/CD

Microsoft Defender for Cloud 命令行接口(Defender for Cloud CLI)允许直接在持续集成和持续部署(CI/CD)工作流中嵌入安全扫描。 CLI 协调安全扫描程序,并且可以在本地为开发人员运行。

关键功能

  • 容器镜像漏洞评估和自动导入至云安全浏览器。
  • 适用于任何 CI 运行程序(Azure Pipelines、GitHub Actions、Jenkins、Bitbucket、GitLab、CircleCI、Travis CI、AWS CodeBuild 等)的统一跨平台 CLI。
  • 集成了拉取请求批注和质量入口的基于标准的 SARIF 输出。
  • 基于令牌的身份验证范围限定为单个 Azure 订阅,用于精细控制或 Azure DevOps 连接器身份验证。

先决条件

  • 已加入 Defender for Cloud 的 Azure 订阅。 如果还没有 Azure 帐户,请免费创建一个帐户
  • 已启用 Defender CSPM。
  • 以下 CI/CD 管道工具之一:Jenkins、BitBucket Pipelines、Google Cloud Build、Bamboo、CircleCI、Travis CI、TeamCity、Oracle DevOps services 或 AWS CodeBuild。
  • 用于本地桌面扫描的 Linux 终端(或 WSL)。
  • 如果使用基于令牌的身份验证,安全管理员有权创建客户端 ID 和机密令牌;如果使用基于连接器的身份验证,则需建立 Azure DevOps 连接器。

身份验证设置

Defender for Cloud CLI 支持两种身份验证方法,以符合企业安全做法。

基于令牌的身份验证

安全管理员在 Microsoft Defender for Cloud (MDC) 门户中创建令牌,并将其配置为 CI/CD 管道或本地终端中的环境变量。 此方法提供跨构建系统的灵活性,并通过订阅实现有针对性的范围确定。

基于连接器的身份验证

基于连接器的身份验证目前仅适用于 Azure DevOps。 在 Azure DevOps 和 Defender for Cloud 之间建立连接器时,身份验证过程会自动进行。 无需将令牌添加到管道。

有关详细步骤和示例,请参阅:

配置 CI/CD 管道

选择与 CI/CD 平台和身份验证方法匹配的配置示例。

Azure DevOps (基于连接器的身份验证)

- task: MicrosoftDefenderCLI@2
    inputs:
      command: 'run'
      scanType: 'image'
      imageName: $(ImageName)
      break: false

GitHub (基于令牌的身份验证)

- name: Download Defender for Cloud CLI
  run: |
    curl -L -o defender "https://aka.ms/defender-cli_linux-x64" && chmod +x defender
- name: Run Defender for Cloud CLI Scan (Built)
  run: |
    #replace image-name with the Container image built      
    ./defender scan image '${{ image-name }}'
  continue-on-error: true
  env:
    DEFENDER_TENANT_ID: ${{ secrets.DEFENDER_TENANT_ID }}
    DEFENDER_CLIENT_ID: ${{ secrets.DEFENDER_CLIENT_ID }}
    DEFENDER_CLIENT_SECRET: ${{ secrets.DEFENDER_CLIENT_SECRET }}

Jenkins (基于令牌的身份验证)

environment {
  DEFENDER_TENANT_ID=credentials('defender-tenant-id')
  DEFENDER_CLIENT_ID=credentials('defender-client-id')
  DEFENDER_CLIENT_SECRET=credentials('defender-client-secret')
} 

stage('Download & Run Defender for Cloud CLI') {
  steps {
    script {
      node {
        sh 'curl -L -o defender "https://aka.ms/defender-cli_linux-x64"'
        sh 'chmod +x defender'
        sh './defender scan image ${IMAGE_NAME}'
      }
    }
  }
}