本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
部署可同时检测多个代码交付项中的安全问题的管道
由本杰明·莫里斯 (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 账户
您要扫描的一个或多个代码交付内容,以发现安全问题
Git,已安装
git-remote-codecommit在本地工作站上安装
架构
目标技术堆栈
AWS CodeCommit 存储库
AWS CodeBuild 项目
AWS CodePipeline 管道
Amazon Simple Storage Service (Amazon S3)桶
AWS CloudFormation 模板
目标架构
SCSP用于静态代码分析的 DevOps 项目旨在为可交付代码提供安全反馈。
在中 AWS Management Console,登录到目标 AWS 账户。确认您位于要部署管道 AWS 区域 的位置。
使用代码仓库中的 CloudFormation 模板部署SCSP堆栈。这将创建一个新的 CodeCommit 存储库和 CodeBuild 项目。
注意:作为替代部署选项,您可以 CodeCommit 通过在堆栈部署期间提供存储库的 Amazon 资源名称 (ARN) 作为参数来使用现有存储库。
将存储库克隆到您的本地工作站,然后将所有文件添加到克隆存储库中相应的文件夹。
使用 Git 将文件添加、提交和推送到 CodeCommit 存储库。
推送到 CodeCommit 存储库会启动作 CodeBuild 业。该 CodeBuild 项目使用安全工具来扫描代码可交付成果。
查看管道的输出。发现错误级别问题的安全工具将导致管道中的操作失败。修复这些错误或将其禁止为误报。在管道的 S3 存储桶中 CodePipeline 或其中的操作详细信息中查看工具输出的详细信息。
工具
AWS 服务
AWS CloudFormation帮助您设置 AWS 资源,快速一致地配置资源,并在资源的整个生命周期中跨地区对其 AWS 账户 进行管理。
AWS CodeBuild是一项完全托管的生成服务,可帮助您编译源代码、运行单元测试和生成可随时部署的工件。
AWS CodeCommit是一项版本控制服务,可帮助您私下存储和管理 Git 存储库,而无需管理自己的源代码控制系统。
其他工具
有关用于扫描代码交付件的SCSP工具的完整列表,请参阅中的SCSP自述文件
代码存储库
此模式的代码可在中的简单代码扫描管道 (SCSP)
操作说明
任务 | 描述 | 所需技能 |
---|---|---|
创建 CloudFormation 堆栈。 |
这将创建一个 CodeCommit 存储库、一个 CodePipeline 管道、多个 CodeBuild 任务定义和一个 S3 存储桶。生成运行和扫描结果将复制到此存储桶中。 CloudFormation 堆栈完全部署完毕后SCSP,就可以使用了。 | AWS DevOps,AWS管理员 |
任务 | 描述 | 所需技能 |
---|---|---|
检查扫描结果。 |
| 应用程序开发者,AWS DevOps |
故障排除
问题 | 解决方案 |
---|---|
HashiCorp 未扫描 Terraform 或 AWS CloudFormation 文件。 | 确保 Terraform (.tf) 和 CloudFormation (.yml、.yaml 或.json)文件放在克隆存储库的相应文件夹中。 CodeCommit |
| 请确保您已安装 |
并发错误,例如。 | 在CodePipeline 控制台 |
相关资源
其他信息
FAQ
该SCSP项目与自动安全助手 (ASH) 相同吗?
不是。 ASH当你想要一CLI款使用容器运行代码扫描工具的工具时使用。Automated Security Helper (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 模板由存储库所有者维护。