

# SEC11-BP06 Implantar software programaticamente
<a name="sec_appsec_deploy_software_programmatically"></a>

Faça implantações de software de forma programática quando possível. Essa abordagem diminui a probabilidade de falha em uma implantação ou da introdução de um problema inesperado devido a erro humano.

**Resultado desejado: **manter as pessoas longe dos dados é um princípio essencial da criação segura na Nuvem AWS. Esse princípio inclui como implantar seu software. 

 Os benefícios de não contar com pessoas para implantar software é a maior confiança de que o componente testado é o que será implantado e de que a implantação sempre é realizada de forma consistente. O software não deve precisar de alterações para funcionar em diferentes ambientes. O uso dos princípios de desenvolvimento de aplicações de 12 fatores, especificamente a externalização da configuração, possibilita implantar o mesmo código em vários ambientes sem a necessidade de alterações. Assinar de forma criptográfica os pacotes de software é uma boa maneira de garantir que nada tenha sido alterado entre os ambientes. O resultado geral dessa abordagem é reduzir o risco em seu processo de alterações e melhorar a consistência das versões do software. 

**Antipadrões comuns:**
+  Implantar software manualmente em produção. 
+  Realizar alterações manualmente no software para suprir diferentes ambientes. 

**Benefícios do estabelecimento desta prática recomendada:**
+  Maior confiança no processo de lançamento de software. 
+  Redução do risco de uma alteração com falha afetar a funcionalidade dos negócios. 
+  Maior cadência de lançamentos devido ao menor risco de alterações. 
+  Recurso de reversão automática para eventos inesperados durante a implantação. 
+  Capacidade de comprovar de forma criptográfica que o software testado é o software implantado. 

 **Nível de exposição a riscos se esta prática recomendada não for estabelecida:** alto 

## Orientações para a implementação
<a name="implementation-guidance"></a>

 Crie a infraestrutura de sua Conta da AWS para remover o acesso humano persistente dos ambientes e use ferramentas de CI/CD para realizar implantações. Projete suas aplicações de forma que os dados da configuração específica do ambiente sejam obtidos de uma fonte externa, como o [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html). Assine pacotes depois de testados e valide essas assinaturas durante a implantação. Configure seus pipelines de CI/CD para enviar código da aplicação e usar canários para confirmar a implantação bem-sucedida. Utilize ferramentas como o [AWS CloudFormation](https://aws.amazon.com/cloudformation/) ou o [AWS CDK](https://aws.amazon.com/cdk/) para definir sua infraestrutura; depois, use o [AWS CodeBuild](https://aws.amazon.com/codebuild/) e o [AWS CodePipeline](https://aws.amazon.com/codepipeline/) para realizar operações de CI/CD. 

### Etapas da implementação
<a name="implementation-steps"></a>
+  Criar pipelines de CI/CD bem definidos para simplificar o processo de implantação. 
+  O uso do [AWS CodeBuild](https://aws.amazon.com/codebuild/) e do [AWS Code Pipeline](https://aws.amazon.com/codepipeline/) para oferecer recurso de CI/CD simplifica a integração de teste de segurança aos seus pipelines. 
+  Seguir as orientações sobre separação de ambientes no whitepaper [Organizar seu ambiente da AWS com o uso de várias contas](https://docs.aws.amazon.com/whitepapers/latest/organizing-your-aws-environment/organizing-your-aws-environment.html). 
+  Garantir que não haja nenhum acesso humano persistente aos ambientes nos quais as workloads de produção estão em execução. 
+  Projetar as aplicações para oferecer compatibilidade com a externalização de dados de configuração. 
+  Considerar a implantação com o uso do modelo de implantação azul/verde. 
+  Implementar canários para validar a implantação bem-sucedida do software. 
+  Utilizar ferramentas criptográficas, como o [AWS Signer](https://docs.aws.amazon.com/signer/latest/developerguide/Welcome.html) ou o [AWS Key Management Service (AWS KMS)](https://aws.amazon.com/kms/), para assinar e confirmar os pacotes de software que você está implantando. 

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

 **Práticas recomendadas relacionadas:** 
+  [SEC11-BP02 Automatizar o teste durante o ciclo de vida de desenvolvimento e lançamento](sec_appsec_automate_testing_throughout_lifecycle.md) 

 **Documentos relacionados:** 
+  [Workshop sobre CI/CD da AWS](https://catalog.us-east-1.prod.workshops.aws/workshops/ef1c179d-8097-4f34-8dc3-0e9eb381b6eb/en-US/) 
+  [Acelerar implantações na AWS com governança efetiva](https://aws.amazon.com/blogs/architecture/accelerate-deployments-on-aws-with-effective-governance/) 
+  [Automatizar uma implantação prática e sem intervenção manual](https://aws.amazon.com/builders-library/automating-safe-hands-off-deployments/) 
+  [Assinatura de código com o uso de CA privada do AWS Certificate Manager e chaves assimétricas do AWS Key Management Service)](https://aws.amazon.com/blogs/security/code-signing-aws-certificate-manager-private-ca-aws-key-management-service-asymmetric-keys/) 
+  [Assinatura de código: um controle de integridade e confiança para o AWS Lambda](https://aws.amazon.com/blogs/aws/new-code-signing-a-trust-and-integrity-control-for-aws-lambda/) 

 **Vídeos relacionados:** 
+  [Sem intervenção manual: como automatizar os pipelines de entrega contínua na Amazon](https://www.youtube.com/watch?v=ngnMj1zbMPY) 

 **Exemplos relacionados:** 
+  [Implantações azul/verde com o AWS Fargate](https://catalog.us-east-1.prod.workshops.aws/workshops/954a35ee-c878-4c22-93ce-b30b25918d89/en-US) 