

# Segurança de aplicações
<a name="application-security"></a>

 A segurança de aplicações (AppSec) retrata o processo geral de como projetar, criar e testar as propriedades de segurança das workloads desenvolvidas por você. Você precisa treinar a equipe adequadamente em sua organização, entender as propriedades de segurança de sua infraestrutura de compilação e lançamento e utilizar a automação para identificar problemas de segurança. 

 Adotar testes de segurança de aplicações como parte regular do ciclo de vida de desenvolvimento de software (SDLC) e processos de pós-lançamento ajuda a garantir que você tenha um mecanismo estruturado para identificar, corrigir e impedir que problemas de segurança de aplicações entrem no ambiente de produção. 

 Sua metodologia de desenvolvimento de aplicações deve incluir controles de segurança à medida que você projeta, cria, implanta e opera suas workloads. Ao fazer isso, alinhe o processo para redução contínua de defeitos e redução da dívida técnica. Por exemplo, o uso de modelagem de ameaças na fase de design ajuda a detectar falhas de design precocemente, o que torna mais fácil e menos caro corrigi-las em contraposição a aguardar e mitigá-las posteriormente. 

 O custo e a complexidade para resolver defeitos geralmente serão menores quanto mais no princípio do SDLC você estiver. A forma mais fácil de resolver problemas é não os ter. Por isso, começar com um modelo de ameaças ajuda você a se concentrar nos resultados corretos da fase de design. À medida que seu programa de AppSec amadurece, é possível aumentar a quantidade de testes realizados usando automação, aumentar a fidelidade do feedback para os criadores e reduzir o tempo necessário para as avaliações de segurança. Todas essas ações melhoram a qualidade do software desenvolvido e aumentam a velocidade de entrega de recursos à produção. 

 Essas diretrizes de implementação focam quatro áreas: organização e cultura, segurança *do* pipeline, segurança *no* pipeline e gerenciamento de dependências. Cada área oferece um conjunto de princípios que você pode implementar, bem como uma visão completa de como projetar, desenvolver, criar, implantar e operar workloads. 

 Na AWS, há várias abordagens para lidar com seu programa de segurança de aplicações. Algumas dessas abordagens dependem de tecnologia, enquanto outras focam a equipe e aspectos organizacionais do programa de segurança de aplicações. 

**Topics**
+ [SEC11-BP01 Treinar para segurança de aplicações](sec_appsec_train_for_application_security.md)
+ [SEC11-BP02 Automatizar o teste durante o ciclo de vida de desenvolvimento e lançamento](sec_appsec_automate_testing_throughout_lifecycle.md)
+ [SEC11-BP03 Realizar teste de penetração regular](sec_appsec_perform_regular_penetration_testing.md)
+ [SEC11-BP04 Realizar revisões de código](sec_appsec_manual_code_reviews.md)
+ [SEC11-BP05 Centralizar serviços para pacotes e dependências](sec_appsec_centralize_services_for_packages_and_dependencies.md)
+ [SEC11-BP06 Implantar software programaticamente](sec_appsec_deploy_software_programmatically.md)
+ [SEC11-BP07 Avaliar regularmente as propriedades de segurança dos pipelines](sec_appsec_regularly_assess_security_properties_of_pipelines.md)
+ [SEC11-BP08 Criar um programa que incorpore a propriedade de segurança nas equipes de workload](sec_appsec_build_program_that_embeds_security_ownership_in_teams.md)

# SEC11-BP01 Treinar para segurança de aplicações
<a name="sec_appsec_train_for_application_security"></a>

 Forneça treinamento à sua equipe sobre práticas seguras de desenvolvimento e operação, o que os ajuda a criar software seguro e de alta qualidade. Essa prática ajuda sua equipe a prevenir, detectar e corrigir problemas de segurança no início do ciclo de vida do desenvolvimento. Considere um treinamento que abranja modelagem de ameaças, práticas seguras de codificação e uso de serviços para configurações e operações seguras. Forneça à sua equipe acesso ao treinamento por meio de recursos de autoatendimento e colete regularmente seus comentários para melhoria contínua. 

 **Resultado desejado:** você equipa sua equipe com o conhecimento e as habilidades necessárias para projetar e criar software com a segurança em mente desde o início. Por meio de treinamento em modelagem de ameaças e práticas seguras de desenvolvimento, sua equipe tem uma compreensão profunda dos possíveis riscos de segurança e de como mitigá-los durante o ciclo de vida de desenvolvimento de software (SDLC). Essa abordagem proativa de segurança faz parte da cultura da sua equipe, e você pode identificar e corrigir possíveis problemas de segurança desde o início. Como resultado, sua equipe fornece software e recursos seguros e de alta qualidade com mais eficiência, o que acelera o cronograma geral de entrega. Você tem uma cultura de segurança colaborativa e inclusiva em sua organização, na qual a propriedade da segurança é compartilhada por todos os criadores. 

 **Práticas comuns que devem ser evitadas:** 
+  Aguardar uma avaliação de segurança e só depois considerar as propriedades de segurança de um sistema. 
+  Deixar todas as decisões de segurança para uma equipe de segurança central. 
+  Não comunicar como as decisões tomadas no SDLC se relacionam às expectativas ou políticas de segurança gerais da organização. 
+  Iniciar o processo de avaliação da segurança muito tarde. 

 **Benefícios de implementar esta prática recomendada:** 
