

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 部署可同時偵測多個程式碼交付項目中安全問題的管道
<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*

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

[Simple Code Scanning Pipeline (SCSP)](https://github.com/awslabs/simple-code-scanning-pipeline) 提供兩鍵式建立程式碼分析管道，以平行執行業界標準的開放原始碼安全工具。這可讓開發人員檢查程式碼的品質和安全性，而無需安裝工具，甚至了解如何執行它們。這可協助您減少程式碼交付項目中的漏洞和錯誤設定。它也可以減少您的組織安裝、研究和設定安全工具所花費的時間。

在 SCSP 之前，使用此特定工具套件掃描程式碼需要開發人員尋找、手動安裝和設定軟體分析工具。即使在本機安裝，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) 

## Architecture
<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 專案，旨在提供可交付程式碼的安全意見回饋。

![\[在 AWS 區域中執行程式碼分析的 SCSP。\]](http://docs.aws.amazon.com/zh_tw/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 專案。
**注意**  
做為替代部署選項，您可以在堆疊部署期間提供儲存庫的 Amazon Resource Name (ARN) 做為參數，以使用現有的 CodeCommit 儲存庫。

1. 將儲存庫複製到本機工作站，然後將任何檔案新增至複製儲存庫中的個別資料夾。

1. 使用 Git 將檔案新增、遞交和推送至 CodeCommit 儲存庫。

1. 推送至 CodeCommit 儲存庫會啟動 CodeBuild 任務。CodeBuild 專案使用安全工具掃描程式碼交付項目。

1. 檢閱管道的輸出。發現錯誤層級問題的安全工具會導致管道中的動作失敗。修正這些錯誤或將其隱藏為誤報。在 CodePipeline 中的**動作詳細資訊或管道的 S3 儲存貯體中檢閱工具輸出的詳細資訊**。 S3 

## 工具
<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 用來掃描程式碼交付項目的完整工具清單，請參閱 GitHub 中的 [SCSP 讀我](https://github.com/awslabs/simple-code-scanning-pipeline/blob/main/README.md)檔案。

**程式碼儲存庫**

此模式的程式碼可在 GitHub 的[簡易程式碼掃描管道 (SCSP)](https://github.com/awslabs/simple-code-scanning-pipeline) 儲存庫中使用。

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

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


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 建立 CloudFormation 堆疊。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/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>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 檢查掃描的結果。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/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 專案是否與自動化安全協助程式 (ASH) 相同？*

否。當您想要使用容器執行程式碼掃描工具的 CLI 工具時，請使用 ASH。[自動化安全協助程式 (ASH)](https://github.com/awslabs/automated-security-helper) 是一種工具，旨在降低新程式碼、基礎設施或 IAM 資源組態中發生安全違規的可能性。ASH 是一種命令列公用程式，可在本機執行。本機使用需要在系統上安裝和操作容器環境。

當您想要比 ASH 更簡單的設定管道時，請使用 SCSP。SCSP 不需要本機安裝。SCSP 旨在個別在管道中執行檢查，並依工具顯示結果。SCSP 也可透過設定 Docker 來避免許多額外負荷，而且與作業系統 (OS) 無關。

*SCSP 僅適用於安全團隊嗎？*

否，任何人都可以部署管道，以判斷其程式碼的哪些部分未通過安全檢查。例如，非安全使用者可以使用 SCSP 檢查程式碼，然後再與其安全團隊進行檢閱。

*如果我使用其他類型的儲存庫，例如 GitLab、GitHub 或 Bitbucket，是否可以使用 SCSP？*

您可以設定本機 git 儲存庫，以指向兩個不同的遠端儲存庫。例如，您可以複製現有的 GitLab 儲存庫、建立 SCSP 執行個體 （視需要指定 CloudFormation、Terraform 和 AWS Config 規則開發套件 (AWS RDK) 資料夾），然後使用 `git remote add upstream <SCSPGitLink>` 來指向 SCSP CodeCommit 儲存庫的本機儲存庫。這可讓程式碼變更先傳送至 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`或 部署 SCSP`cdk synth + CloudFormation deploy`。這是因為**快速建立堆疊** CloudFormation 範本是由儲存庫擁有者維護。