

# SEC11-BP06 ソフトウェアをプログラムでデプロイする
<a name="sec_appsec_deploy_software_programmatically"></a>

可能な場合は、ソフトウェアのデプロイをプログラムで行います。この手法により、デプロイに失敗したり、人的エラーにより予期しない問題が発生したりする可能性を低減できます。

**期待される成果: **AWS クラウド でセキュアに構築するためには、原則としてデータへの人的関与を排除します。この原則には、ソフトウェアのデプロイ方法も含まれます。

 ソフトウェアのデプロイにおいて人的な依存を排除することで、テスト済みのソフトウェアがデプロイされ、デプロイが常に一貫して実行されるという信頼性を大幅に高めることができます。異なる環境で動作させるために、ソフトウェアを変更する必要はありません。12 要素のアプリケーション開発の原則、具体的には構成の外部化の原則を用いることで、変更を必要とすることなく、複数の環境に同じコードをデプロイすることができます。暗号化を用いたソフトウェアパッケージの署名は、環境間で変更がないことを証明するための便利な手法です。このアプローチによって、変更プロセスでのリスクを低減し、ソフトウェアリリースの一貫性を向上させることができます。 

**一般的なアンチパターン:**
+  本稼働環境にソフトウェアを手動でデプロイする。 
+  環境に合わせて手動でソフトウェアに変更を加える。 

**このベストプラクティスを活用するメリット:**
+  ソフトウェアリリースプロセスの信頼性の向上。 
+  変更の失敗がビジネスの機能性に与えるリスクの低減。 
+  変更リスクの低減によるリリース頻度の向上。 
+  デプロイ中に予期しないイベントが発生した場合の自動ロールバック機能。 
+  テスト済みのソフトウェアとデプロイされたソフトウェアが同じであることを暗号化によって証明する能力。 

 **このベストプラクティスが確立されていない場合のリスクレベル:** 高 

## 実装のガイダンス
<a name="implementation-guidance"></a>

 持続的な人的アクセスを環境から排除するために AWS アカウント 構造を構築し、CI/CD ツールを使用してデプロイを実施します。環境固有のデータを [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) などの外部ソースから取得するようにアプリケーションを設計します。テスト後にパッケージに署名し、デプロイ中にこれらの署名を検証します。アプリケーションコードをプッシュするように CI/CD パイプラインを設定し、Canary を使用してデプロイの成功を確認します。[AWS CloudFormation](https://aws.amazon.com/cloudformation/) または [AWS CDK](https://aws.amazon.com/cdk/) などのツールを使用してインフラストラクチャを定義し、[AWS CodeBuild](https://aws.amazon.com/codebuild/) と [AWS CodePipeline](https://aws.amazon.com/codepipeline/) を使用して CI/CD のオペレーションを実行します。 

### 実装手順
<a name="implementation-steps"></a>
+  明確に定義された CI/CD パイプラインを構築して、デプロイプロセスを合理化します。 
+  [AWS CodeBuild](https://aws.amazon.com/codebuild/) と [AWS Code Pipeline](https://aws.amazon.com/codepipeline/) を使用して、パイプラインへのセキュリティテストの統合を容易にする CI/CD 機能を提供します。 
+  ホワイトペーパー「[Organizing Your AWS Environment Using Multiple Accounts](https://docs.aws.amazon.com/whitepapers/latest/organizing-your-aws-environment/organizing-your-aws-environment.html) (複数のアカウントを使用した AWS 環境の組織化)」で説明している環境の分離に関するガイダンスに従います。 
+  本稼働ワークロードが実行されている環境への持続的な人的アクセスがないことを確認します。 
+  構成データの外部化をサポートするようアプリケーションを設計します。 
+  ブルー/グリーンデプロイモデルを使用したデプロイを検討します。 
+  Canary を実装してソフトウェアのデプロイの成功を検証します。 
+  [AWS Signer](https://docs.aws.amazon.com/signer/latest/developerguide/Welcome.html) または [AWS Key Management Service (AWS KMS)](https://aws.amazon.com/kms/) などの暗号化ツールを使用して、デプロイするソフトウェアパッケージの署名と検証を行います。 

## リソース
<a name="resources"></a>

 **関連するベストプラクティス:** 
+  [SEC11-BP02 開発およびリリースライフサイクル全体を通じてテストを自動化する](sec_appsec_automate_testing_throughout_lifecycle.md) 

 **関連するドキュメント:** 
+  [AWS CI/CD Workshop](https://catalog.us-east-1.prod.workshops.aws/workshops/ef1c179d-8097-4f34-8dc3-0e9eb381b6eb/en-US/) (AWS CI/CD ワークショップ) 
+  [Accelerate deployments on AWS with effective governance](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/) 
+  [Code signing using AWS Certificate Manager Private CA and AWS Key Management Service asymmetric keys](https://aws.amazon.com/blogs/security/code-signing-aws-certificate-manager-private-ca-aws-key-management-service-asymmetric-keys/) (AWS Certificate Manager Private CA および AWS Key Management Service 非対称キーを使用したコードの署名) 
+  [Code Signing, a Trust and Integrity Control for AWS Lambda](https://aws.amazon.com/blogs/aws/new-code-signing-a-trust-and-integrity-control-for-aws-lambda/) (コード署名、AWS Lambda の信頼性および整合性のコントロール) 

 **関連動画:** 
+  [Hands-off: Automating continuous delivery pipelines at Amazon](https://www.youtube.com/watch?v=ngnMj1zbMPY) (ハンズオフ: Amazon での継続的デリバリーパイプラインの自動化) 

 **関連する例:** 
+  [Blue/Green deployments with AWS Fargate](https://catalog.us-east-1.prod.workshops.aws/workshops/954a35ee-c878-4c22-93ce-b30b25918d89/en-US) (AWS Fargate を使用したブルー/グリーンデプロイ) 