mcpField
D
defender-for-devops

defender-for-devops

github.com/josiahsiegel安全59162 次安装19 周前更新
代码仓库

关于 defender-for-devops

面向 Azure Pipelines 安全实践者的 Microsoft Defender for DevOps 集成指南,介绍通过 Microsoft Security DevOps 执行多类扫描,并将结果集中呈现在管道和 Defender for Cloud 中。

主要功能

  1. 01集成秘密、代码与依赖项扫描
  2. 02扫描 IaC 配置和容器镜像
  3. 03配置 YAML 扫描类别与构建门禁
  4. 04以 SARIF 格式发布扫描结果
  5. 05排查误报、性能与任务问题

适用场景

  1. 01在提交管道中添加安全扫描
  2. 02按严重性阻止构建
  3. 03检查 Terraform、ARM 或 Kubernetes 配置
  4. 04跨管道查看 Defender for Cloud 发现

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/josiahsiegel/claude-plugin-marketplace --skill defender-for-devops

安装后在 Claude Code 中输入/defender-for-devops确认已加载。

详细介绍

🚨 关键指南

Windows 文件路径要求

重要提示:在 Windows 上始终使用反斜杠表示文件路径

在 Windows 上使用 Edit 或 Write 工具时,必须在文件路径中使用反斜杠(\),而不是正斜杠(/)。

示例:

  • ❌ 错误:D:/repos/project/file.tsx
  • ✅ 正确:D:\repos\project\file.tsx

适用于:

  • Edit 工具的 file_path 参数
  • Write 工具的 file_path 参数
  • Windows 系统上的所有文件操作
文档指南

除非用户明确要求,否则绝不创建新的文档文件。

  • 优先事项:更新现有的 README.md 文件,而不是创建新文档
  • 保持仓库整洁:保持仓库根目录整洁——除非用户另有要求,否则只保留 README.md
  • 风格:文档应简洁、直接且专业——避免使用 AI 生成的语气
  • 用户偏好:仅当用户明确要求提供文档时,才创建其他 .md 文件

Microsoft Defender for DevOps 集成

将 Microsoft Defender for Cloud 安全扫描集成到 Azure Pipelines 的完整指南。

概述

Microsoft Security DevOps(MSDO)提供全面的安全扫描功能:

  • SAST: 静态应用程序安全测试
  • 机密检测: 识别硬编码的机密和凭据
  • 依赖项扫描: 检测易受攻击的软件包
  • IaC 扫描: 基础设施即代码安全分析
  • 容器扫描: 使用 Trivy 评估映像漏洞

Microsoft Security DevOps 扩展

安装:

  1. 从 Azure DevOps Marketplace 安装
  2. 在管道 YAML 中配置
  3. 在 Scans 选项卡中查看结果
  4. 与 Defender for Cloud 集成

扩展功能:

  • 将结果转换为 SARIF 格式
  • 在 Scans 选项卡中显示发现项
  • 集成多种安全工具
  • 提供集中的安全洞察

YAML 集成

基本 MSDO 任务
trigger:
  branches:
    include:
      - main
      - develop

pool:
  vmImage: 'ubuntu-24.04'

stages:
  - stage: Build
    jobs:
      - job: BuildAndScan
        steps:
          - task: UseDotNet@2
            displayName: 'Install .NET SDK'
            inputs:
              version: '8.x'

          - task: DotNetCoreCLI@2
            displayName: 'Build Project'
            inputs:
              command: 'build'
              projects: '**/*.csproj'

          # Microsoft Security DevOps Scan
          - task: MicrosoftSecurityDevOps@1
            displayName: 'Run Microsoft Security DevOps'
            inputs:
              categories: 'secrets,code,dependencies,IaC,containers'
              break: false  # Don't fail pipeline on findings

          # Publish SARIF results
          - task: PublishSecurityAnalysisLogs@3
            displayName: 'Publish Security Analysis Logs'
            inputs:
              ArtifactName: 'CodeAnalysisLogs'

          # Display results in Scans tab
          - task: PostAnalysis@2
            displayName: 'Post Analysis'
            inputs:
              break: false
