

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

# 部署可同时检测多个代码可交付成果中安全问题的管道
<a name="deploy-a-pipeline-that-simultaneously-detects-security-issues-in-multiple-code-deliverables"></a>

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

## Summary
<a name="deploy-a-pipeline-that-simultaneously-detects-security-issues-in-multiple-code-deliverables-summary"></a>

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

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

## 先决条件和限制
<a name="deploy-a-pipeline-that-simultaneously-detects-security-issues-in-multiple-code-deliverables-prereqs"></a>
+ 活跃的 AWS 账户
+ 一个或多个代码可交付成果，用于扫描是否存在安全问题
+ AWS Command Line Interface (AWS CLI)，[已安装](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)并[配置](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
+ Python 版本 3.0 或更高版本，以及 pip 版本 9.0.3 或更高版本，[已安装](https://www.python.org/downloads/windows/)
+ Git，[已安装](https://github.com/git-guides/install-git)
+ 安装[git-remote-codecommit](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-git-remote-codecommit.html#setting-up-git-remote-codecommit-install)在您的本地工作站上

## 架构
<a name="deploy-a-pipeline-that-simultaneously-detects-security-issues-in-multiple-code-deliverables-architecture"></a>

**目标技术堆栈**
+ AWS CodeCommit 存储库
+ AWS CodeBuild 项目
+ AWS CodePipeline 管道
+ Amazon Simple Storage Service（Amazon S3）桶
+ AWS CloudFormation 模板

**目标架构**

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

![\[SCSP 在 AWS 区域中执行代码分析。\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/61fe4f99-7dfc-48a8-90e4-a25253cc140d/images/fbc13150-0970-48d6-87bc-84dfaed90d4b.png)


1. 在中 AWS 管理控制台，登录到目标 AWS 账户。确认您位于要部署管道 AWS 区域 的位置。

1. 使用代码仓库中的 CloudFormation 模板部署 SCSP 堆栈。这将创建一个新的 CodeCommit 存储库和 CodeBuild 项目。
**注意**  
作为替代部署选项，您可以通过在 CodeCommit 堆栈部署期间提供存储库的 Amazon 资源名称 (ARN) 作为参数来使用现有存储库。

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

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

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

1. 审查管道的输出。如果安全工具发现错误级问题，则会导致管道中的操作失败。修复这些错误或将其作为误报予以隐瞒。在管道的 S3 存储桶中 CodePipeline 或其中的**操作详细信息**中查看工具输出的详细信息。

## 工具
<a name="deploy-a-pipeline-that-simultaneously-detects-security-issues-in-multiple-code-deliverables-tools"></a>

**AWS 服务**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)帮助您设置 AWS 资源，快速一致地配置资源，并在资源的整个生命周期中跨地区对其 AWS 账户 进行管理。
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) 是一项完全托管式构建服务，可编译源代码、运行单元测试和生成部署就绪的构件。
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) 是一项版本控制服务，可帮助您私下存储和管理 Git 存储库，而无需管理自己的源代码控制系统。

**其他工具**

有关 SCSP 用于扫描代码交付件的工具的完整列表，请参阅中的 [SCSP](https://github.com/awslabs/simple-code-scanning-pipeline/blob/main/README.md) 自述文件。 GitHub

**代码存储库**

此模式的代码可在中的[简单代码扫描管道 (SCSP)](https://github.com/awslabs/simple-code-scanning-pipeline) 存储库中 GitHub找到。

## 操作说明
<a name="deploy-a-pipeline-that-simultaneously-detects-security-issues-in-multiple-code-deliverables-epics"></a>

### 部署 SCSP
<a name="deploy-the-scsp"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 CloudFormation 堆栈。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-a-pipeline-that-simultaneously-detects-security-issues-in-multiple-code-deliverables.html)这将创建一个 CodeCommit 存储库、一个 CodePipeline 管道、多个 CodeBuild 任务定义和一个 S3 存储桶。构建运行和扫描结果都会复制到此存储桶中。完全部署 CloudFormation 堆栈后，SCSP 就可以使用了。 | AWS DevOps，AWS 管理员 | 

### 使用管道
<a name="use-the-pipeline"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 检查扫描的结果。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-a-pipeline-that-simultaneously-detects-security-issues-in-multiple-code-deliverables.html) | AWS 应用程序开发人员 DevOps | 

## 问题排查
<a name="deploy-a-pipeline-that-simultaneously-detects-security-issues-in-multiple-code-deliverables-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| 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 控制台](https://console.aws.amazon.com/codesuite/codepipeline/home)中选择 “**发布更改**” 按钮，重新运行管道。这是一个已知问题，通常在管道运行的最初几次操作中似乎最为常见。 | 

## 相关资源
<a name="deploy-a-pipeline-that-simultaneously-detects-security-issues-in-multiple-code-deliverables-resources"></a>

提供对 SCSP 项目的[反馈](https://github.com/awslabs/simple-code-scanning-pipeline/issues)。

## 附加信息
<a name="deploy-a-pipeline-that-simultaneously-detects-security-issues-in-multiple-code-deliverables-additional"></a>

**常见问题解答**

*SCSP 项目和 Automated Security Helper（ASH）是否一样？*

否。如果您想要一个使用容器来运行代码扫描工具的 CLI 工具，请使用 ASH。[Automated Security Helper（ASH）](https://github.com/awslabs/automated-security-helper) 是一款工具，旨在降低新代码、基础设施或 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 存储库](https://docs.aws.amazon.com/codecommit/latest/userguide/how-to-mirror-repo-pushes.html)（AWS 博客文章）。

**注意**  
要小心偏差，例如避免通过 Web 界面进行更改。

**贡献和添加您自己的操作**

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

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

有关预期输入和输出的更多信息，请参阅[存储库文档](https://github.com/awslabs/simple-code-scanning-pipeline/blob/main/README.md)。

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