Skip to main content

Evite configurações incorretas na nuvem no HashiCorp Terraform com o Snyk IaC

Escrito por
Infrastructure as Code security

13 de maio de 2021

0 minutos de leitura

Temos o prazer de compartilhar novos recursos do Snyk Infrastructure as Code (Snyk IaC), desenvolvidos para acompanhar a forma como usuários do Terraform escrevem, planejam e aplicam suas configurações. Com o Snyk IaC, você recebe orientações imediatas sobre configurações de segurança enquanto escreve e pode analisar seus planos do Terraform nos pipelines de implantação para garantir que suas alterações e toda a configuração sejam seguras. Além disso, adicionamos grandes melhorias de desempenho para lidar com configurações que contêm milhares de arquivos e aprimoramentos de segurança para manter privados os detalhes do seu ambiente privado.

Elimine configurações incorretas no Terraform durante todo o ciclo de vida

Com esses novos recursos do Snyk IaC, você pode tratar o Terraform como qualquer outra forma de código e adotar uma abordagem shift-left, tornando a segurança das configurações parte integrante de todo o ciclo de vida do Terraform. O Snyk IaC testa a presença de configurações incorretas desde o momento em que o código é escrito, oferecendo feedback e orientação imediatos aos engenheiros com base nas práticas recomendadas de nuvem e do setor, além das políticas da sua organização. Quando os módulos do Terraform são enviados ao repositório e os testes automatizados começam, o Snyk IaC testa seus planos do Terraform e oferece uma visão abrangente das alterações para garantir que seus ambientes estejam seguros na implantação, evitando surpresas e regressões após a implantação.

Por que analisar os planos do Terraform em busca de configurações incorretas na nuvem

A CLI do Snyk já permite que usuários analisem arquivos do Terraform e do Kubernetes localmente e em CI/CD, oferecendo feedback imediato enquanto você escreve e nos repositórios de código. Isso funciona bem para alterações individuais, mas, se você quiser ter uma visão geral de todas as alterações que está prestes a aplicar — incluindo os efeitos dos módulos e das variáveis incorporados —, o caminho é analisar o arquivo de plano do Terraform.

Com esta versão, o fluxo de trabalho da CLI do Snyk agora permite analisar um arquivo de plano do Terraform (tf-plan) para detectar se as alterações propostas introduzirão novas vulnerabilidades de segurança na sua infraestrutura de nuvem atual. Para mostrar como o Snyk IaC pode ser usado em todo o fluxo de trabalho do Terraform, vou demonstrar um exemplo com o código do tutorial da Hashicorp Use Application Load Balancers for Blue-Green and Canary Deployments. Assim, você verá um fluxo de trabalho local simples de “escrever, testar, planejar, testar, aplicar” com o Snyk IaC.

Saiba mais sobre a estratégia de implantação Blue-Green.

Teste o código-fonte do Terraform em busca de configurações incorretas na nuvem

Antes de começar a usar o Snyk, eu já tinha aplicado o Terraform fornecido pela Hashicorp, então meu ambiente está funcionando e meu código do Terraform está no Git. Mas agora que tenho o Snyk IaC, quero verificar se há algum problema preocupante. Integrei o Snyk ao meu repositório do GitHub e podemos ver os resultados no console do Snyk:

Painel de análise do Terraform no Snyk mostrando 2 problemas de gravidade média e 2 de gravidade baixa para purpledobie/snyk-iac-tf, com as descobertas listadas por arquivo do Terraform.

Não há problemas de alta gravidade, mas, ao clicar em main.tf, noto que o balanceador de carga está configurado para usar HTTP em vez de HTTPS. Por padrão, é um problema de risco médio, mas que minha equipe de segurança não aprova. A interface do Snyk mostra onde está o problema no código, seu impacto e como resolvê-lo:

Revisão de código Terraform destacando um listener de load balancer da AWS que usa HTTP, junto com um alerta de que o HTTPS não é obrigatório.