启用中断构建的高级配置
- task: MicrosoftSecurityDevOps@1
  displayName: 'Security Scanning (Break on Critical)'
  inputs:
    # Scan categories
    categories: 'secrets,code,dependencies,IaC,containers'

    # Break build on severity
    break: true
    breakSeverity: 'critical'  # Options: critical, high, medium, low

    # Tool configuration
    tools: 'all'  # Or specific: 'credscan,eslint,trivy'

    # Output configuration
    publishResults: true

  continueOnError: false
条件扫描
# Full scan on main, quick scan on branches
- task: MicrosoftSecurityDevOps@1
  displayName: 'Security Scan'
  inputs:
    categories: ${{ if eq(variables['Build.SourceBranch'], 'refs/heads/main') }}:
      value: 'secrets,code,dependencies,IaC,containers'
    ${{ else }}:
      value: 'secrets,code'
    break: ${{ eq(variables['Build.SourceBranch'], 'refs/heads/main') }}

集成的安全工具

1. 机密扫描

替代方案: CredScan 已于 2023 年 9 月弃用 当前方案: GitHub Advanced Security for Azure DevOps 或 MSDO 机密扫描

# MSDO secrets scanning
- task: MicrosoftSecurityDevOps@1
  inputs:
    categories: 'secrets'
    break: true  # Always break on secrets

常见检测到的机密:

  • API 密钥和令牌
  • 数据库连接字符串
  • 云服务提供商凭据
  • SSH 私钥
  • OAuth 令牌
2. 静态代码分析(SAST)
- task: MicrosoftSecurityDevOps@1
  displayName: 'SAST Scan'
  inputs:
    categories: 'code'
    tools: 'eslint,bandit,semgrep'

支持的语言:

  • JavaScript/TypeScript(ESLint)
  • Python(Bandit)
  • Go(gosec)
  • Java(SpotBugs)
  • C#(.NET Security Guard)
3. 依赖项扫描
- task: MicrosoftSecurityDevOps@1
  displayName: 'Dependency Scan'
  inputs:
    categories: 'dependencies'
    tools: 'trivy,govulncheck'

检测内容:

  • 依赖项中的已知 CVE
  • 过时的软件包
  • 许可证合规问题
  • 传递性漏洞
4. 基础设施即代码(IaC)扫描
- task: MicrosoftSecurityDevOps@1
  displayName: 'IaC Security Scan'
  inputs:
    categories: 'IaC'
    tools: 'terrascan,checkov,templateanalyzer'

扫描内容:

  • Terraform 配置
  • ARM 模板
  • Bicep 文件
  • Kubernetes 清单
  • CloudFormation 模板
5. 容器映像扫描
- task: MicrosoftSecurityDevOps@1
  displayName: 'Container Security Scan'
  inputs:
    categories: 'containers'
    tools: 'trivy'

Trivy 扫描内容:

  • 操作系统漏洞
  • 应用程序依赖项
  • 配置错误
  • 映像中的机密
  • 许可证问题

与 Defender for Cloud 集成

启用 Defender for DevOps
# Pipeline automatically sends results to Defender for Cloud
# when MSDO extension is connected

- task: MicrosoftSecurityDevOps@1
  displayName: 'Scan and send to Defender'
  inputs:
    categories: 'all'
    publishResults: true

# Results appear in:
# Defender for Cloud → DevOps Security → Findings

优势:

  • 集中的安全仪表板
  • 跨管道洞察
  • 合规性报告
  • 安全趋势分析
  • 与 Azure Security Center 集成

完整的安全管道示例

trigger:
  branches:
    include:
      - main
      - develop

pool:
  vmImage: 'ubuntu-24.04'

variables:
  - name: breakOnCritical
    value: ${{ eq(variables['Build.SourceBranch'], 'refs/heads/main') }}

