部署可同时检测多个代码交付项中的安全问题的管道 - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

部署可同时检测多个代码交付项中的安全问题的管道

由本杰明·莫里斯 (AWS)、狄娜·奥杜姆 ()、以赛亚·席斯勒 (AWS)、Sapeksh Madan (AWS) 和蒂姆·哈恩创作 () AWS AWS

代码存储库:简单的代码扫描管道

环境:PoC 或试点

技术:安全、身份、合规; DevOps

AWS服务:AWS CloudFormation; AWS CodeBuild; AWS CodeCommit; AWS CodePipeline

Summary

S imple Code Scanning Pipeline (SCSP) 提供双击创建代码分析管道,该管道并行运行行业标准的开源安全工具。这使开发人员能够检查其代码的质量和安全性,而无需安装工具,甚至无需了解如何运行它们。这可以帮助您减少代码交付中的漏洞和错误配置。它还可以减少您的组织在安装、研究和配置安全工具上花费的时间。

以前SCSP,使用这套特殊工具扫描代码需要开发人员查找、手动安装和配置软件分析工具。即使是本地安装的,诸如自动安全助手 (ASH) 之类的 all-in-one 工具也需要配置 Docker 容器才能运行。但是,使用后SCSP,一套行业标准的代码分析工具会自动在中 AWS Cloud运行。使用此解决方案,您可以使用 Git 推送代码可交付成果,然后收到可视化输出,其中包含哪些安全检查失败的 at-a-glance 见解。

先决条件和限制

架构

目标技术堆栈

  • AWS CodeCommit 存储库

  • AWS CodeBuild 项目

  • AWS CodePipeline 管道

  • Amazon Simple Storage Service (Amazon S3)桶

  • AWS CloudFormation 模板

目标架构

SCSP用于静态代码分析的 DevOps 项目旨在为可交付代码提供安全反馈。

在AWS区域中SCSP执行代码分析。
  1. 在中 AWS Management Console,登录到目标 AWS 账户。确认您位于要部署管道 AWS 区域 的位置。

  2. 使用代码仓库中的 CloudFormation 模板部署SCSP堆栈。这将创建一个新的 CodeCommit 存储库和 CodeBuild 项目。

    注意:作为替代部署选项,您可以 CodeCommit 通过在堆栈部署期间提供存储库的 Amazon 资源名称 (ARN) 作为参数来使用现有存储库。

  3. 将存储库克隆到您的本地工作站,然后将所有文件添加到克隆存储库中相应的文件夹。

  4. 使用 Git 将文件添加、提交和推送到 CodeCommit 存储库。

  5. 推送到 CodeCommit 存储库会启动作 CodeBuild 业。该 CodeBuild 项目使用安全工具来扫描代码可交付成果。

  6. 查看管道的输出。发现错误级别问题的安全工具将导致管道中的操作失败。修复这些错误或将其禁止为误报。在管道的 S3 存储桶中 CodePipeline 或其中的操作详细信息中查看工具输出的详细信息。

工具

AWS 服务

  • AWS CloudFormation帮助您设置 AWS 资源,快速一致地配置资源,并在资源的整个生命周期中跨地区对其 AWS 账户 进行管理。

  • AWS CodeBuild是一项完全托管的生成服务,可帮助您编译源代码、运行单元测试和生成可随时部署的工件。

  • AWS CodeCommit是一项版本控制服务,可帮助您私下存储和管理 Git 存储库,而无需管理自己的源代码控制系统。

其他工具

有关用于扫描代码交付件的SCSP工具的完整列表,请参阅中的SCSP自述文件。 GitHub

代码存储库

此模式的代码可在中的简单代码扫描管道 (SCSP) 存储库中找到 GitHub。

操作说明

任务描述所需技能

创建 CloudFormation 堆栈。

  1. 登录到 AWS Management Console

  2. 在控制台中,确认您位于要部署解决方案的目标区域。有关更多信息,请参阅选择区域

  3. 选择以下链接。这将在中打开快速创建堆栈向导 CloudFormation。

    https://console.aws.amazon.com/cloudformation/家? #/stacks/create/review? 模板 URL = https://proservetools.s3.amazonaws.com/cft/ scsp-pipeline-stack .template.json& stackName = SimpleCodeScanPipeline

  4. 快速创建堆栈向导中,查看堆栈的参数设置,并根据用例的需要进行任何修改。

  5. 选择 “我确认AWS CloudFormation 可能会创建IAM资源”,然后选择 “创建堆栈”。

