部署可同时检测多个代码可交付成果中安全问题的管道 - AWS 规范指引

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

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

Benjamin Morris、Tim Hahn、Sapeksh Madan、Dina Odum 和 Isaiah Schisler,Amazon Web Services

Summary

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

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

先决条件和限制

  • 活跃的 AWS 账户

  • 一个或多个代码可交付成果,用于扫描是否存在安全问题

  • AWS Command Line Interface (AWS CLI),已安装配置

  • Python 版本 3.0 或更高版本,以及 pip 版本 9.0.3 或更高版本,已安装

  • Git,已安装

  • 安装git-remote-codecommit在您的本地工作站上

架构

目标技术堆栈

  • AWS CodeCommit 存储库

  • AWS CodeBuild 项目

  • AWS CodePipeline 管道

  • Amazon Simple Storage Service(Amazon S3)桶

  • AWS CloudFormation 模板

目标架构

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

SCSP 在 AWS 区域中执行代码分析。
  1. 在中 AWS 管理控制台,登录到目标 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找到。

操作说明

Task说明所需技能

创建 CloudFormation 堆栈。

  1. 登录到 AWS 管理控制台

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

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

    https://console.aws.amazon.com/cloudformation/家? #/ stacks/create/review?templateURL=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 管理员
Task说明所需技能

检查扫描的结果。

  1. Amazon S3 控制台存储桶中,选择 simplecodescanpipeline-deleteresourcespipelinereso 存储桶。

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

  3. 审查此文件夹中的日志文件,进而审查管道中使用的安全工具检测到的所有问题。如果安全工具发现错误级问题,则会导致管道中的操作failed。如果它们是误报,则需要将其修复或予以隐瞒。

    注意

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

AWS 应用程序开发人员 DevOps

问题排查

问题解决方案

HashiCorp 未扫描 Terraform 或 AWS CloudFormation 文件。

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

git clone 命令失败。

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

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

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

相关资源

提供对 SCSP 项目的反馈

附加信息

常见问题解答

SCSP 项目和 Automated Security Helper(ASH)是否一样?

否。如果您想要一个使用容器来运行代码扫描工具的 CLI 工具,请使用 ASH。Automated Security Helper(ASH) 是一款工具,旨在降低新代码、基础设施或 IAM 资源配置中出现安全违规概率。ASH 是一个可以在本地运行的命令行实用程序。本地使用需要在系统上安装并运行容器环境。

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

SCSP 是否仅适用于安全团队?

否,任何人都可以部署该管道来确定其代码的哪些部分未通过安全检查。例如,非安全用户可以使用 SCSP 检查自己的代码,然后再与安全团队一起审查。

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

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

注意

要小心偏差,例如避免通过 Web 界面进行更改。

贡献和添加您自己的操作

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

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

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

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