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