stages:
  - stage: SecurityScan
    displayName: 'Security Analysis'
    jobs:
      - job: StaticAnalysis
        displayName: 'Static Security Analysis'
        steps:
          - checkout: self
            fetchDepth: 1

          # Install dependencies
          - task: NodeTool@0
            inputs:
              versionSpec: '20.x'

          - script: npm ci
            displayName: 'Install dependencies'

          # Build application
          - script: npm run build
            displayName: 'Build application'

          # Docker build for container scanning
          - task: Docker@2
            displayName: 'Build Docker image'
            inputs:
              command: 'build'
              Dockerfile: 'Dockerfile'
              tags: '$(Build.BuildId)'

          # Comprehensive security scan
          - task: MicrosoftSecurityDevOps@1
            displayName: 'Microsoft Security DevOps Scan'
            inputs:
              categories: 'secrets,code,dependencies,IaC,containers'
              break: $(breakOnCritical)
              breakSeverity: 'high'
              tools: 'all'

          # Publish SARIF results
          - task: PublishSecurityAnalysisLogs@3
            displayName: 'Publish SARIF Logs'
            inputs:
              ArtifactName: 'CodeAnalysisLogs'
              ArtifactType: 'Container'

          # Post-analysis with results
          - task: PostAnalysis@2
            displayName: 'Security Post Analysis'
            inputs:
              break: $(breakOnCritical)

          # Generate security report
          - script: |
              echo "Security scan completed"
              echo "Results available in Scans tab"
            displayName: 'Security Summary'
            condition: always()

  - stage: Deploy
    dependsOn: SecurityScan
    condition: succeeded()
    jobs:
      - deployment: DeployApp
        environment: 'production'
        strategy:
          runOnce:
            deploy:
              steps:
                - script: echo "Deploying secure application"

高级安全功能(2025 年推出)

路线图功能:

  • 拉取请求构建验证
  • 根据警报严重级别中断管道
  • Advanced Security 仪表板
  • 自定义 CodeQL 查询
  • 与 GitHub Advanced Security 集成

GitHub Advanced Security for Azure DevOps

机密扫描的 MSDO 替代方案:

# Requires GitHub Advanced Security license
# Provides:
# - Secret scanning
# - Code scanning with CodeQL
# - Dependency vulnerability alerts
# - Security overview dashboard

# Configuration in Azure DevOps organization settings
# Scans run automatically on commits and PRs

最佳实践

流水线安全:

  • 在每次提交时运行安全扫描
  • 发现严重/高危问题时中断构建
  • 扫描代码和依赖项
  • 纳入 IaC 安全验证
  • 在推送容器镜像前进行扫描
  • 定期审查发现的问题

配置:

# Recommended configuration
- task: MicrosoftSecurityDevOps@1
  inputs:
    categories: 'secrets,code,dependencies,IaC,containers'
    break: true
    breakSeverity: 'high'  # Adjust based on risk tolerance
    publishResults: true

集成:

  • 在 Azure 门户中启用 Defender for DevOps
  • 配置组织级策略
  • 设置自动通知
  • 创建安全仪表板
  • 建立修复工作流

查看结果

在流水线中:

  1. 转到流水线运行页面
  2. 单击“Scans”选项卡
  3. 按严重程度查看发现的问题
  4. 单击问题以查看详情和修复方法

在 Defender for Cloud 中:

  1. Azure 门户 → Defender for Cloud
  2. DevOps 安全
  3. 查看所有流水线中的发现
  4. 按严重程度、项目、存储库筛选
  5. 跟踪修复进度

故障排除

常见问题:

MSDO 任务失败:

# Enable verbose logging
- task: MicrosoftSecurityDevOps@1
  env:
    MSDO_VERBOSE: true
  inputs:
    categories: 'all'

误报:

# Suppress findings with .gdnconfig file
# In repository root:
{
  "tools": {
    "trivy": {
      "enabled": true,
      "severities": ["CRITICAL", "HIGH"]
    }
  }
}

性能:

  • 缓存工具下载内容
  • 限制分支上的扫描类别
  • 对大型代码库使用并行阶段

资源

评论

支持 Markdown