In this article
Infraestrutura como código em um mundo DevSecOps
Este artigo aborda infraestrutura como código (IaC), explica o que é e discute as implicações de segurança do uso de IaC no mundo real.
O que é infraestrutura como código?
Infraestrutura como código (IaC) é o processo de provisionar e gerenciar recursos em nuvens públicas, como AWS, GCP e Azure, por meio de um conjunto de arquivos de texto editáveis que descrevem como e onde as configurações dos recursos de infraestrutura são implantadas.
Esses scripts de entrada são processados por ferramentas de infraestrutura como código, que criam, atualizam ou excluem recursos automaticamente para garantir que a infraestrutura em nuvem esteja de acordo com o estado definido no arquivo IaC. As ferramentas de IaC são projetadas para gerenciar as dependências implícitas e explícitas entre os recursos da infraestrutura em nuvem, garantindo que a criação, a manutenção e a remoção dos recursos sejam realizadas de forma lógica e considerem essas dependências.
Antes da existência da infraestrutura como código (IaC), os recursos normalmente eram provisionados manualmente ou, na melhor das hipóteses, por meio de scripts simples, como scripts de shell ou Python. As ferramentas de gerenciamento de configuração eram muito eficientes para configurar uma instância depois que ela já estava em funcionamento, mas não conseguiam criar a instância inicialmente.
A IaC surgiu para ajudar a preencher essa lacuna, automatizando o provisionamento de recursos e, assim, substituindo os servidores snowflake. A introdução de linguagens declarativas de alto nível para definir um estado desejado, junto com ferramentas de IaC que implementavam essas declarações automaticamente, representou um grande avanço no setor.
A infraestrutura como código (IaC) trouxe muitos benefícios, entre eles:
Velocidade e padronização: permite definir o estado desejado em scripts, garantindo reprodutibilidade perfeita.
Controle de versão: permite salvar esses scripts no Git e manter um histórico da infraestrutura, assim como acontece com o código da aplicação.
Documentação: permite que os scripts sirvam como documentação e fonte única da verdade.
Eficiência: amplia a possibilidade de implantações contínuas para o provisionamento e o gerenciamento dos próprios recursos.
Os três principais provedores de nuvem pública oferecem soluções próprias de IaC, que funcionam apenas em suas respectivas plataformas:
A Amazon Web Services oferece o AWS CloudFormation.
A plataforma da Microsoft Azure é o Azure Resource Manager.
O Google Cloud Platform usa o Google Cloud Deployment Manager.
O Terraform é o software de IaC independente de nuvem mais usado e tem a vantagem de oferecer suporte a muitos provedores de nuvem. Na verdade, provedores menores, como DigitalOcean e Rackspace, costumam usar Terraform em vez de um produto de IaC próprio.
Os fornecedores de software automatizado de gerenciamento de configuração, incluindo Puppet, Chef e Ansible, também vêm ampliando seus recursos e hoje oferecem algum nível de suporte para criar, atualizar e excluir recursos em nuvens públicas. No entanto, essas ferramentas não foram projetadas desde o início como soluções de IaC.
O que é segurança de IaC?
A segurança de infraestrutura como código (IaC) consiste em proteger as configurações da nuvem, da infraestrutura e das aplicações, verificando arquivos IaC e implantações em nuvem para garantir a conformidade com um conjunto de regras codificadas.
A segurança de IaC pode impedir que configurações incorretas cheguem aos ambientes de nuvem em produção e, assim, reduzir o risco de violações de dados, indisponibilidade e falhas de implantação. As consequências de scripts IaC que não seguem os princípios de segurança podem ser graves, incluindo buckets de armazenamento desprotegidos que expõem dados confidenciais ou uma instância que fica acessível publicamente por engano e serve como vetor de ataque para hackers.
Algumas práticas recomendadas de segurança de IaC incluem o princípio do menor privilégio, a segmentação de rede para manter os recursos e suas dependências relacionados protegidos em uma sub-rede privada, e a criptografia de dados em trânsito e em repouso.
O princípio do menor privilégio é importante para reduzir os danos causados por recursos mal configurados ou scripts modificados de forma mal-intencionada. Na infraestrutura como código (IaC), ele se aplica em três níveis:
Definir quem tem e quem não tem autorização para executar os scripts.
Limitar as permissões de usuários autorizados deIaC ao mínimo necessário para realizar suas tarefas.
Os scripts IaC devem garantir que as permissões concedidas aos vários recursos que criam sejam limitadas ao necessário para que eles realizem suas funções.
A maioria dos demais aspectos de segurança de IaC está relacionada aos recursos criados pelos próprios scripts. Por exemplo, uma arquitetura de rede devidamente segmentada pode conter danos causados por ataques internos ou externos. Incluir uma linha encrypt = true nos scripts de infraestrutura como código (IaC) protege os dados em repouso, enquanto o uso de serviços gerenciados, como o AWS Certificate Manager, pode proteger os dados em trânsito. Outras práticas recomendadas incluem configurar os mecanismos de proteção habituais contra DDoS e ataques HTTP comuns, como um firewall de aplicações web.
O que é IaC em DevSecOps?
No contexto da infraestrutura como código, DevOps envolve uma estreita colaboração entre desenvolvedores e engenheiros de DevOps, além do uso de IaC como parte da implantação contínua. “DevSecOps”, também chamado de “abordagem shift-left”, é a integração de aspectos de segurança ao DevOps. No caso da IaC, DevSecOps significa integrar a segurança desde o início do projeto e mantê-la como prioridade em todas as etapas. Também significa usar as ferramentas adequadas para sua carga de trabalho e automatizar a segurança (às vezes chamada de segurança como código).

