将零信任安全性嵌入开发者工作流

作为开发人员,你需要充满自信并安全地快速移动。 克隆代码后,安全需要立即产生。 本文介绍如何使用零信任原则进行开发,以便快速、安全地进行创新。 用于设计和实现应用程序的零信任安全策略和方法包括以下原则:

  • 显式验证。 始终根据所有可用的数据点进行身份验证和授权。
  • 使用最低权限访问。 使用实时和恰好足够的访问权限 (JIT/JEA)、基于风险的自适应策略和数据保护,来限制用户访问。
  • 假定存在安全漏洞。 最大限度地减少影响范围,并对访问进行分段。 验证端对端加密并使用分析来获取可见性、驱动威胁检测并改善防御。

将安全性嵌入工作流有助于:

  • 更快地查明安全漏洞。
  • 提供更安全的开发人员工具。
  • 创建连接以提高安全和开发团队之间的协作。

创建代码时创新和保护工作流

Microsoft 的统一解决方案如下图所示,在 DevOps 和 SecOps 团队之间搭建桥梁,帮助加速和保护代码到云的开发。

关系图显示了构成统一代码到云开发解决方案的技术。

我们的解决方案依赖两个主要组件来保护 DevOps:为开发人员提供支持创新的工具,以及在开发人员创建代码时保护开发人员工作流。 观看 Microsoft Build 2022 中的加速和保护代码到云的开发课程,了解这些组件如何保护开发环境。

实现以下最佳做法,在 Azure 和 GitHub 中配合使用它们以保护开发解决方案。

  • 由于开发人员克隆代码时安全开始,因此通过 Azure 和 GitHub 启用 DevSecOps,以在 DevOps 和 SecOps 团队之间搭建桥梁,并保护开发环境。
  • 使用 Visual StudioVisual Studio Code 为任何开发人员、语言和堆栈提供灵活而强大的开发人员工具。
  • 使用 GitHub CodespacesMicrosoft Dev Box 简化新开发者加入,并使用云中的整个开发生命周期工具更轻松地协作。
  • 包括不再分散到多个位置的代码内置知识产权保护。 帮助你的团队通过 GitHub ActionsAzure Pipelines 随时随地协作、开发、自动化和部署代码。
  • 使用 GitHub Advanced Security,通过代码扫描、机密扫描和依赖项审查,在开发人员工作流中获取安全指南和持续安全反馈。
  • 使用 Microsoft Entra ID 中的身份管理服务,将零信任安全性灌输到整个组织。

将零信任安全性融入开发生命周期

从预提交到提交,直到部署,再到操作和监视,需要在所有开发生命周期阶段都有可用的安全解决方案。

预提交阶段

  • 威胁建模
  • IDE 安全插件
  • 预提交挂钩
  • 安全编码标准
  • 同级评审

85% 的代码缺陷出现在开发预提交阶段,主要是由于人为错误造成的。 通过在 Visual Studio Code、Visual Studio 或 GitHub Codespaces 中编写代码来识别漏洞和保护代码,在提交代码之前专注于安全性。 使用同级评审鼓励安全编码实践。

提交 (CI) 阶段

  • 静态代码分析
  • 安全单元测试
  • 依赖项管理
  • 凭据扫描

在提交阶段,使用广泛的安全方法审查代码(包括静态代码分析),并在将代码签入源代码管理中时扫描代码。 使用凭据扫描(也称为机密扫描或令牌扫描)公开你可能无意中引入到代码库中的凭据。 在通过依赖项审查将其引入环境之前,先捕获不安全的依赖项。

部署 (CD) 阶段

  • 基础结构即代码 (IaC) 扫描
  • 动态安全扫描
  • 云配置检查
  • 安全性验收测试

在部署阶段,查看代码库的总体运行状况,并执行高级安全扫描来识别风险。 执行云配置检查、基础结构代码检查和安全性验收测试,以确保与组织安全目标保持一致。

运行和监视阶段

  • 持续监视
  • 威胁情报
  • 无责备事后调查

在操作和监视阶段,使用持续监视和威胁情报来缓解一段时间内可能继承的总体依赖项漏洞。 执行事后调查,吸取学到的教训并继续迭代 DevOps 周期。

实现依赖项、代码和机密扫描

为了让开发人员更轻松地保护代码,使用本机和自动化功能在整个开发生命周期内提供持续反馈和持续安全功能。 使用 GitHub Advanced Security 依赖项扫描、代码扫描和机密扫描为开发人员和社区提供整体安全性。

依赖项扫描

  • 对依赖项的集成评审
  • 警报和安全更新程序

