保护 Azure Pipelines

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020

Azure Pipelines 提出了不同的安全挑战。 虽然管道允许你执行脚本或将代码部署到生产环境,但防止它们成为恶意代码的管道至关重要。 与开发团队所需的灵活性和能力平衡安全性至关重要。

注意

Azure Pipelines 是 Azure DevOps Services 套件的一部分,全部构建在 Azure 中的安全基础结构之上。 若要全面了解所有 Azure DevOps Services 的安全概念,建议查看以下资源:

传统上,组织通过严格的锁定强制实施安全性。 代码、管道和生产环境面临严重的访问限制。 虽然此方法在具有有限用户和项目的小型组织中工作良好,但大型组织面临着不同的现实。 由于许多参与者有权访问代码,“假设违规”原则变得至关重要。 它涉及到操作,仿佛对手拥有对存储库的参与者访问权限,这需要增强警惕。

若要实现安全目标,请考虑以下几点:

  • 防止恶意代码执行:

    • 确保管道配置为防止未经授权的恶意代码执行,其中包括以下任务:
      • 限制对敏感机密和凭据的访问。
      • 验证输入参数和参数以防止意外行为。
      • 定期查看和审核管道脚本,了解潜在的安全风险。
      • 实现以下安全做法:
        • 在脚本中使用参数化查询来防止 SQL 注入。
        • 转义参数中的特殊字符以避免 shell 命令注入。
        • 限制管道服务连接的权限。
    • 请考虑使用 YAML 管道,该管道可对执行提供精细的控制,并且不太容易出现安全风险。
  • 缓解横向曝光:

    • 隔离管道,防止组织项目和存储库内的横向移动。
    • 仅限制对每个管道所需的存储库和资源的访问权限。
    • 监视管道活动并设置可疑行为的警报。
    • 查看和更新权限,以尽量减少定期公开。
  • 使用 YAML 管道:

    • YAML 管道在安全性方面具有以下优势:
      • 显式定义管道步骤和依赖项。
      • 管道定义的版本控制。
      • 清除管道配置的可见性。
      • 降低意外配置错误的风险。
      • 代码评审和拉取请求:
        • 像对待任何其他代码一样对待 YAML 管道。
        • 强制拉取请求合并更改以防止恶意步骤。
        • 使用 分支策略 设置此评审过程。
      • 资源访问管理:
        • 资源所有者控制 YAML 管道是否可以访问特定资源。
        • 此安全功能可防止攻击,例如 窃取另一个存储库
        • 审批和检查 为每个管道运行提供访问控制。
      • 运行时参数:
    • 考虑将现有管道迁移到 YAML 格式,以提高安全性和可维护性。

安全性是一个持续的过程,定期评估和更新至关重要。 YAML 管道为 Azure Pipelines 提供最佳安全性。

以下文章概述了有助于开发基于 YAML 的安全管道的建议: