

# SEC11-BP02 自動化在整個開發和發布生命週期的測試
<a name="sec_appsec_automate_testing_throughout_lifecycle"></a>

 自動化在整個開發和發佈生命週期的安全署性測試。自動化可以讓軟體在發佈之前更容易一致且重複地識別潛在問題，因此能降低將供應軟體的安全問題風險。

**預期成果：**自動化測試的目標是提供以程式設計方式，及早偵測潛在問題，而且常常是遍及整個開發生命週期。啟用自動化迴歸測試時，您可以對變更之後的軟體重新執行功能性與非功能性的測試，確認先前測試過的軟體運作仍如預期。如果定義安全單元測試來檢查常見的錯誤組態，例如損壞或缺失的驗證，您就能夠在開發過程中及早發現和修正這些問題。

 測試自動化會使用專用測試個案來進行應用程式驗證，測試期間以應用程式需求和所需功能為基礎。自動化測試會將產生的測試輸出與其個別預期輸出進行比較，得到最後結果，進而加快整體的測試生命週期。包括像是迴歸測試與單位測試套組的測試方法最適合自動化應用。自動化安全屬性測試，建置人員就能接收自動化意見回饋，而不需要等待舉行安全審核。採用靜態或靜態程式碼分析的自動化測試，可以提高程式碼品質，並協助及早在開發生命週期中偵測出潛在的軟體問題。

**常見的反模式：**
+  未傳達測試個案與自動化測試的測試結果。
+  僅在即將發佈前執行自動化測試。
+  自動化有經常改變需求的測試個案。
+  無法提供如何解決安全測試結果的指引。

**建立此最佳實務的優勢：**
+  降低人員評估系統安全署性的依賴性。
+  可在跨多個工作串流之間找到一致結果，進而提高一致性。
+  降低造成安全問題被導入產品線上軟體的可能性。
+  因提早捕捉到軟體問題，而縮短偵測與矯正之間的範圍時段。
+  提高跨多個工作串流之系統或重複行為的能見度，其可用來促進整體組織改進。

** 未建立此最佳實務時的風險暴露等級：**中 

## 實作指引
<a name="implementation-guidance"></a>