这将创建一个 CodeCommit 存储库、一个 CodePipeline 管道、多个 CodeBuild 任务定义和一个 S3 存储桶。生成运行和扫描结果将复制到此存储桶中。 CloudFormation 堆栈完全部署完毕后SCSP,就可以使用了。

AWS DevOps,AWS管理员
任务描述所需技能

检查扫描结果。

  1. Amazon S3 控制台Buckets 中,选择 s impelin e-scanpipeline-deleteresourcespipelinereso 存储桶

  2. 选择 scan_resul ts 目录,然后选择带有最新扫描日期戳的文件夹。

  3. 查看此文件夹中的日志文件,查看管道中使用的安全工具检测到的所有问题。发现错误级别问题的安全工具将导致管道中的failed操作。如果它们是误报,则需要修复或抑制它们。

    注意:您还可以在 CodePipeline 控制台的 “操作详细信息” 部分中查看工具输出的详细信息(扫描通过和失败)。

应用程序开发者,AWS DevOps

故障排除

问题解决方案

HashiCorp 未扫描 Terraform 或 AWS CloudFormation 文件。

确保 Terraform (.tf) 和 CloudFormation (.yml、.yaml 或.json)文件放在克隆存储库的相应文件夹中。 CodeCommit

git clone命令失败。

请确保您已安装git-remote-codecommit并且可以访问有权读取 CodeCommit 存储库的 AWS 凭据。CLI

并发错误,例如。Project-level concurrent build limit cannot exceed the account-level concurrent build limit of 1

CodePipeline 控制台中选择 “发布更改” 按钮,重新运行管道。这是一个已知问题,在管道运行的最初几次似乎最为常见。

相关资源

提供有关SCSP项目的反馈

其他信息

FAQ

该SCSP项目与自动安全助手 (ASH) 相同吗?

不是。 ASH当你想要一CLI款使用容器运行代码扫描工具的工具时使用。Automated Security Helper (ASH) 是一款旨在降低新代码、基础架构或IAM资源配置中出现安全违规可能性的工具。ASH是一个可以在本地运行的命令行实用程序。本地使用需要在系统上安装并运行容器环境。

SCSP当你想要一个比这更简单的设置管道时使用ASH。SCSP不需要本地安装。SCSP旨在在管道中单独运行检查并按工具显示结果。SCSP还避免了设置 Docker 的大量开销,而且它与操作系统 (OS) 无关。

SCSP只适合安全团队吗?

不,任何人都可以部署管道来确定其代码的哪些部分未通过安全检查。例如,非安全用户可以在与安全团队一起审查之前使用SCSP来检查其代码。

SCSP如果我使用的是其他类型的存储库,比如、或 Bitbucket GitLab GitHub,我能否使用?

您可以将本地 git 存储库配置为指向两个不同的远程存储库。例如,您可以克隆现有 GitLab 存储库,创建SCSP实例(如果需要 CloudFormation,指定 Terraform 和 Ru AWS Config les Development Kit (AWS RDK) 文件夹),然后也可以使用git remote add upstream <SCSPGitLink>将本地存储库指向SCSP CodeCommit 存储库。这允许SCSP先将代码更改发送到、、或 Bitbucket 存储库,然后再进行任何其他更新以解决发现问题,然后将其推送到 GitLab GitHub、或 Bitbucket 存储库。有关多个遥控器的更多信息,请参阅将提交推送到其他 Git 存储库(AWS 博客文章)。

注意:要小心漂移,例如避免通过 Web 界面进行更改。

贡献和添加你自己的动作

SCSPsetup 作为一个 GitHub 项目进行维护,其中包含SCSP AWS Cloud Development Kit (AWS CDK) 应用程序的源代码。要向管道添加其他检查,需要更新 AWS CDK 应用程序,然后合成或部署到管道运行的目标 AWS 账户 中。为此,首先要克隆SCSPGitHub 项目,然后在lib文件夹中找到堆栈定义文件。

如果你想添加额外的检查,那么 AWS CDK 代码中的StandardizedCodeBuildProject类可以非常简单地添加动作。提供名称、描述和 install /或build命令。 AWS CDK 使用合理的默认值创建 CodeBuild 项目。除了创建构建项目外,您还需要将其添加到构建阶段的 CodePipeline 操作中。在设计新检查时,FAIL如果扫描工具检测到问题或无法运行,则应采取行动。PASS如果扫描工具未检测到任何问题,则应执行该操作。有关配置工具的示例,请查看Bandit操作代码。

有关预期输入和输出的更多信息,请参阅存储库文档

如果添加自定义操作,则需要使用cdk deploy或SCSP进行部署cdk synth + CloudFormation deploy。这是因为快速创建堆栈 CloudFormation 模板由存储库所有者维护。