

# SEC06-BP04 驗證軟體完整性
<a name="sec_protect_compute_validate_software_integrity"></a>

 使用加密驗證來驗證工作負載所使用之軟體成品 (包括映像) 的完整性。 以加密方式簽署您的軟體，以防範未經授權的變更在您的運算環境內執行。

 **預期成果：**所有成品都是從受信任的來源取得。廠商網站憑證經過驗證。 下載的成品已藉由簽章以加密方式驗證。自有軟體會由您的運算環境以加密方式簽署和驗證。

 **常見的反模式：**
+  信任信譽良好的廠商網站來取得軟體成品，但忽略憑證到期通知。 未先確認憑證是否有效，即逕行下載。
+  驗證廠商網站憑證，但未以加密方式驗證從這些網站下載的成品。
+  僅仰賴摘要或雜湊值來驗證軟體完整性。 雜湊值確定成品的原版未經修改，但未驗證其來源。
+  即使僅在您自己的部署中使用，也未簽署自有軟體、程式碼或程式庫。  

 **建立此最佳實務的優勢：**驗證您的工作負載所依賴之成品的完整性，有助於防止惡意軟體進入您的運算環境。 簽署您的軟體有助於防範運算環境中發生未經授權執行的情況。  藉由簽署和驗證程式碼來保護您的軟體供應鏈。

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

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

 作業系統映像、容器映像和程式碼成品通常在散佈時會提供完整性檢查，例如透過摘要或雜湊值。 這些檢查可讓用戶端運算自有的承載雜湊值並確認其與發佈的雜湊值相同，藉此驗證完整性。 雖然這些檢查有助於驗證承載未遭到竄改，但不會驗證承載來自原始出處 (其*來源*)。 驗證來源需要使用受信任的授權機構發出的憑證來數位簽署成品。

 如果您在工作負載中使用下載的軟體或成品，請檢查提供者是否提供了用於驗證數位簽章的公有金鑰。 以下一些範例說明 AWS 如何提供公有金鑰，以及如何驗證我們發佈的軟體：
+  [EC2 Image Builder：驗證安裝下載的 AWS TOE簽章](https://docs.aws.amazon.com/imagebuilder/latest/userguide/awstoe-verify-sig.html) 
+  [AWS Systems Manager：驗證SSM客服人員的簽章](https://docs.aws.amazon.com/systems-manager/latest/userguide/verify-agent-signature.html) 
+  [Amazon CloudWatch：驗證 CloudWatch 客服人員套件的簽章](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/verify-CloudWatch-Agent-Package-Signature.html) 

 將數位簽章驗證納入您用於取得和強化影像的程序，如 [SEC06-BP02 佈建來自強化影像的運算](https://docs.aws.amazon.com/wellarchitected/latest/framework/sec_protect_compute_hardened_images.html)中所述。

 您可以使用 [AWS Signer](https://docs.aws.amazon.com/signer/latest/developerguide/Welcome.html) 協助您管理簽章驗證，以及您自有軟體和成品的程式碼簽署生命週期。 [AWS Lambda](https://aws.amazon.com/lambda/) 和 [Amazon Elastic Container Registry](https://aws.amazon.com/ecr/) 兩者都提供與 Signer 的整合，可用來驗證程式碼和映像的簽章。 您可以使用「資源」區段中的範例，將 Signer 納入您的持續整合和交付 (CI/CD) 管道中，以便自動驗證簽章及自動簽署自有程式碼和映像。

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

 **相關文件：**
+  [容器的加密簽署](https://aws.amazon.com/blogs/containers/cryptographic-signing-for-containers/) 
+  [使用 協助保護容器映像建置管道的最佳實務 AWS Signer](https://aws.amazon.com/blogs/security/best-practices-to-help-secure-your-container-image-build-pipeline-by-using-aws-signer/) 
+  [宣佈使用 AWS Signer 和 Amazon 進行容器映像簽署 EKS](https://aws.amazon.com/blogs/containers/announcing-container-image-signing-with-aws-signer-and-amazon-eks/) 
+  [設定 的程式碼簽署 AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-codesigning.html) 
+  [Lambda 程式碼簽署的最佳實務和進階模式](https://aws.amazon.com/blogs/security/best-practices-and-advanced-patterns-for-lambda-code-signing/) 
+  [使用 AWS Certificate Manager Private CA AWS Key Management Service 和非對稱金鑰進行程式碼簽署](https://aws.amazon.com/blogs/security/code-signing-aws-certificate-manager-private-ca-aws-key-management-service-asymmetric-keys/) 

 **相關範例：**
+  [使用 Amazon CodeCatalyst 和 自動化 Lambda 程式碼簽署 AWS Signer](https://aws.amazon.com/blogs/devops/automate-lambda-code-signing-with-amazon-codecatalyst-and-aws-signer/) 
+  [使用 簽署和驗證OCI偽影 AWS Signer](https://aws.amazon.com/blogs/containers/signing-and-validating-oci-artifacts-with-aws-signer/) 

 **相關工具：**
+  [AWS Lambda](https://aws.amazon.com/lambda/) 
+  [AWS Signer](https://docs.aws.amazon.com/signer/latest/developerguide/Welcome.html) 
+  [AWS Certificate Manager](https://aws.amazon.com/certificate-manager/) 
+  [AWS Key Management Service](https://aws.amazon.com/kms/) 
+  [AWS CodeArtifact](https://aws.amazon.com/codeartifact/) 