通过持续依赖项扫描获取依赖项的风险级别并自动修复代码库中易受攻击的依赖项。 作为一个持续的过程,它会以友好的非介入性方式推动开发者朝正确的方向前进。

代码扫描

  • 用于代码扫描的可扩展框架
  • 集成在开发人员工作流中
  • 由行业领先的 CodeQL 引擎提供支持

在生成代码时实现代码扫描,无需其他步骤即可在单独的位置运行。 通过在熟悉的 GitHub 用户体验中查看扫描结果,简化开发生命周期中的早期修复。

机密扫描

  • 扫描公共存储库和专用存储库中泄露的机密
  • 与 40 多个提供商合作
  • 推送保护
    • 从修正进步到预防
    • 检查高置信度机密
    • 通过一个选择启用保护

使用机密扫描来扫描代码,以获得硬编码凭据和令牌。 在推送到代码库之前,推送对机密和令牌的保护扫描。 当开发人员推送代码时检查高置信度机密,当 GitHub 标识机密时阻止推送。

管理和保护工作负荷标识

  • 生命周期管理
  • 访问治理
  • 安全自适应访问

了解工作负荷标识的活动并启用定期清理。 确定谁拥有工作负荷标识以及如何使这些信息在整个组织更改中保持最新。 跟踪上次使用的工作负荷标识、上次颁发的令牌和令牌过期的时间。

为了缓解泄露机密和凭据的可能性,请定期进行访问评审。 要求用户查看其工作负荷标识并移除不必要的访问特权。 让用户报告特权过度和未充分利用的访问特权。 讨论如何保护工作负载标识免遭破坏。 启用条件访问,以确保访问源自预期资源。

使用 GitHub OIDC 和 Microsoft Entra Workload ID 联合身份验证来保护标识

为了进一步保护组织,请将 GitHub OpenID Connect (OIDC) 与 Microsoft Entra Workload Identity 联合身份验证配合使用,并最大程度地减少存储和访问机密的需求。 安全地管理 Azure 服务器主体机密和其他长期云凭据资源,以最大程度地减少由于凭据过期而导致的服务故障时间。 与开发人员平台(如 GitHub Actions)集成,以安全地生成应用。

建议的工作负载联合身份验证工作流如下图所示,包括六个步骤。

关系图演示了工作负载联合身份验证工作流步骤。

  1. 在 Microsoft Entra ID 中设置信任并请求令牌。
  2. 配置 GitHub 工作流以允许操作获取令牌。
  3. GitHub 工作流将请求发送到 Azure ID。
  4. Microsoft Entra ID 验证应用程序上的信任并提取用于验证令牌的密钥。
  5. Microsoft Entra ID 访问并向用户颁发令牌。
  6. 部署操作使用 Microsoft Entra 访问令牌部署到 Azure 中的资源。

观看高级云大使兼 DevOps 实践主管 April Edwards 演示的工作负载联合身份验证工作流。 演示从 Microsoft Build 2022 会话加速和保护代码到云开发的 19:14 标记处开始。

后续步骤

  • 注册 Azure Developer CLI,这是一种开源工具,可缩短在 Azure 上入门所需的时间。
  • 配备 Azure 以信任 GitHub 的 OIDC 作为联合标识。 OpenID Connect (OIDC) 允许 GitHub Actions 工作流访问 Azure 中的资源,而无需将 Azure 凭据存储为长期存在的 GitHub 机密。
  • 使用 Microsoft Entra ID 作为集中式身份管理系统,实施备忘录 22-09 中所述的零信任原则(支持美国第 14028 号行政命令“改善国家网络安全”)。
  • 使用 Azure DevOps 加速和保护代码,通过工具为开发人员提供最快速、最安全的云的代码到体验的代码。
  • 保护开发者环境帮助你在开发环境中实施零信任原则,并提供最低特权、分支安全性以及信任工具、扩展和集成的最佳做法。
  • 保护 DevOps 环境以实现零信任介绍了保护 DevOps 环境的最佳做法,可防止黑客入侵开发人员计算机、使用恶意脚本感染发布管道,以及通过测试环境获取生产数据的访问权限。
  • 自定义令牌介绍了可以在 Microsoft Entra 令牌中接收的信息。 它说明了如何自定义令牌以提高灵活性和控制度,同时提高最低特权下的应用程序零信任安全性。
  • 在令牌中配置组声明和应用角色介绍了如何使用应用角色定义来配置应用,以及如何将安全组分配给应用角色。 这些方法有助于提高灵活性和控制度,同时提高最低特权下的应用程序零信任安全性。