Analise a segurança do Terraform enquanto programa

Fiz a alteração sugerida pelo Snyk IaC no meu arquivo do Terraform para que o balanceador de carga use HTTPS. Como isso também exige criar e usar um certificado, incluí essa configuração. Agora, antes de enviar minhas alterações, quero fazer uma verificação rápida para garantir que a correção do problema de HTTPS não tenha introduzido nenhum outro. Além disso, como este aplicativo está exposto à internet, eu e minha equipe não precisamos mais receber o alerta “Load balancer is internet facing” do Snyk IaC. Pedi aos administradores de segurança que o desativassem para mim — o que é fácil de fazer no Snyk IaC. Só alterei o arquivo main.tf, então é isso que vou testar localmente antes de confirmar minhas alterações:

$ snyk iac test main.tf

Testing main.tf...

Infrastructure as code issues:

Organization:      purple-dobie
Type:              Terraform
Target file:       main.tf
Project name:      learn-terraform-advanced-deployments
Open source:       no
Project path:      main.tf

Tested main.tf for known issues, found 0 issues

Perfeito! Corrigi o problema de HTTPS e minha equipe de segurança desativou a verificação de exposição à internet, então agora não tenho nenhum problema, pelo menos em main.tf. Ótimo. Hora de implantar minhas alterações!

Analise seus pipelines em busca de configurações incorretas no Terraform

Antes de aplicar minhas alterações, preciso executar um plano do Terraform para saber o que vai mudar. Como o plano do Terraform incorpora alterações de todos os módulos — e inclui todas as nossas variáveis —, temos uma visão melhor do impacto das mudanças. Essa é outra oportunidade de integrar o Snyk IaC ao ciclo de vida do Terraform e garantir que minhas alterações não afetem outros módulos da configuração. No exemplo abaixo, estou executando tudo localmente para simplificar, mas é fácil usar a CLI do Snyk com qualquer ferramenta de CI que você utilize para automatizar o planejamento e os testes:

# generate a Terraform plan in JSON format:
$ terraform plan -out=tfplan.bin
$ terraform show --json tfplan.bin > tfplan.json

# And use Snyk to test the plan to see I caused any issues:
$ snyk iac test tfplan.json 

Testing tfplan.json...

Infrastructure as code issues:

Organization:      purple-dobie
Type:              Terraform
Target file:       tfplan.json
Project name:      learn-terraform-advanced-deployments
Open source:       no
Project path:      tfplan.json

Tested tfplan.json for known issues, found 0 issues

Parece que minhas alterações estão corretas — nenhum problema de segurança! Mas tem uma coisa que ainda me incomoda. Tudo o que testei acima foram as alterações nos recursos (o padrão do Snyk IaC), e sei que editei apenas um arquivo (main.tf), então esse resultado sem problemas não é surpreendente. No entanto, minha configuração do Terraform já havia sido aplicada e estava em execução antes de eu começar a usar o Snyk IaC. Por isso, quero verificar todos os valores planejados para ver não apenas as novas alterações, mas também os detalhes conhecidos da configuração da implantação que já está em execução.

Aprimore as verificações de configurações incorretas na nuvem usando o estado do Terraform

O novo recurso tf-plan do Snyk IaC pode verificar os valores planejados para mim! Basta especificar que quero analisar esses valores usando a opção --scan=planned-values. Mais uma vez, recomendo fazer isso em CI, mas estou usando a CLI para simplificar:

$ snyk iac test --scan=planned-values tfplan.json

Testing tfplan.json...

Infrastructure as code issues:
  ✗ Security Group allows open ingress [High Severity] [SNYK-CC-TF-1] in VPC
    introduced by resource > aws_security_group[this_name_prefix] > ingress[0]
.
.
.
  ✗ Non-Encrypted root block device [Medium Severity] [SNYK-CC-TF-53] in EC2
    introduced by aws_instance[blue] > root_block_device > encrypted
.
.
.

