我们使用机器学习技术将英文博客翻译为简体中文。您可以点击导航栏中的“中文(简体)”切换到英文版本。
使用 亚马逊云科技 CodeBuild 平衡监管和敏捷性
简介
在我的职位上,我经常与客户进行对话,这些客户希望强制执行安全和治理最佳实践,同时为开发人员提供快速创新所需的灵活性和敏捷性。当您采用
背景
在我探讨这个场景之前,让我讨论一下所涉及的典型角色——平台工程师和开发人员。传统上,运营团队负责设计、部署、配置和维护构成 IT 基础架构的不同组件的过程。另一方面,开发团队负责设计、开发、部署和维护在底层 IT 基础架构上运行的应用程序的过程。在这个模型中,有明确的职责分工。但是,随着
DevSecOps 以 DevOps 为基础,促进在软件开发生命周期的早期引入安全控制。安全团队定义了在整个过程中纳入安全控制措施的最佳实践。这些控制措施通常是在 CI/CD 管道中强制执行的。结果,安全团队的角色也发生了变化。安全团队没有进行手动安全审查,而是定义自动控制并确保在管道中实施这些控制,通常由平台工程师创建。但是,平台工程师必须在不妨碍开发人员灵活性的情况下强制执行这些控制。毕竟,DevOps 就是要提高开发生命周期的速度。在这篇文章中,我将讨论如何将安全控制措施分开并将流程分成管道的不同阶段。这使平台工程师能够分阶段实施安全控制,而开发人员可以快速更新他们拥有的阶段。
亚马逊云科技 CodePipeline 是一项完全托管的持续交付服务,可帮助您实现部署管道的自动化。管道由分
在下面的演练中,我将介绍一个包含两个 CodeBuild 操作的简单管道。平台工程师创建管道,包括定义安全控制的构建操作。举个例子,我将使用
草率排练
在本节中,我将扮演平台工程师的角色,引导您完成前面描述的简单管道的创建。为了简单起见,我将使用亚马逊云科技控制台,但是我建议使用
开发团队已经将其代码添加到 CodeCommit 存储库中。除了源代码外,他们还在存储库的根目录中包含了以下
buildspec.yaml
文件。
version: 0.2
phases:
install:
runtime-versions:
python: 3.11
build:
commands:
- pip install -r requirements.txt
- pylint helloworld
- coverage run --branch -m pytest
如你所见,这个编译规范使用了 python 3.11 运行时。它安装需求,运行 linter,并运行具有代码覆盖率的单元测试。鉴于源代码中包含 buildspec.yaml,开发人员可以添加任何他们想要的内容。他们可以完全控制此操作的生成过程。这给了他们很大的自主权和灵活性。
我现在已经准备好开始创建管道了。首先,我将创建一个新的 CodeBuild 项目来运行开发团队的构建,该版本在之前研究的 buildspec.yaml 中定义。我打开
使用源代码中定义的buildspec,我允许开发团队定义构建过程。这使开发人员可以控制权和自主权,使他们能够随着项目随着时间的推移而改变其构建过程。他们不必每次想进行更改时都要求我更新构建命令。此外,由于我将使用所需的安全工具添加第二个构建操作,因此我不必审核他们的 buildspec.yaml 文件的内容。我无需确认开发人员已包含所需的安全工具。
接下来,我将创建另一个 CodeBuild 项目来运行软件组合分析 (SCA)。我返回
使用项目定义中定义的构建规范,我可以使用A
定义了两个生成操作后,我可以创建一个管道来自动化整个构建过程。我按照在
现在,我确信我的安全工具已在管道中正确配置。此外,开发人员保留对构建和测试操作的控制权,允许他们根据需要更改构建步骤。此外,如果我支持许多类似的项目,我可以使用 CloudFormation 或 CDK 来定义管道。这将允许我使用同一个模板部署多个管道,并随着安全标准的发展更新所有管道。显然,我在这篇文章中创建的管道是一个简单的例子。现实世界中的管道可能会定义许多操作。其中一些操作将在项目定义中定义,并由平台工程师管理。其他任务将涉及存储在源代码中并由开发人员管理的 buildspec 文件。查看
清理
结论
随着客户采用 DevSecOps,他们寻求在 CI/CD 管道中平衡治理和灵活性。在这篇文章中,我讨论了如何使用CodeBuild来允许平台工程师配置某些操作,而开发人员配置其他操作。这使您可以确保在不影响开发团队灵活性和敏捷性的前提下适当实施安全控制。要开始使用,请阅读有关
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。