Adoção de DevSecOps: integrando a segurança ao pipeline de CI/CD
DevSecOps envolve tanto a cultura organizacional — especialmente a livre circulação de informações entre equipes diversas — quanto a tecnologia. Como parte do universo DevOps, o DevSecOps promove a automação em todos os níveis, unindo cultura e tecnologia. A IaC é fundamental para o DevOps, pois busca automatizar implantações completas. Em IaC, DevSecOps significa automatizar as práticas recomendadas de segurança e usar ferramentas adequadas à carga de trabalho específica para melhorar a segurança.
Ferramentas de segurança para infraestrutura como código
Na prática, existem poucas ferramentas de segurança projetadas especificamente para aplicar práticas recomendadas de segurança no nível de infraestrutura como código do DevSecOps. Ferramentas de segurança de terceiros, como DataDog, Splunk, Jaeger e outras, podem ser usadas fora dos scripts IaC. Também existem serviços de segurança nativos da nuvem que podem ser habilitados por meio de scripts IaC, como Amazon GuardDuty, Amazon Macie e Amazon Inspector.
No entanto, o Snyk IaC Security é uma das poucas ferramentas projetadas para desenvolvedores e equipes de segurança, oferecendo proteção para Terraform, Kubernetes, CloudFormation, Azure Resource Manager (ARM) e muito mais.

O Snyk IaC protege suas configurações durante todo o ciclo de vida da infraestrutura, integrando-se perfeitamente aos fluxos de trabalho dos desenvolvedores e aplicando políticas de segurança de IaC baseadas em práticas recomendadas, do código à nuvem:
Implemente práticas recomendadas de segurança e conformidade: conjunto de regras integrado e em constante evolução, baseado em práticas recomendadas do setor, em benchmarks da CIS e em exercícios de modelagem de ameaças da equipe de segurança da Snyk. Integre a segurança ao código e simplifique sua revisão.
Mantenha os desenvolvedores no fluxo de trabalho que preferem: teste continuamente a IaC em busca de configurações incorretas, tanto localmente pela CLI quanto com integrações a IDEs, ferramentas de gerenciamento de código-fonte (GitHub, GitLab etc.) e Terraform Cloud. Incentive a adoção pelos desenvolvedores e minimize o tempo de inatividade e as distrações.
Corrija mais rápido os problemas de maior risco: a gravidade e o impacto dos problemas, além de orientações estruturadas para corrigi-los, aparecem destacados no código para ajudar os desenvolvedores a resolver os problemas rapidamente e manter as configurações sempre seguras.
Proteja seu cenário específico: escreva ou importe regras personalizadas na linguagem de alto nível Rego da Open Policy Agent e ajuste a gravidade das regras predefinidas.
Proteja todo o ciclo de vida da infraestrutura: detecte desvios de infraestrutura e recursos não gerenciados em ambientes de nuvem ativos. Envie alertas diretamente aos engenheiros, com contexto sobre os recursos, para agilizar as correções e colocar os recursos não gerenciados sob controle.
O Snyk Infrastructure as Code é parte integrante da plataforma Snyk, que incorpora e mantém práticas recomendadas de segurança em toda a pilha de aplicações nativas da nuvem, incluindo código aberto, contêineres e Kubernetes, além da infraestrutura como código.
Proteja a infraestrutura desde a origem
A Snyk automatiza a segurança e a conformidade de IaC nos fluxos de trabalho e detecta recursos com configurações divergentes ou ausentes.
Conclusão
Como a infraestrutura como código está no topo das camadas de orquestração, a segurança fica mais simples de gerenciar e manter. Embora existam muitas soluções que podem ser habilitadas por IaC, poucas permitem aplicar práticas recomendadas de segurança no próprio nível de IaC. Encontrar as ferramentas certas e oferecer treinamento e capacitação para a equipe, promovendo a colaboração entre os times, também são elementos essenciais. Aplique práticas recomendadas de segurança ao código IaC ao usar Terraform, Kubernetes, CloudFormation, Azure Resource Manager (ARM) e muito mais. Cadastre-se gratuitamente para proteger seus projetos com a Snyk.