Organization:      purple-dobie
Type:              Terraform
Target file:       tfplan.json
Project name:      learn-terraform-advanced-deployments
Open source:       no
Project path:      tfplan.json

Tested tfplan.json for known issues, found 20 issues

Ops! Desta vez, encontramos 20 problemas, incluindo alguns de `High Severity` (para manter a saída acima concisa, removi todos, menos um problema de alta gravidade e outro de gravidade média).

Analise o Terraform, incluindo módulos e variáveis

Esse novo resultado mostra que talvez eu precise fazer mais algumas coisas. Mas há outro ponto interessante que aparece ao analisar o tf-plan, além da análise dos arquivos: esses problemas de alta gravidade não apareceram na análise inicial do meu repositório Git no começo do exemplo, nem quando analisei o arquivo main.tf isoladamente depois de editá-lo.

Isso acontece porque nossa configuração usa vários módulos e variáveis do provedor AWS. Nas análises do repositório e do arquivo isolado, fazemos uma verificação estática do arquivo, o que significa que temos detalhes apenas sobre os recursos especificados explicitamente nele. Não é possível saber quais recursos serão criados pelos módulos olhando apenas para o arquivo. O plano do Terraform incorpora toda a lógica dos módulos e das variáveis incluídos, oferecendo uma visão mais completa da configuração.

Outra vantagem de poder analisar o plano do Terraform é que as ferramentas do ecossistema Terraform também devem funcionar facilmente com o Snyk IaC. Nossos clientes usam ferramentas como Terraform Cloud, Terragrunt e Atlantis. Como todas elas geram um plano padrão do Terraform, podemos analisá-lo com o Snyk IaC. Em publicações futuras, vamos mostrar exemplos de algumas dessas ferramentas do ecossistema.

Mantenha confidenciais os dados da sua infraestrutura privada e aumente o desempenho

Como mostra até mesmo nosso exemplo simples acima, analisar um plano do Terraform ajuda a identificar muitos outros riscos de configurações incorretas que surgem no ciclo de vida normal da IaC. Mas essa etapa também envolve lidar com dados confidenciais que sabemos que você não quer tirar da sua rede. Por isso, nesta versão, a CLI do Snyk executa os testes de IaC localmente e só envia para nós os dados de autenticação do Snyk e os metadados da CLI. Não é necessário realizar nenhuma etapa ou configuração especial para isso: o recurso já vem integrado ao Snyk IaC e é o modo padrão de funcionamento da CLI do Snyk para IaC daqui em diante.

Analisar localmente também traz outra vantagem: um enorme ganho de velocidade! Isso faz uma diferença especialmente grande para clientes com centenas e, em alguns casos, milhares de arquivos em um único repositório do Terraform. Nossos próprios testes mostram uma melhoria de 20 vezes na análise desses diretórios grandes.

Comece a usar o Snyk IaC gratuitamente

Todos podem experimentar esses novos recursos, inclusive quem usa o plano gratuito. É fácil começar:

  1. Se você ainda não tem uma conta Snyk, cadastre-se gratuitamente.

  2. Instale a CLI do Snyk. Se você já tem a CLI do Snyk instalada, verifique se está usando a versão 1.594.0 ou posterior para acessar esses recursos.

  3. Analise seus arquivos do Terraform e do Kubernetes.

    • O comando principal para analisar IaC com os novos recursos é:snyk iac test <path-to-file-or-folder>

      Saiba mais sobre as opções de análise disponíveis na nossa documentação ou consulte a documentação da CLI executando: snyk iac --help

    • Para analisar planos do Terraform, você precisa gerar uma saída no formato JSON, que pode ser obtida com terraform show, como nos exemplos acima e conforme documentado pelo Terraform.

Adoraríamos saber sua opinião! Se você já é cliente do Snyk, sua equipe de sucesso do cliente é um ótimo canal para enviar feedback sobre o produto. Mas todos estão convidados a deixar comentários no fórum da Comunidade Snyk.

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.

Publicado em: