

# SEC11-BP06 Déploiement programmatique de logiciels
<a name="sec_appsec_deploy_software_programmatically"></a>

Dans la mesure du possible, procédez à des déploiements de logiciels par programme. Cette approche réduit la probabilité qu'un déploiement échoue ou qu'une erreur humaine entraîne un problème inattendu.

**Résultat souhaité : **éloigner les personnes des données est un principe clé pour construire en toute sécurité dans le AWS Cloud. Ce principe s'applique également à la manière dont vous déployez votre logiciel. 

 Ne pas dépendre d'individus pour déployer un logiciel vous permet d'être certain que ce que vous déployez correspond à ce que vous avez testé, et que le déploiement est effectué de manière cohérente à chaque fois. Il ne doit pas être nécessaire de modifier un logiciel afin qu'il fonctionne dans différents environnements. L'utilisation des principes du développement d'applications à douze facteurs, en particulier l'externalisation de la configuration, vous permet de déployer le même code dans plusieurs environnements sans avoir à le modifier. Le chiffrement de la signature des packages logiciels permet de vérifier que rien n'a changé d'un environnement à l'autre. Le résultat global de cette approche est de réduire les risques dans votre processus de changement et d'améliorer la cohérence des versions du logiciel. 

**Anti-modèles courants :**
+  Déploiement manuel d'un logiciel en production. 
+  Modification manuelle d'un logiciel pour l'adapter à des environnements différents. 

**Avantages liés au respect de cette bonne pratique :**
+  Confiance accrue dans le processus de lancement des logiciels. 
+  Réduction du risque que l'échec d'une modification affecte l'entreprise. 
+  Augmentation de la cadence de lancement en raison de la diminution du risque de changement. 
+  Capacité de restauration automatique en cas d'événements inattendus au cours du déploiement. 
+  Capacité à prouver par chiffrement que le logiciel testé est celui qui est déployé. 

 **Niveau de risque exposé si cette bonne pratique n'est pas respectée :** élevé 

## Directives d'implémentation
<a name="implementation-guidance"></a>

 Créez la structure de votre Compte AWS de manière à supprimer la récurrence de l'accès de personnes à partir d'environnements et utilisez des outils CI/CD pour effectuer des déploiements. Concevez vos applications de manière à ce que les données de configuration spécifiques à l'environnement soient obtenues à partir d'une source externe, telle que [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html). Signez les packages après les avoir testés et validez ces signatures lors du déploiement. Configurez vos pipelines CI/CD pour transmettre le code de l'application et utilisez des tests Canary pour confirmer le succès du déploiement. Utilisez des outils tels que [AWS CloudFormation](https://aws.amazon.com/cloudformation/) ou [AWS CDK](https://aws.amazon.com/cdk/) pour définir votre infrastructure, puis utilisez [AWS CodeBuild](https://aws.amazon.com/codebuild/) et [AWS CodePipeline](https://aws.amazon.com/codepipeline/) pour effectuer des opérations CI/CD. 

### Étapes d'implémentation
<a name="implementation-steps"></a>
+  Créez des pipelines CI/CD bien définis pour rationaliser le processus de déploiement. 
+  Utilisez [AWS CodeBuild](https://aws.amazon.com/codebuild/) et [AWS Code Pipeline](https://aws.amazon.com/codepipeline/) pour fournir une capacité CI/CD afin de faciliter l'intégration des tests de sécurité dans vos pipelines. 
+  Suivez les conseils sur la séparation des environnements dans le livre blanc [Organisation de votre environnement AWS à l'aide de plusieurs comptes](https://docs.aws.amazon.com/whitepapers/latest/organizing-your-aws-environment/organizing-your-aws-environment.html). 
+  Vérifiez que personne n'a accès aux environnements dans lesquels des charges de travail de production sont en cours d'exécution. 
+  Architecturez vos applications de manière à prendre en charge l'externalisation des données de configuration. 
+  Envisagez un modèle de déploiement bleu/vert. 
+  Implémentez des tests Canary pour valider la réussite du déploiement du logiciel. 
+  Utilisez des outils cryptographiques tels [AWS Signer](https://docs.aws.amazon.com/signer/latest/developerguide/Welcome.html) ou [AWS Key Management Service (AWS KMS)](https://aws.amazon.com/kms/) pour signer et vérifier les packages logiciels que vous déployez. 

## Ressources
<a name="resources"></a>

 **Bonnes pratiques associées :** 
+  [SEC11-BP02 Automatisation des tests tout au long du cycle de développement et de publication](sec_appsec_automate_testing_throughout_lifecycle.md) 

 **Documents connexes :** 
+  [Atelier CI/CD AWS](https://catalog.us-east-1.prod.workshops.aws/workshops/ef1c179d-8097-4f34-8dc3-0e9eb381b6eb/en-US/) 
+  [Accelerate deployments on AWS with effective governance](https://aws.amazon.com/blogs/architecture/accelerate-deployments-on-aws-with-effective-governance/) 
+  [Automatisation de déploiements sécurisés sans intervention](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/) 
+  [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/) 

 **Vidéos connexes :** 
+  [Hands-off: Automating continuous delivery pipelines at Amazon](https://www.youtube.com/watch?v=ngnMj1zbMPY) 

 **Exemples connexes :** 
+  [Déploiements bleu/vert avec AWS Fargate](https://catalog.us-east-1.prod.workshops.aws/workshops/954a35ee-c878-4c22-93ce-b30b25918d89/en-US) 