隨著軟體逐漸建置，採用各種不同機制來測試軟體，確保您正根據應用程式的業務邏輯為主的功能性需求，以及著重應用程式可靠性、效能和安全性的非功能性需求，進行應用程式的測試作業。

 靜態應用程式安全測試 (SAST) 分析原始程式碼是否有異常的安全模式，並提供可能存在缺陷程式碼的提示。SAST 依賴靜態輸入來測試某個範圍的已知安全問題，這些輸入包括文件 (需求規格、設計文件，以及設計規格) 和應用程式原始程式碼。靜態程式碼分析器可協助加快大量程式碼的分析作業。[NIST 品質群組](https://www.nist.gov/itl/ssd/software-quality-group)則提供[原始程式碼安全分析器](https://www.nist.gov/itl/ssd/software-quality-group/source-code-security-analyzers)的比較，其中包括能用於[位元組程式碼掃描器](https://samate.nist.gov/index.php/Byte_Code_Scanners.html)和[二進位程式碼掃描器](https://samate.nist.gov/index.php/Binary_Code_Scanners.html)的開放原始碼工具。

 應用動態分析安全測試 (DAST) 方法以補充您的靜態測試，這個方法會在應用程式執行期間進行測試，識別潛在的意外行為。動態測試可用來偵測出靜態分析無法偵測出的潛在問題。在程式碼儲存、建置和管道等階段進行測試，您就可以檢查進入程式碼當中的各種不同潛在問題類型。[Amazon Q Developer](https://aws.amazon.com/q/developer/) 提供程式碼建議，包括在建置者的 IDE 中執行安全掃描。[Amazon CodeGuru 安全工具](https://aws.amazon.com/codeguru/)可以識別關鍵問題、安全問題，以及在應用程式開發期間難以發現的錯誤，並提供改善程式碼品質的建議。擷取軟體材料清單 (SBOM) 也可讓您擷取正式紀錄，其中包含建置軟體時所使用的各種元件的詳細資訊和關係。如此您便能知會漏洞管理，並快速識別軟體或元件相依項及供應鏈風險。

 [開發人員安全工作坊](https://catalog.workshops.aws/sec4devs)使用 AWS 開發人員工具 (如 [AWS CodeBuild](https://aws.amazon.com/codebuild/)、[AWS CodeCommit](https://aws.amazon.com/codecommit/) 和 [AWS CodePipeline](https://aws.amazon.com/codepipeline/)) 執行包括 SAST 和 DAST 測試方法的發佈管道自動化。

 隨著 SDLC 繼續進行，建立包括安全團隊定期進行應用程式審核的反覆程序。收集自這些安全審核的意見回饋應加以解決，並在發佈準備度審核時加以驗證。這些審核作業會建立堅實強大的應用程式安全狀態，並提供建置人員可解決潛在問題的可行動意見回饋。

### 實作步驟
<a name="implementation-steps"></a>
+  實作一致的 IDE、程式碼審核，以及包括安全測試的 CI/CD 工具。
+  考慮 SDLC 中的哪個位置適合封鎖管道，而不只是通知建置者出現需要矯正的問題。
+  [自動化安全協助程式 (ASH)](https://github.com/awslabs/automated-security-helper) 是開放原始碼程式碼安全掃描工具的範例。
+  使用自動化工具 (例如，已與開發人員 IDE 完成整合的 [Amazon Q Developer](https://aws.amazon.com/q/developer/)，以及可在遞交認可時掃描程式碼的 [Amazon CodeGuru 安全工具](https://aws.amazon.com/codeguru/)) 執行測試或程式碼分析，協助建置者在適當時間取得意見回饋。
+  使用 AWS Lambda 進行建置時，您可以使用 [Amazon Inspector](https://docs.aws.amazon.com/inspector/latest/user/scanning-lambda.html) 來掃描多個功能的應用程式程式碼。
+  如果將自動化測試納入 CI/CD 管道，您應該使用票證系統來追蹤通知，以及軟體問題的矯正。
+  如果是可能會產生調查結果的安全測試，連結矯正的指引將有助於建置人員改善程式碼品質。
+  定期分析自動化工具所找到的調查結果，以便找出下次自動化、建置者訓練或認知行銷活動的優先順序。
+  若要擷取 SBOM 做為 CI/CD 管道的一部分，請使用 [Amazon Inspector SBOM 產生器](https://docs.aws.amazon.com/inspector/latest/user/sbom-generator.html)，以 CycloneDX SBOM 格式為封存、容器映像、目錄、本機系統和編譯的 Go and Rust 二進位檔製作 SBOM。

## 資源
<a name="resources"></a>

 **相關的最佳實務：**
+  [DevOps 指引：DL.CR.3 為程式碼任務建立明確的完成條件](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/dl.cr.3-establish-clear-completion-criteria-for-code-tasks.html) 

 **相關文件：**
+  [持續交付與持續部署](https://aws.amazon.com/devops/continuous-delivery/) 
+  [AWS DevOps 能力合作夥伴](https://aws.amazon.com/devops/partner-solutions/?blog-posts-cards.sort-by=item.additionalFields.createdDate&blog-posts-cards.sort-order=desc&partner-solutions-cards.sort-by=item.additionalFields.partnerNameLower&partner-solutions-cards.sort-order=asc&awsf.partner-solutions-filter-partner-type=partner-type%23technology&awsf.Filter%20Name%3A%20partner-solutions-filter-partner-location=*all&awsf.partner-solutions-filter-partner-location=*all&partner-case-studies-cards.sort-by=item.additionalFields.sortDate&partner-case-studies-cards.sort-order=desc&awsm.page-partner-solutions-cards=1) 
+  [AWS 安全能力合作夥伴](https://aws.amazon.com/security/partner-solutions/?blog-posts-cards.sort-by=item.additionalFields.createdDate&blog-posts-cards.sort-order=desc&partner-solutions-cards.sort-by=item.additionalFields.partnerNameLower&partner-solutions-cards.sort-order=asc&awsf.partner-solutions-filter-partner-type=*all&awsf.Filter%20Name%3A%20partner-solutions-filter-partner-categories=use-case%23app-security&awsf.partner-solutions-filter-partner-location=*all&partner-case-studies-cards.sort-by=item.additionalFields.sortDate&partner-case-studies-cards.sort-order=desc&events-master-partner-webinars.sort-by=item.additionalFields.startDateTime&events-master-partner-webinars.sort-order=asc) (應用程式安全) 
+  [選擇 Well-Architected CI/CD 方法](https://aws.amazon.com/blogs/devops/choosing-well-architected-ci-cd-open-source-software-aws-services/) 
+  [Amazon CodeGuru 安全工具中的機密偵測](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/recommendations.html#secrets-detection) 
+  [Amazon CodeGuru 安全工具偵測程式庫](https://docs.aws.amazon.com/codeguru/detector-library/) 
+  [配合有效管控，加速在 AWS 的部署](https://aws.amazon.com/blogs/architecture/accelerate-deployments-on-aws-with-effective-governance/) 
+  [AWS 如何達到自動化安全、無人為介入的部署](https://aws.amazon.com/builders-library/automating-safe-hands-off-deployments/) 
+  [Amazon CodeGuru 安全工具如何協助您有效平衡安全性和速度](https://aws.amazon.com/blogs/security/how_amazon_codeguru_security_helps_effectively_balance_security_and_velocity/) 

 **相關影片：**
+  [無人為介入：Amazon 的自動化持續交付管道](https://www.youtube.com/watch?v=ngnMj1zbMPY) 
+  [自動化跨帳戶 CI/CD 管道](https://www.youtube.com/watch?v=AF-pSRSGNks) 
+  [Amazon 的軟體開發程序](https://www.youtube.com/watch?t=1340&v=52SC80SFPOw&feature=youtu.be) 
+  [Amazon 的測試軟體和系統](https://www.youtube.com/watch?v=o1sc3cK9bMU&t) 

 **相關範例：**
+  [開發人員的產業認知](https://owasp.org/www-project-top-ten/) 
+  [自動化安全協助程式 (ASH)](https://github.com/awslabs/automated-security-helper) 
+  [AWS CodePipeline 管控 - Github](https://github.com/awslabs/aws-codepipeline-governance) 