+  Melhor conhecimento dos requisitos organizacionais para a segurança na fase inicial do ciclo de desenvolvimento. 
+  Ser capaz de identificar e solucionar possíveis problemas de segurança com maior rapidez, promovendo uma entrega de recursos mais rápida. 
+  Maior qualidade do software e dos sistemas. 

 **Nível de risco exposto se esta prática recomendada não for estabelecida:** Médio 

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

 Para criar software seguro e de alta qualidade, forneça treinamento à sua equipe sobre práticas comuns para desenvolvimento e operação de aplicações com segurança. Essa prática pode ajudar sua equipe a prevenir, detectar e corrigir problemas de segurança no início do ciclo de vida do desenvolvimento, o que pode acelerar o cronograma de entrega. 

 Para alcançar essa prática, considere treinar a equipe em modelagem de ameaças usando recursos da AWS, como o [workshop de modelagem de ameaças](https://catalog.workshops.aws/threatmodel/en-US). A modelagem de ameaças pode ajudar sua equipe a entender possíveis riscos de segurança e projetar sistemas com a segurança em mente desde o início. Além disso, você pode fornecer acesso ao [Treinamento da AWS and Certification](https://www.aws.training/LearningLibrary?filters=Language%3A1%20Domain%3A27), indústria ou treinamento de parceiros da AWS sobre práticas seguras de desenvolvimento. Para conferir mais detalhes sobre uma abordagem abrangente para projetar, desenvolver, proteger e operar com eficiência em grande escala, consulte [AWS DevOps Guidance](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/devops-guidance.html). 

 Defina e comunique claramente o processo de avaliação da segurança da organização e descreva as responsabilidades da sua equipe, da equipe de segurança e de outras partes interessadas. Publique orientações de autoatendimento, exemplos de código e modelos que demonstrem como atender aos requisitos de segurança. Você pode usar serviços da AWS, como [AWS CloudFormation](https://aws.amazon.com/cloudformation/), [constructos do AWS Cloud Development Kit (AWS CDK) (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/constructs.html) e [Service Catalog](https://aws.amazon.com/servicecatalog/), para fornecer configurações pré-aprovadas e seguras e reduzir a necessidade de configurações personalizadas. 

 Colete feedback regularmente da equipe sobre a experiência com o processo e o treinamento de avaliação da segurança e use esse feedback para promover melhorias contínuas. Conduza dias de jogos ou campanhas de combate de bugs para identificar e resolver problemas de segurança e, ao mesmo tempo, aprimorar as habilidades de sua equipe. 

### Etapas de implementação
<a name="implementation-steps"></a>

1.  **Identifique as necessidades de treinamento**: avalie o nível atual de habilidades e as lacunas de conhecimento da sua equipe em relação às práticas de desenvolvimento seguro por meio de pesquisas, revisões de código ou discussões com os membros da equipe. 

1.  **Planeje o treinamento**: com base nas necessidades identificadas, crie um plano de treinamento que aborde tópicos relevantes, como modelagem de ameaças, práticas seguras de codificação, testes de segurança e práticas de implantação segura. Empregue recursos, como o [workshop de modelagem de ameaças](https://catalog.workshops.aws/threatmodel/en-US), o [Treinamento da AWS and Certification](https://www.aws.training/LearningLibrary?filters=Language%3A1%20Domain%3A27) e programas de treinamento do setor ou de parceiros da AWS. 

1.  **Agende e ofereça treinamento**: agende sessões de treinamento ou workshops regulares para sua equipe. Eles podem ser conduzidos por um instrutor ou individualizados, dependendo das preferências e da disponibilidade da sua equipe. Incentive exercícios práticos e exemplos práticos para reforçar o aprendizado. 

1.  **Defina um processo de análise de segurança**: colabore com a equipe de segurança e outras partes interessadas para definir claramente o processo de revisão de segurança das aplicações. Documente as responsabilidades de cada equipe ou indivíduo envolvido no processo, incluindo sua equipe de desenvolvimento, equipe de segurança e outras partes interessadas relevantes. 

1.  **Crie recursos de autoatendimento**: desenvolva diretrizes de autoatendimento, exemplos de código e modelos que demonstrem como atender aos requisitos de segurança da sua organização. Considere serviços da AWS, como [CloudFormation](https://aws.amazon.com/cloudformation/), [constructos do AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/constructs.html) e [Service Catalog](https://aws.amazon.com/servicecatalog/), para fornecer configurações pré-aprovadas e seguras e reduzir a necessidade de configurações personalizadas. 

1.  **Comunique-se e socialize**: comunique com eficácia o processo de revisão de segurança e os recursos de autoatendimento disponíveis para sua equipe. Conduza sessões de treinamento ou workshops para familiarizá-los com esses recursos e verificar se eles entendem como usá-los. 

1.  **Obtenha feedback e melhore**: colete feedback regularmente da equipe sobre a experiência com o processo e o treinamento de avaliação da segurança. Use esse feedback para identificar áreas de melhoria e refinar continuamente os materiais de treinamento, os recursos de autoatendimento e o processo de revisão de segurança. 

1.  **Realize exercícios de segurança**: organize dias de jogo ou campanhas de combate a bugs para identificar e resolver problemas de segurança nas aplicações. Esses exercícios não apenas ajudam a descobrir possíveis vulnerabilidades, mas também servem como oportunidades de aprendizado prático para sua equipe, aprimorando suas habilidades em desenvolvimento e operação seguros. 

1.  **Continue aprendendo e melhorando:** incentive sua equipe a se manter atualizada com as mais recentes práticas, ferramentas e técnicas de desenvolvimento seguro. Revise e atualize regularmente os materiais e recursos de treinamento para refletir o cenário de segurança em evolução e as práticas recomendadas. 

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

 **Práticas recomendadas relacionadas:** 
+  [SEC11-BP08 Criar um programa que incorpore a propriedade de segurança nas equipes de workload](sec_appsec_build_program_that_embeds_security_ownership_in_teams.md) 

 **Documentos relacionados:** 
+  [Treinamento da AWS e certificação](https://www.aws.training/LearningLibrary?query=&filters=Language%3A1%20Domain%3A27&from=0&size=15&sort=_score&trk=el_a134p000007C9OtAAK&trkCampaign=GLBL-FY21-TRAINCERT-800-Security&sc_channel=el&sc_campaign=GLBL-FY21-TRAINCERT-800-Security-Blog&sc_outcome=Training_and_Certification&sc_geo=mult) 
+  [Como pensar sobre a governança da segurança na nuvem](https://aws.amazon.com/blogs/security/how-to-think-about-cloud-security-governance/) 
+  [Como abordar a modelagem de ameaças](https://aws.amazon.com/blogs/security/how-to-approach-threat-modeling/) 
+  [Acelerar o treinamento — AWS Skills Guild](https://docs.aws.amazon.com/whitepapers/latest/public-sector-cloud-transformation/accelerating-training-the-aws-skills-guild.html) 
+  [AWS DevOps Sagas](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/the-devops-sagas.html) 

 **Vídeos relacionados:** 
+  [Segurança proativa: considerações e abordagens](https://www.youtube.com/watch?v=CBrUE6Qwfag) 

 **Exemplos relacionados:** 
+  [Workshop sobre modelagem de ameaças](https://catalog.workshops.aws/threatmodel) 
+  [Conscientização do setor para desenvolvedores](https://owasp.org/www-project-top-ten/) 

 **Serviços relacionados:** 
+  [AWS CloudFormation](https://aws.amazon.com/cloudformation/) 
+  [AWS Cloud Development Kit (AWS CDK) (AWS CDK) Constructos do](https://docs.aws.amazon.com/cdk/v2/guide/constructs.html) 
+  [Service Catalog](https://aws.amazon.com/servicecatalog/) 

# SEC11-BP02 Automatizar o teste durante o ciclo de vida de desenvolvimento e lançamento
<a name="sec_appsec_automate_testing_throughout_lifecycle"></a>

 Automatize o teste das propriedades de segurança durante o ciclo de vida de desenvolvimento e lançamento. Com a automação, é mais fácil identificar de forma consistente e repetível possíveis problemas no software antes do lançamento, o que reduz o risco de problemas de segurança no software que está sendo fornecido. 

**Resultado desejado:** o objetivo dos testes automatizados é fornecer uma forma programática de detectar possíveis problemas com antecedência e frequência durante todo o ciclo de vida do desenvolvimento. Ao automatizar o teste de regressão, você pode executar novamente testes funcionais e não funcionais para verificar se o software testado anteriormente ainda funciona da forma esperada após uma alteração. Ao definir testes de unidade de segurança para conferir configurações incorretas comuns, como uma autenticação ausente ou danificada, é possível identificar e resolver esses problemas logo no início do processo de desenvolvimento. 

 A automação de testes utiliza casos de teste para um propósito específico para validação de aplicações, com base nos requisitos e na funcionalidade desejada da aplicação. O resultado dos testes automatizados baseia-se na comparação da saída do teste gerado com a respectiva saída esperada, o que acelera o ciclo de vida dos testes em geral. As metodologias de teste, como teste de regressão e pacotes de teste de unidade, são mais adequadas para automação. A automação dos testes de propriedades de segurança possibilita aos criadores receber feedback automatizado sem precisar esperar por uma avaliação da segurança. Os testes automatizados em forma de análise de código estático ou dinâmico podem melhorar a qualidade do código e ajudar a detectar possíveis problemas de software no ciclo de vida de desenvolvimento. 

**Práticas comuns que devem ser evitadas: **
+  Não comunicar os casos de teste e os resultados dos testes automatizados. 
+  Realizar os testes automatizados somente antes de um lançamento. 
+  Automatizar casos de teste com requisitos que mudam com frequência. 
+  Não fornecer orientações sobre como abordar os resultados dos testes de segurança. 

**Benefícios de implementar esta prática recomendada: **
+  Redução da dependência de pessoas que avaliam as propriedades de segurança dos sistemas. 
+  Descobertas consistentes em vários fluxos de trabalho que melhoram a consistência. 
+  Redução da probabilidade de introduzir problemas de segurança no software de produção. 
+  Redução do período de tempo entre a detecção e a correção devido à detecção precoce dos problemas de software. 
+  Maior visibilidade do problema sistêmico ou repetido entre os vários fluxos de trabalho, o que pode ser utilizado para promover melhorias em toda a organização. 

**Nível de risco exposto se esta prática recomendada não for estabelecida:** Médio 

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

Ao criar um software, adote vários mecanismos de teste para garantir que você esteja testando os requisitos funcionais da aplicação com base na respectiva lógica de negócios e em requisitos não funcionais, os quais se focam a confiabilidade, a performance e a segurança da aplicação. 

 O teste de segurança de aplicação estática (SAST) analisa padrões de segurança anômalos no código-fonte e fornece indicações de código propenso a defeitos. O SAST depende de entradas estáticas, como documentação (especificação de requisitos, documentação e especificações de design) e código-fonte da aplicação, para testar uma série de problemas de segurança conhecidos. Os analisadores de código estático podem ajudar a acelerar a análise de grandes volumes de código. O [NIST Quality Group](https://www.nist.gov/itl/ssd/software-quality-group) fornece uma comparação de [analisadores de segurança de código-fonte](https://www.nist.gov/itl/ssd/software-quality-group/source-code-security-analyzers), que inclui ferramentas de código aberto para [scanners de código em bytes](https://samate.nist.gov/index.php/Byte_Code_Scanners.html) e [scanners de código binário](https://samate.nist.gov/index.php/Binary_Code_Scanners.html).

 Complemente seu teste estático com metodologias de teste de segurança de análise dinâmica (DAST), as quais realizam testes na aplicação em execução a fim de identificar comportamento possivelmente inesperado. O teste dinâmico pode ser utilizado para detectar possíveis problemas que não são detectáveis por meio de análise estática. Por meio dos testes nos estágios de repositório de código, compilação e pipeline, é possível impedir que diferentes tipos de problema em potencial ocorram no código. O [Amazon Q Developer](https://aws.amazon.com/q/developer/) fornece recomendações de código, incluindo verificação de segurança, no IDE do construtor. O [Amazon CodeGuru Security](https://aws.amazon.com/codeguru/) pode identificar problemas críticos, problemas de segurança e bugs difíceis de encontrar durante o desenvolvimento da aplicação e fornece recomendações para melhorar a qualidade do código. A extração da lista de materiais de software (SBOM) também permite extrair um registro formal contendo os detalhes e os relacionamentos dos vários componentes usados na construção do seu software. Isso permite que você informe o gerenciamento de vulnerabilidades e identifique rapidamente as dependências de software ou componentes e os riscos da cadeia de suprimentos. 

 O workshop [Security for Developers](https://catalog.workshops.aws/sec4devs) usa ferramentas para desenvolvedores da AWS, como, [AWS CodeBuild](https://aws.amazon.com/codebuild/), [AWS CodeCommit](https://aws.amazon.com/codecommit/) e [AWS CodePipeline](https://aws.amazon.com/codepipeline/), para automação do pipeline de lançamento que inclui metodologias de teste SAST e DAST. 

 À medida que você avançar no SDLC, estabeleça um processo iterativo que inclua avaliações de aplicação periódicas com sua equipe de segurança. O feedback coletado dessas avaliações de segurança deve ser abordado e validado como parte de sua revisão de prontidão do lançamento. Essas avaliações estabelecem um procedimento de segurança robusto de aplicações e fornecem aos criadores feedback útil para resolver possíveis problemas. 

### Etapas de implementação
<a name="implementation-steps"></a>
+  Implemente um IDE consistente, análise de código e ferramentas de CI/CD que incluam teste de segurança. 
+  Considere quando no SDLC é adequado bloquear pipelines em vez de apenas notificar os criadores de que problemas precisam ser corrigidos. 
+  O [Automated Security Helper (ASH)](https://github.com/awslabs/automated-security-helper) é um exemplo de ferramenta de digitalização de segurança de código aberto. 
+  Realizar testes ou revisões de código usando ferramentas automatizadas, como o [Amazon Q Developer](https://aws.amazon.com/q/developer/) integrado aos IDEs de desenvolvedores e o [Amazon CodeGuru Security](https://aws.amazon.com/codeguru/) para verificar o código na confirmação, ajuda os criadores a obter feedback no momento certo. 
+  Ao compilar usando o AWS Lambda, é possível usar o [Amazon Inspector](https://docs.aws.amazon.com/inspector/latest/user/scanning-lambda.html) para verificar o código da aplicação em suas funções. 
+  Quando testes automatizados são incluídos em pipelines de CI/CD, é necessário usar um sistema de emissão de tíquetes para rastrear a notificação e a correção de problemas de software. 
+  Para testes de segurança que podem gerar descobertas, a vinculação com orientações para correção ajuda os criadores a melhorar a qualidade do código. 
+  Analise regularmente as descobertas das ferramentas automatizadas para priorizar a próxima automação, o treinamento de criadores ou a campanha de conscientização. 
+  Para extrair o SBOM como parte de seus pipelines de CI/CD, use o [Amazon Inspector SBOM Generator](https://docs.aws.amazon.com/inspector/latest/user/sbom-generator.html) para produzir SBOMs para arquivos, imagens de contêineres, diretórios, sistemas locais e binários Go e Rust compilados no formato CycloneDX SBOM. 

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

 **Práticas recomendadas relacionadas:** 
+  [DevOps Guidance: DL.CR.3 Establish clear completion criteria for code tasks](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/dl.cr.3-establish-clear-completion-criteria-for-code-tasks.html) 

 **Documentos relacionados:** 
+  [Entrega e implantação contínuas](https://aws.amazon.com/devops/continuous-delivery/) 
+  [AWS Parceiros de competência DevOps da](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 Parceiros de competência Segurança da para segurança de aplicações](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) 
+  [Escolher uma abordagem de CI/CD do Well-Architected](https://aws.amazon.com/blogs/devops/choosing-well-architected-ci-cd-open-source-software-aws-services/) 
+  [Detecção de segredos no Amazon CodeGuru Security](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/recommendations.html#secrets-detection) 
+  [Biblioteca de detecção de segurança do Amazon CodeGuru Security](https://docs.aws.amazon.com/codeguru/detector-library/) 
+  [Acelerar as implantações na AWS com uma governança efetiva](https://aws.amazon.com/blogs/architecture/accelerate-deployments-on-aws-with-effective-governance/) 
+  [Como a AWS aborda a automatização de implantações seguras e sem intervenção manual](https://aws.amazon.com/builders-library/automating-safe-hands-off-deployments/) 
+  [Como o Amazon CodeGuru Security ajuda você a equilibrar de forma eficaz a segurança e a velocidade](https://aws.amazon.com/blogs/security/how_amazon_codeguru_security_helps_effectively_balance_security_and_velocity/) 

 **Vídeos relacionados:**
+  [Sem intervenção manual: como automatizar os pipelines de entrega contínua na Amazon](https://www.youtube.com/watch?v=ngnMj1zbMPY) 
+  [Automatizar pipelines de CI/CD entre contas](https://www.youtube.com/watch?v=AF-pSRSGNks) 
+  [O processo de desenvolvimento de software na Amazon](https://www.youtube.com/watch?t=1340&v=52SC80SFPOw&feature=youtu.be) 
+  [Testar software e sistemas na Amazon](https://www.youtube.com/watch?v=o1sc3cK9bMU&t) 

 **Exemplos relacionados:**
+  [Conscientização do setor para desenvolvedores](https://owasp.org/www-project-top-ten/) 
+  [Auxiliar de segurança automatizado (ASH)](https://github.com/awslabs/automated-security-helper) 
+  [AWS CodePipeline Governance - Github](https://github.com/awslabs/aws-codepipeline-governance) 

# SEC11-BP03 Realizar teste de penetração regular
<a name="sec_appsec_perform_regular_penetration_testing"></a>

Realize um teste de penetração regular do software. Esse mecanismo ajuda a identificar possíveis problemas de software que não podem ser detectados pelo teste automatizado ou por uma revisão manual do código. Ele também ajuda você a entender a eficácia dos controles de detecção. O teste de penetração deve tentar determinar se o software pode ser executado de formas inesperadas, por exemplo, expondo dados que devem ser protegidos ou concedendo permissões mais amplas que o esperado.

 

**Resultado desejado:** o teste de penetração é usado para detectar, corrigir e validar as propriedades de segurança da sua aplicação. O teste de penetração regular e agendado deve ser realizado como parte do ciclo de vida de desenvolvimento de software (SDLC). As descobertas do teste de penetração devem ser abordadas antes do lançamento do software. As descobertas do teste de penetração devem ser analisaras para identificar se há problemas que podem ser encontrados usando a automação. Ter um processo de teste de penetração regular e repetível que inclua um mecanismo de feedback ativo ajuda a transmitir as orientações aos criadores e melhora a qualidade do software. 

**Práticas comuns que devem ser evitadas: **
+  Realizar um teste de penetração somente para problemas de segurança conhecidos ou prevalentes. 
+  Realizar um teste de penetração em aplicações sem ferramentas e bibliotecas de terceiros dependentes. 
+  Realizar um teste de penetração em aplicações em busca de problemas de segurança de pacote e não avaliar a lógica de negócios implementada. 

**Benefícios de implementar esta prática recomendada:**
+  Maior confiança nas propriedades de segurança do software antes do lançamento. 
+  Oportunidade de identificar padrões de aplicação preferenciais, o que aumenta a qualidade do software. 
+  Um ciclo de feedback que identifica mais cedo no ciclo de desenvolvimento quando a automação ou treinamento adicional pode melhorar as propriedades de segurança do software. 

**Nível de risco exposto se esta prática recomendada não for estabelecida:** Alto 

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

 O teste de penetração é um exercício de teste de segurança estruturado em que você executa cenários de violação de segurança planejados a fim de detectar, corrigir e validar controles de segurança. Os testes de penetração começam com o reconhecimento, fase durante a qual os dados são coletados com base no design atual da aplicação e nas respectivas dependências. Uma lista selecionada de cenários de teste específicos de segurança é criada e executada. A principal finalidade desses testes é revelar problemas de segurança em sua aplicação, os quais podem ser explorados para obter acesso não intencional ao seu ambiente ou acesso não autorizado aos dados. É necessáraio realizar o teste de penetração ao lançar novos recursos ou sempre que sua aplicação passar por alterações importantes na implementação técnica ou de funções. 

 É necessário identificar o estágio mais apropriado do ciclo de vida de desenvolvimento para realizar o teste de penetração. Esse teste deve ocorrer em uma fase tardia o suficiente para que a funcionalidade do sistema esteja próxima ao estado de lançamento pretendido, mas com tempo suficiente para corrigir todos os problemas. 

### Etapas de implementação
<a name="implementation-steps"></a>
+  Tenha um processo estruturado de como o teste de penetração é definido. Basear esse processo no [modelo de ameaças](https://aws.amazon.com/blogs/security/how-to-approach-threat-modeling/) é uma boa maneira de manter o contexto. 
+  Identifique o estágio apropriado do ciclo de vida de desenvolvimento para realizar o teste de penetração, o qual deverá ocorrer quando houver o mínimo de alterações esperadas na aplicação e tempo suficiente para realizar a correção. 
+  Treine os criadores sobre o que esperar das descobertas do teste de penetração e como ter informações sobre correção. 
+  Utilize ferramentas para acelerar o processo de testes de penetração automatizando testes comuns ou repetíveis. 
+  Analise as descobertas do teste de penetração para identificar problemas de segurança sistêmicos e utilize esses dados para embasar testes automatizados adicionais e a instrução contínua dos criadores. 

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

 **Práticas recomendadas relacionadas:** 
+  [SEC11-BP01 Treinar para segurança de aplicações](sec_appsec_train_for_application_security.md) 
+ [SEC11-BP02 Automatizar o teste durante o ciclo de vida de desenvolvimento e lançamento](sec_appsec_automate_testing_throughout_lifecycle.md)

 **Documentos relacionados:** 
+  O [Teste de penetração da AWS](https://aws.amazon.com/security/penetration-testing/) fornece orientação detalhada para testes de penetração na AWS 
+  [Acelerar as implantações na AWS com uma governança efetiva](https://aws.amazon.com/blogs/architecture/accelerate-deployments-on-aws-with-effective-governance/) 
+  [AWS Parceiros de competência Segurança da](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=*all&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) 
+  [Modernizar sua arquitetura de testes de penetração no AWS Fargate](https://aws.amazon.com/blogs/architecture/modernize-your-penetration-testing-architecture-on-aws-fargate/) 
+  [AWS Fault Injection Simulator](https://aws.amazon.com/fis/) 

 **Exemplos relacionados:** 
+  [Automatizar os testes de API com o AWS CodePipeline](https://github.com/aws-samples/aws-codepipeline-codebuild-with-postman) (GitHub) 
+  [Auxiliar de segurança automatizado](https://github.com/aws-samples/automated-security-helper) (GitHub) 

# SEC11-BP04 Realizar revisões de código
<a name="sec_appsec_manual_code_reviews"></a>

 Implemente revisões de código para ajudar a verificar a qualidade e a segurança do software que está sendo desenvolvido. As revisões de código envolvem a participação de outros membros da equipe, além do autor do código original, na revisão do código em busca de possíveis problemas, vulnerabilidades e aderência aos padrões de codificação e às práticas recomendadas. Esse processo ajuda a detectar erros, inconsistências e falhas de segurança que podem ter sido ignoradas pelo desenvolvedor original. Use ferramentas automatizadas para ajudar nas revisões de código. 

 **Resultado desejado:** você inclui revisões de código durante o desenvolvimento para aumentar a qualidade do software que está sendo escrito. Você aprimora as habilidades dos membros menos experientes da equipe por meio de aprendizados identificados durante a revisão do código. Identifique oportunidades de automação e ofereça suporte ao processo de revisão de código usando ferramentas e testes automatizados. 

 **Práticas comuns que devem ser evitadas:** 
+  Não revisar o código antes da implantação. 
+  A mesma pessoa escreve e revisa o código. 
+  Não utilizar a automação para auxiliar ou orquestrar as revisões de código. 
+  Não treinar os criadores em segurança de aplicações antes de revisarem o código. 

**Benefícios de implementar esta prática recomendada:**
+  Código de melhor qualidade. 
+  Maior consistência do desenvolvimento do código por meio da reutilização de abordagens comuns. 
+  Redução no número de problemas descobertos durante o teste de penetração e em estágios posteriores. 
+  Maior transferência de conhecimentos na equipe. 

 **Nível de risco exposto se esta prática recomendada não for estabelecida:** Médio 

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

 As revisões de código ajudam a verificar a qualidade e a segurança do software durante o desenvolvimento. As revisões manuais envolvem a participação de um membro da equipe, além do autor do código original, na revisão do código em busca de possíveis problemas, vulnerabilidades e aderência aos padrões de codificação e às práticas recomendadas. Esse processo ajuda a detectar erros, inconsistências e falhas de segurança que podem ter sido ignoradas pelo desenvolvedor original. 

 Considere o [Amazon CodeGuru Security](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/welcome.html) para ajudar a conduzir análises automatizadas de código. O CodeGuru Security usa machine learning e raciocínio automatizado para revisar o código e identificar possíveis vulnerabilidades de segurança e problemas de codificação. Integre revisões automatizadas de código com seus repositórios de código e pipelines de integração contínua/implantação contínua (CI/CD). 

### Etapas de implementação
<a name="implementation-steps"></a>

1.  **Estabeleça um processo de revisão de código:** 
   +  Defina quando as revisões de código devem ocorrer, como antes de mesclar o código na ramificação principal ou antes da implantação na produção. 
   +  Determine quem deve estar envolvido no processo de revisão de código, como membros da equipe, desenvolvedores seniores e especialistas em segurança. 
   +  Decida sobre a metodologia de revisão de código, incluindo o processo e as ferramentas a serem usadas. 

1.  **Configure ferramentas de revisão de código:** 
   +  Avalie e selecione ferramentas de revisão de código que atendam às necessidades da sua equipe, como Pull Requests do GitHub ou CodeGuru Security 
   +  Integre as ferramentas escolhidas com seus repositórios de código e pipelines de CI/CD existentes. 
   +  Configure as ferramentas para impor os requisitos de revisão de código, como o número mínimo de revisores e as regras de aprovação. 

1.  **Defina uma lista de verificação e diretrizes de revisão de código:** 
   +  Crie uma lista de verificação ou diretrizes de revisão de código que descrevam o que deve ser revisado. Considere fatores como qualidade do código, vulnerabilidades de segurança, aderência aos padrões de codificação e desempenho. 
   +  Compartilhe a lista de verificação ou as diretrizes com a equipe de desenvolvimento e verifique se todos entendem as expectativas. 

1.  **Treine desenvolvedores sobre as práticas recomendadas de revisão de código:** 
   +  Forneça treinamento à equipe sobre como conduzir revisões de código eficazes. 
   +  Eduque a equipe sobre os princípios de segurança de aplicações e as vulnerabilidades comuns a serem observadas durante as revisões. 
   +  Incentive o compartilhamento de conhecimento e sessões de programação em pares para aprimorar as habilidades dos membros menos experientes da equipe. 

1.  **Implemente o processo de revisão de código:** 
   +  Integre a etapa de revisão de código ao seu fluxo de trabalho de desenvolvimento, como criar uma pull request e designar revisores. 
   +  Exija que as alterações de código passem por uma revisão antes da fusão ou implantação. 
   +  Incentive a comunicação aberta e o feedback construtivo durante o processo de revisão. 

1.  **Monitore e melhore:** 
   +  Analise regularmente a eficácia do seu processo de revisão de código e obtenha feedback da equipe. 
   +  Identifique oportunidades de automação ou melhorias nas ferramentas para agilizar o processo de revisão de código. 
   +  Atualize e refine continuamente a lista de verificação ou as diretrizes de revisão de código com base nos aprendizados e nas práticas recomendadas do setor. 

1.  **Promova uma cultura de revisão de código:** 
   +  Enfatize a importância das revisões de código para manter a qualidade e a segurança do código. 
   +  Comemore os sucessos e os aprendizados do processo de revisão de código. 
   +  Incentive um ambiente colaborativo e solidário em que os desenvolvedores se sintam à vontade para dar e receber feedback. 

## 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:** 
+  [DevOps Guidance: DL.CR.2 Perform peer review for code changes](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/dl.cr.2-perform-peer-review-for-code-changes.html) 
+  [Sobre solicitações pull no GitHub](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests) 

 **Exemplos relacionados:** 
+  [Automatizar as revisões de código com o Amazon CodeGuru Security](https://aws.amazon.com/blogs/devops/automate-code-reviews-with-amazon-codeguru-reviewer/) 
+  [Automatizar a detecção de vulnerabilidades e bugs de segurança em pipelines de CI/CD usando a CLI do Amazon CodeGuru Security](https://aws.amazon.com/blogs/devops/automating-detection-of-security-vulnerabilities-and-bugs-in-ci-cd-pipelines-using-amazon-codeguru-reviewer-cli/) 

 **Vídeos relacionados:** 
+  [Melhoria contínua da qualidade do código com o Amazon CodeGuru Security](https://www.youtube.com/watch?v=iX1i35H1OVw) 

# SEC11-BP05 Centralizar serviços para pacotes e dependências
<a name="sec_appsec_centralize_services_for_packages_and_dependencies"></a>

 Forneça serviços centralizados para que as equipes obtenham pacotes de software e outras dependências. Isso permite validar pacotes antes que eles sejam incluídos no software que você escreve e fornece uma fonte de dados para a análise do software que está sendo usado na sua organização. 

 **Resultado desejado:** você cria sua workload a partir de pacotes de software externos, além do código que você escreve. Isso simplifica a implementação de funcionalidades que são utilizadas repetidamente, como um analisador JSON ou uma biblioteca de criptografia. Você centraliza as fontes desses pacotes e dependências para que a equipe de segurança possa validá-los antes que eles sejam utilizados. Você utiliza essa abordagem com os fluxos de testes manuais e automatizados para aumentar a confiança na qualidade do software que desenvolve. 

 **Práticas comuns que devem ser evitadas:** 
+  Extrair pacotes de repositórios arbitrários na internet. 
+  Não testar novos pacotes antes de disponibilizá-los aos criadores. 

**Benefícios de implementar esta prática recomendada:**
+  Melhor entendimento de quais pacotes estão sendo utilizados no software que está sendo criado. 
+  Capacidade de notificar as equipes de workload quando um pacote precisa ser atualizado com base no entendimento de quem está usando o quê. 
+  Redução do risco de um pacote com problemas ser incluído em seu software. 

 **Nível de risco exposto se esta prática recomendada não for estabelecida:** Médio 

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

 Forneça serviços centralizados para pacotes e dependências de uma forma simples para os criadores consumirem. Serviços centralizados podem ser centralizados logicamente em vez de implementados como um sistema monolítico. Essa abordagem possibilita fornecer serviços de uma forma que atenda às necessidades dos criadores. Você deve implementar uma forma eficiente de adicionar pacotes ao repositório quando ocorrerem atualizações ou surgirem novos requisitos. Serviços da AWS como o [AWS CodeArtifact](https://aws.amazon.com/codeartifact/) ou soluções similares de parceiros da AWS oferecem uma maneira de fornecer esse recurso. 

### Etapas de implementação
<a name="implementation-steps"></a>
+ Implemente um serviço de repositório centralizado logicamente disponível em todos os ambientes onde o software é desenvolvido. 
+ Inclua acesso ao repositório como parte do processo de provisionamento da Conta da AWS.
+ Crie automação para testar pacotes antes de serem publicados em um repositório.
+ Mantenha métricas dos pacotes mais utilizados, das linguagens e das equipes com a maior quantidade de alterações.
+  Forneça um mecanismo automatizado para as equipes de criadores solicitarem novos pacotes e enviarem feedback. 
+  Verifique regularmente os pacotes em seu repositório para identificar o possível impacto de problemas recém-descobertos. 

## 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:** 
+ [ DevOps Guidance: DL.CS.2 Sign code artifacts after each build ](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/dl.cs.2-sign-code-artifacts-after-each-build.html)
+ [ Níveis da cadeia de suprimentos para artefatos de software (SLSA) ](https://slsa.dev/)

 **Exemplos relacionados:** 
+  [Acelerar as implantações na AWS com uma governança efetiva](https://aws.amazon.com/blogs/architecture/accelerate-deployments-on-aws-with-effective-governance/) 
+  [Aumentar a segurança do seu pacote com o kit de ferramentas CodeArtifact Package Origin Control](https://aws.amazon.com/blogs/devops/tighten-your-package-security-with-codeartifact-package-origin-control-toolkit/) 
+  [Pipeline de publicação de pacotes multirregionais](https://github.com/aws-samples/multi-region-python-package-publishing-pipeline) (GitHub) 
+  [Publicar módulos Node.js no AWS CodeArtifact usando o AWS CodePipeline](https://github.com/aws-samples/aws-codepipeline-publish-nodejs-modules) (GitHub) 
+  [Exemplo do Java CodeArtifact Pipeline no AWS CDK](https://github.com/aws-samples/aws-cdk-codeartifact-pipeline-sample) (GitHub) 
+  [Distribuir pacotes .NET NuGet privados com o AWS CodeArtifact](https://github.com/aws-samples/aws-codeartifact-nuget-dotnet-pipelines) (GitHub) 

 **Vídeos relacionados:** 
+  [Segurança proativa: considerações e abordagens](https://www.youtube.com/watch?v=CBrUE6Qwfag) 
+  [A filosofia de segurança da AWS (re:Invent 2017)](https://www.youtube.com/watch?v=KJiCfPXOW-U) 
+  [Quando a segurança, a proteção e a urgência são importantes: como lidar com o Log4Shell](https://www.youtube.com/watch?v=pkPkm7W6rGg) 

# 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:** a versão da workload que você testa é a versão que você implanta, e a implantação é sempre executada de forma consistente. Você externaliza a configuração da sua workload, o que ajuda você a implantar em diferentes ambientes sem alterações. Assinar de maneira criptográfica os pacotes de software é uma boa maneira de garantir que nada seja alterado entre os ambientes. 

**Práticas comuns que devem ser evitadas: **
+  Implantar software manualmente em produção. 
+  Realizar alterações manualmente no software para suprir diferentes ambientes. 

**Benefícios de implementar esta 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 risco exposto se esta prática recomendada não for estabelecida:** Alto 

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

 Para manter uma infraestrutura de aplicações robusta e confiável, implemente práticas de implantação seguras e automatizadas. Essa prática envolve remover o acesso humano persistente dos ambientes de produção, usar ferramentas de CI/CD para implantações e externalizar dados de configuração específicos do ambiente. Ao seguir essa abordagem, você pode aprimorar a segurança, reduzir o risco de erros humanos e simplificar o processo de implantação. 

 Você pode criar uma estrutura de Conta da AWS para remover o acesso humano persistente dos ambientes de produção. Essa prática minimiza o risco de alterações não autorizadas ou modificações acidentais, o que melhora a integridade de seus sistemas de produção. Em vez do acesso humano direto, você pode usar ferramentas de CI/CD como [AWS CodeBuild](https://aws.amazon.com/codebuild/)e [AWS CodePipeline](https://aws.amazon.com/codepipeline/)para realizar implantações. Você pode usar esses serviços para automatizar os processos de criação, teste e implantação, o que reduz a intervenção manual e aumenta a consistência. 

 Para aprimorar ainda mais a segurança e a rastreabilidade, é possível assinar pacotes de aplicações depois de testados e validar essas assinaturas durante a implantação. Para fazer isso, use ferramentas criptográficas como [AWS Signer](https://docs.aws.amazon.com/signer/latest/developerguide/Welcome.html)ou [AWS Key Management Service(AWS KMS)](https://aws.amazon.com/kms/). Ao assinar e verificar pacotes, você pode garantir a implantação somente de código autorizado e validado em seus ambientes. 

 Além disso, sua equipe pode arquitetar a workload para obter dados de configuração específicos do ambiente 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). Essa prática separa o código da aplicação dos dados de configuração, o que ajuda você a gerenciar e atualizar as configurações de maneira independente, sem modificar o código da aplicação em si. 

 Para simplificar o provisionamento e o gerenciamento da infraestrutura, considere usar ferramentas de infraestrutura como código (IaC), como [AWS CloudFormation](https://aws.amazon.com/cloudformation/) ou [AWS CDK](https://aws.amazon.com/cdk/). Você pode usar essas ferramentas para definir sua infraestrutura como código, o que melhora a consistência e a repetibilidade das implantações em diferentes ambientes. 

 Considere as implantações canário para validar a implantação bem-sucedida do software. As implantações canário envolvem a implementação de alterações em um subconjunto de instâncias ou usuários antes da implantação em todo o ambiente de produção. Em seguida, você pode monitorar o impacto das mudanças e revertê-las, se necessário, o que minimiza o risco de problemas generalizados. 

 Siga as recomendações descritas no whitepaper [Organizando seu AWS ambiente usando várias contas](https://docs.aws.amazon.com/whitepapers/latest/organizing-your-aws-environment/organizing-your-aws-environment.html). Este whitepaper fornece orientação sobre como separar ambientes (como desenvolvimento, preparação e produção) em Contas da AWS distintas, o que aumenta ainda mais a segurança e o isolamento. 

### Etapas de implementação
<a name="implementation-steps"></a>

1.  **Configure a estrutura de Conta da AWS**: 
   +  Siga as orientações no whitepaper [Organizing Your AWS Environment Using Multiple Accounts](https://docs.aws.amazon.com/whitepapers/latest/organizing-your-aws-environment/organizing-your-aws-environment.html) para criar Contas da AWS separadas para diferentes ambientes (por exemplo, desenvolvimento, preparação e produção). 
   +  Configure os controles e permissões de acesso apropriados para cada conta para restringir o acesso humano direto aos ambientes de produção. 

1.  **Implemente um pipeline de CI/CD**: 
   +  Configure um pipeline de CI/CD usando serviços, como [AWS CodeBuild](https://aws.amazon.com/codebuild/) e [AWS CodePipeline](https://aws.amazon.com/codepipeline/). 
   +  Configure o pipeline para criar, testar e implantar automaticamente o código da aplicação nos respectivos ambientes. 
   +  Integre repositórios de código com o pipeline de CI/CD para controle de versão e gerenciamento de código. 

1.  **Assine e verifique pacotes de aplicações**: 
   +  Use 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 os pacotes de aplicações depois de testados e validados. 
   +  Configure o processo de implantação para verificar as assinaturas dos pacotes de aplicações antes de implantá-los nos ambientes de destino. 

1.  **Externalize os dados de configuração**: 
   +  Armazene dados de configuração específicos do ambiente no [AWSSystems Manager Parameter](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html) Store. 
   +  Modifique o código da aplicação para recuperar dados de configuração do Parameter Store durante a implantação ou o runtime. 

1.  **Implemente a infraestrutura como código (IaC)**: 
   +  Use ferramentas de IaC como [AWS CloudFormation](https://aws.amazon.com/cloudformation/)ou [AWS CDK](https://aws.amazon.com/cdk/)para definir e gerenciar sua infraestrutura como código. 
   +  Crie modelos do CloudFormation ou scripts de CDK para provisionar e configurar os recursos da AWS necessários para a aplicação. 
   +  Integre a IaC ao seu pipeline de CI/CD para implantar automaticamente as alterações na infraestrutura com as alterações no código da aplicação. 

1.  **Implemente implantações canário**: 
   +  Configure o processo de implantação para oferecer suporte a implantações canário, em que as alterações são implementadas em um subconjunto de instâncias ou usuários antes de serem implantadas em todo o ambiente de produção. 
   +  Use serviços, como o [AWS CodeDeploy](https://aws.amazon.com/codedeploy/) ou o [AWS ECS](https://aws.amazon.com/ecs/), para gerenciar implantações canário e monitorar o impacto das mudanças. 
   +  Implemente mecanismos de reversão para reverter para a versão estável anterior se forem detectados problemas durante a implantação canário. 

1.  **Monitore e audite**: 
   +  Configure mecanismos de monitoramento e registro em log para rastrear implantações, desempenho de aplicações e mudanças na infraestrutura. 
   +  Use serviços, como o [Amazon CloudWatch](https://aws.amazon.com/cloudwatch/) e o [AWS CloudTrail](https://aws.amazon.com/cloudtrail/), para coletar e analisar logs e métricas. 
   +  Implemente verificações de auditoria e conformidade para verificar a adesão às práticas recomendadas de segurança e aos requisitos regulatórios. 

1.  **Melhore continuamente:** 
   +  Analise e atualize regularmente suas práticas de implantação e incorpore feedback e lições aprendidas em implantações anteriores. 
   +  Automatize o máximo possível do processo de implantação para reduzir a intervenção manual e possíveis erros humanos. 
   +  Colabore com equipes multifuncionais (por exemplo, operações ou segurança) para alinhar e melhorar continuamente as práticas de implantação. 

 Seguindo essas etapas, você pode implementar práticas de implantação seguras e automatizadas em seu AWS ambiente, o que aumenta a segurança, reduz o risco de erros humanos e simplifica o processo de implantação. 

## 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) 
+  [O DL.CI.2 Trigger é criado automaticamente com base nas modificações do código-fonte](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/dl.ci.2-trigger-builds-automatically-upon-source-code-modifications.html) 

 **Documentos relacionados:** 
+  [Acelerar as implantações na AWS com uma governança efetiva](https://aws.amazon.com/blogs/architecture/accelerate-deployments-on-aws-with-effective-governance/) 
+  [Automatizar implantações seguras e sem intervenção manual](https://aws.amazon.com/builders-library/automating-safe-hands-off-deployments/) 
+  [Assinatura de código usando 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 confiança e integridade para 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 azuis/verdes com o AWS Fargate](https://catalog.us-east-1.prod.workshops.aws/workshops/954a35ee-c878-4c22-93ce-b30b25918d89/en-US) 

# SEC11-BP07 Avaliar regularmente as propriedades de segurança dos pipelines
<a name="sec_appsec_regularly_assess_security_properties_of_pipelines"></a>

 Aplique os princípios do pilar Segurança do Well-Architected aos seus pipelines, com atenção especial à separação das permissões. Avalie as propriedades de segurança de sua infraestrutura de pipelines. O gerenciamento eficaz da segurança *dos* pipelines permite fornecer segurança ao software que passa *pelos* pipelines. 

 **Resultado desejado:** os pipelines usados para criar e implantar o software seguem as mesmas práticas recomendadas de qualquer outra workload no ambiente. Os testes que você implementa em seus pipelines não são editáveis pelas equipes que os usam. Você concede aos pipelines somente as permissões necessárias para as implantações que eles estão realizando usando credenciais temporárias. Você implementa proteções para evitar que os pipelines sejam implantados nos ambientes errados. Você configura os pipelines para emitir o estado de modo que a integridade dos ambientes de compilação possa ser validada. 

**Práticas comuns que devem ser evitadas:**
+  Testes de segurança que podem ser ignorados pelos criadores. 
+  Permissões excessivamente amplas para pipelines de implantação. 
+  Pipelines não configurados para validar entradas. 
+  Ausência de análise regular das permissões associadas à infraestrutura de CI/CD. 
+  Uso de credenciais de longo prazo ou codificadas. 

**Benefícios de implementar esta prática recomendada:**
+  Maior confiança na integridade do software que está sendo criado e implantado pelos pipelines. 
+  Capacidade de interromper uma implantação quando há atividade suspeita. 

**Nível de risco exposto se esta prática recomendada não for estabelecida:** Alto 

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

 Seus pipelines de implantação são um componente essencial do ciclo de vida de desenvolvimento de software e devem seguir os mesmos princípios e práticas de segurança de qualquer outra workload em seu ambiente. Isso inclui a implementação de controles de acesso adequados, validação de entradas e revisão e auditoria regulares das permissões associadas à infraestrutura de CI/CD. 

 Verifique se as equipes responsáveis pela criação e implantação de aplicações não têm a capacidade de editar ou ignorar os testes e as verificações de segurança implementados nos pipelines. Essa separação de preocupações ajuda a manter a integridade de seus processos de criação e implantação. 

 Como ponto de partida, considere empregar a [arquitetura de referência dos pipelines de implantação da AWS](https://aws.amazon.com/blogs/aws/new_deployment_pipelines_reference_architecture_and_-reference_implementations/). Essa arquitetura de referência fornece uma base segura e escalável para a criação dos pipelines de CI/CD na AWS. 

 Além disso, você pode usar serviços como o [AWS Identity and Access Management Access Analyzer](https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html) para gerar políticas do IAM com privilégio mínimo para as permissões do pipeline e como uma etapa do pipeline para verificar as permissões da workload. Isso ajuda a verificar se seus pipelines e workloads têm somente as permissões necessárias para suas funções específicas, o que reduz o risco de acesso ou ações não autorizadas. 

### Etapas de implementação
<a name="implementation-steps"></a>
+  Comece com a [arquitetura de referência dos pipelines de implantação da AWS](https://aws.amazon.com/blogs/aws/new_deployment_pipelines_reference_architecture_and_-reference_implementations/). 
+  Considere usar o [AWS IAM Access Analyzer](https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html) para gerar programaticamente políticas do IAM com privilégios mínimos para os pipelines. 
+  Integre seus pipelines ao recurso de monitoramento e alerta para receber notificações sobre atividades inesperadas ou anormais. Para serviços gerenciados da AWS, o [Amazon EventBridge](https://aws.amazon.com/eventbridge/) permite direcionar dados para destinos como o [AWS Lambda](https://aws.amazon.com/lambda/) ou o [Amazon Simple Notification Service](https://aws.amazon.com/sns/) (Amazon SNS). 

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

 **Documentos relacionados:** 
+  [AWS Arquitetura de referência dos pipelines de implantação da](https://aws.amazon.com/blogs/aws/new_deployment_pipelines_reference_architecture_and_-reference_implementations/) 
+  [Como monitorar o AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/monitoring.html) 
+  [Práticas recomendadas de segurança do AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/security-best-practices.html) 

 **Exemplos relacionados:** 
+  [Painel de monitoramento do DevOps](https://github.com/aws-solutions/aws-devops-monitoring-dashboard) (GitHub) 

# SEC11-BP08 Criar um programa que incorpore a propriedade de segurança nas equipes de workload
<a name="sec_appsec_build_program_that_embeds_security_ownership_in_teams"></a>

Crie um programa ou mecanismo que capacite as equipes de criadores a tomar decisões de segurança sobre o software que elas estão criando. Ainda é necessário que sua equipe de segurança valide essas decisões durante uma revisão, mas a incorporação da propriedade de segurança nas equipes de criadores aumenta a velocidade e segurança do processo de criação de workloads. Esse mecanismo também promove uma cultura de propriedade que afeta de forma positiva a operação dos sistemas que você cria.

 

 **Resultado desejado:** você incorporou a propriedade de segurança e a tomada de decisões em suas equipes. Você treinou suas equipes sobre como pensar em segurança ou aumentou a equipe com pessoas de segurança incorporadas ou associadas. Como resultado, suas equipes tomam decisões de segurança de melhor qualidade logo no início do ciclo de desenvolvimento. 

**Práticas comuns que devem ser evitadas:**
+  Deixar todas as decisões de design de segurança para a equipe de segurança. 
+  Não abordar os requisitos de segurança cedo o suficiente no processo de desenvolvimento. 
+  Não obter feedback dos criadores e do pessoal de segurança sobre a operação do programa. 

**Benefícios de implementar esta prática recomendada: **
+  Redução do tempo para concluir as avaliações de segurança. 
+  Redução dos problemas de segurança que são detectados apenas no estágio de avaliação da segurança. 
+  Melhoria da qualidade geral do software que está sendo escrito. 
+  Oportunidade de identificar e entender problemas sistêmicos ou áreas de melhoria de alto valor. 
+  Redução da quantidade de revisão necessária devido às descobertas da avaliação da segurança. 
+  Melhoria da percepção da função de segurança. 

 **Nível de risco exposto se esta prática recomendada não for estabelecida:** Baixo 

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

 Comece com a orientação em [SEC11-BP01 Treinar para segurança de aplicações](sec_appsec_train_for_application_security.md). Depois, identifique o modelo operacional para o programa que você acredita ser o melhor para a sua organização. Os dois padrões principais são treinar os criadores ou incorporar o pessoal de segurança às equipes de criadores. Depois de decidir sobre a abordagem inicial, é necessário criar um piloto com uma equipe de workload ou um grupo pequeno de equipes de workload para comprovar que o modelo funciona para sua organização. O apoio de liderança dos criadores e da segurança da organização contribui para a entrega e o sucesso do programa. À medida que você criar esse programa, é importante selecionar as métricas que podem ser utilizadas para mostrar seu valor. Saber como a AWS resolveu esse problema é uma boa experiência de aprendizado. A prática recomendada é muito concentrada na mudança e cultura organizacionais. As ferramentas que você utiliza devem ser compatíveis com a colaboração entre as comunidades de criadores e de segurança. 

### Etapas de implementação
<a name="implementation-steps"></a>
+  Comece com o treinamento dos criadores para segurança de aplicações. 
+  Crie uma comunidade e um programa de integração para instruir os criadores. 
+  Selecione um nome para o programa. Guardiões, patrocinadores ou defensores são utilizados com frequência. 
+  Identifique o modelo a ser utilizado: treinar criadores, incorporar engenheiros de segurança e ter perfis de segurança de afinidade. 
+  Identifique patrocinadores do projeto em grupos de segurança e de criadores e possivelmente em outros grupos relevantes. 
+  Rastreie as métricas do número de pessoas envolvidas no programa, o tempo gasto em avaliações e o feedback dos criadores e do pessoal de segurança. Utilize essas métricas para realizar melhorias. 

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

 **Práticas recomendadas relacionadas:** 
+  [SEC11-BP01 Treinar para segurança de aplicações](sec_appsec_train_for_application_security.md) 
+  [SEC11-BP02 Automatizar o teste durante o ciclo de vida de desenvolvimento e lançamento](sec_appsec_automate_testing_throughout_lifecycle.md) 

 **Documentos relacionados:** 
+  [Como abordar a modelagem de ameaças](https://aws.amazon.com/blogs/security/how-to-approach-threat-modeling/) 
+  [Como pensar sobre a governança da segurança na nuvem](https://aws.amazon.com/blogs/security/how-to-think-about-cloud-security-governance/) 
+  [How AWS built the Security Guardians program, a mechanism to distribute security ownership](https://aws.amazon.com/blogs/security/how-aws-built-the-security-guardians-program-a-mechanism-to-distribute-security-ownership/) 
+ [ Como criar um programa Security Guardians para distribuir a propriedade da segurança ](https://aws.amazon.com/blogs/security/how-to-build-your-own-security-guardians-program/)

 **Vídeos relacionados:** 
+  [Segurança proativa: considerações e abordagens](https://www.youtube.com/watch?v=CBrUE6Qwfag) 
+  [AppSec tooling and culture tips from AWS and Toyota Motor North America](https://www.youtube.com/watch?v=aznmbzgj6Mg) 