Como usar o Pulumi para automatizar a integração do Snyk Kubernetes para contêineres
Pas Apicella
9 de fevereiro de 2022
0 minutos de leituraTodos já ouvimos falar do termo infraestrutura como código (IaC), mas código, nesse contexto, não é exatamente código no sentido de uma linguagem de programação. IaC geralmente se refere à configuração da infraestrutura por meio de ferramentas como Terraform, CloudFormation, YAML do Kubernetes ou modelos do Azure Resource Manager — que, na prática, definem como a infraestrutura será criada. Essas configurações não oferecem a flexibilidade e o poder de uma linguagem de programação moderna. Portanto, IaC é código, mas geralmente não é esse tipo de código.
Nesta postagem, vamos mostrar como usar o Pulumi, uma nova ferramenta de código aberto que permite aos desenvolvedores escrever código em várias linguagens, como JavaScript, TypeScript, Python e Go, para criar tudo o que é necessário para configurar a integração do Kubernetes no Snyk Container.
Visão geral da integração do Snyk com Kubernetes
A Snyk se integra ao Kubernetes, permitindo que você importe e teste suas cargas de trabalho em execução e identifique vulnerabilidades nas imagens e configurações associadas que possam comprometer a segurança dessas cargas. Após a importação, a Snyk continua monitorando essas cargas de trabalho e identificando novos problemas de segurança à medida que novas imagens são implantadas e a configuração muda.
O que é Pulumi?
Pulumi é uma ferramenta de IaC de código aberto que usa as linguagens de programação mais populares para simplificar o provisionamento e o gerenciamento de recursos na nuvem.
Fundada em 2017, a Pulumi mudou profundamente a forma como as equipes de DevOps abordam o conceito de infraestrutura como código. Em vez de depender de linguagens específicas de domínio, a Pulumi permite que as organizações usem linguagens de programação de verdade para provisionar e desativar infraestrutura nativa da nuvem.
O Pulumi oferece suporte às seguintes linguagens de programação:
Python
JavaScript
Go
TypeScript
Linguagens .NET (C#, F# e VB)
Como instalar a integração do Snyk com Kubernetes usando o Pulumi
Agora vem a parte divertida! Vamos configurar o Pulumi passo a passo e iniciar nossas automações. Estas são as etapas:
Pré-requisitos
Para usar a integração com Kubernetes, você precisa ter uma conta Business ou Enterprise da Snyk. Se ainda não tiver uma, você pode se inscrever para um teste gratuito de 14 dias do plano Business.
Vamos implantar no Google Cloud, então você precisará de uma conta. Se ainda não tiver uma, inscreva-se gratuitamente aqui. Em ambos os casos, siga estas instruções para conectar o Pulumi à sua conta do Google Cloud.
Este exemplo pressupõe que a CLI
gcloudesteja no seu PATH. Ela é instalada como parte do Google Cloud SDK.Verifique se você tem o Python 3, uma conta do Pulumi e a CLI do Pulumi.
Observe que o Pulumi exige que o Python 3 seja a versão padrão no seu ambiente. Se você tiver o Python 2 e o Python 3 instalados, talvez seja necessário criar um alias. Para verificar, execute o comando a seguir e confirme que está usando a versão mais recente do 3.x:
Etapa 1: Crie um ID de integração com Kubernetes no app da Snyk
Entre na Snyk e selecione a organização em que deseja configurar automaticamente a integração com Kubernetes. Pode ser uma organização vazia ou uma já existente com projetos. Neste exemplo, verifique se a integração com Kubernetes ainda não está configurada na organização escolhida.
Em seguida, clique em Integrações > Kubernetes > Conectar. Se você não tiver uma conta Business ou Enterprise da Snyk, não poderá concluir esta etapa.
Anote o ID da integração, pois vamos precisar dele em breve.

Pronto! Agora você pode configurar a demonstração da integração do Snyk com Kubernetes usando infraestrutura como código com o Pulumi. O Pulumi fará o seguinte:
Criar um cluster GKE
Implantar o controlador da Snyk no cluster0
Configurar a integração do Snyk com Kubernetes para importar automaticamente as cargas de trabalho do K8s para a Snyk
Implantar uma carga de trabalho de exemplo no namespace
apples, de acordo com nosso arquivo de política Rego
Etapa 2: Clone o repositório de exemplo
Clone o repositório de demonstração no GitHub a seguir, como mostrado abaixo:
Depois de clonar o repositório, acesse-o com cd e execute os próximos comandos…
Etapa 3: Faça a autenticação no Google Cloud
Para implantar esta demonstração, autentique-se no Google Cloud usando a autenticação local. Há outras maneiras de configurar o Pulumi com o Google Cloud, mas esta é a mais simples para a demonstração:
Etapa 4: Crie uma nova stack do Pulumi
Crie uma nova stack, que será um destino de implantação isolado para este exemplo. Use dev como exemplo:
Etapa 5: Defina as variáveis de configuração necessárias do Pulumi
Em muitos casos, stacks diferentes de um mesmo projeto precisam de valores distintos. Por exemplo, talvez você queira usar um tamanho diferente para sua instância do Google Cloud ou uma quantidade diferente de servidores no cluster do Kubernetes nas stacks de desenvolvimento e produção.
Os pares de chave e valor de cada stack ficam armazenados no arquivo de configurações da stack do seu projeto, cujo nome padrão é Pulumi.<stack-name>.yaml. Em geral, você pode ignorar esse arquivo, embora seja possível adicioná-lo ao controle de versão junto com o código-fonte do projeto.
Adicione as seguintes variáveis de configuração à nossa stack, como mostrado abaixo:
Por padrão, seu cluster terá 3 nós do tipo n1-standard-1. Essa configuração pode ser alterada. Para escolher 5 nós do tipo n1-standard-2, por exemplo, você pode executar estes comandos:
Por fim, precisamos configurar as definições necessárias da integração do Snyk com Kubernetes, que serão usadas para adicionar automaticamente essa integração ao nosso cluster. Precisamos do ID da integração com Kubernetes e do ID da organização da Snyk. Neste exemplo, eles são iguais:
Isso mostra como você pode configurar stacks de maneiras úteis. Você pode até alterar essas configurações depois do provisionamento.
Depois de concluir esta etapa, você terá um arquivo Pulumi.dev.yaml com o seguinte conteúdo:
Etapa 6: Implante tudo com pulumi up
A implantação de tudo com o comando pulumi up provisiona todos os recursos do Google Cloud necessários para a integração do Kubernetes com a Snyk, incluindo o próprio cluster GKE e o gráfico Helm do controlador da Snyk. Em seguida, implanta um deployment do Kubernetes que executa uma aplicação Spring Boot:
Será exibida uma prévia, você precisará confirmar e, em seguida, começará o provisionamento da demonstração da integração do Snyk com Kubernetes:
Após cerca de cinco minutos, seu cluster estará pronto, com o controlador da Snyk instalado e uma carga de trabalho de exemplo importada automaticamente para sua organização da Snyk:
Confira algumas capturas de tela para verificar se tudo foi criado como esperado.
O cluster GKE criado no Google Cloud:

A integração do Snyk com Kubernetes configurada automaticamente:

A carga de trabalho de exemplo importada automaticamente do namespace apples:


Explorando a configuração
Vamos analisar o arquivo Python __main__.py e entender como a integração do Snyk com Kubernetes foi instalada e configurada para nós.
Atualmente, o arquivo de política Rego usado pelo controlador da Snyk está codificado para importar apenas cargas de trabalho do namespace apples, desde que não sejam do tipo CronJob nem Service. Você pode alterar isso em __main__.py e usar um arquivo externo, em vez de deixar a política codificada no código Python:
Este é o código Python que instala o controlador da Snyk usando seu gráfico Helm. Observe que especificamos o repositório de onde buscar o gráfico Helm, fornecemos o ID da organização da Snyk e incluímos o arquivo de política personalizado mencionado acima. Tudo isso é necessário para instalar o controlador da Snyk no cluster GKE e integrá-lo à Snyk.
O código Python também implantou uma aplicação de exemplo Spring Boot no nosso namespace apples, que foi importada automaticamente pelo controlador da Snyk para o app da Snyk. Veja a seguir o código Python usado para fazer essa implantação:
Etapa 7: Recupere a configuração do Kubernetes
Agora, você pode usar essa configuração no arquivo ~/.kube/config ou salvá-la localmente e defini-la na variável de ambiente KUBECONFIG. Naturalmente, todos os seus comandos habituais do Google Cloud também funcionarão.
Por exemplo:
O controlador da Snyk instalado no namespace snyk-monitor, além do mapa de configuração e do segredo agora gerenciados pelo Pulumi, exibidos com alguns comandos kubectl:
Etapa 8: Destrua toda a configuração
Quando terminar, você poderá destruir todos os recursos e a stack:
Em resumo, você aprendeu como usar o Pulumi para instalar e configurar a integração do Snyk com Kubernetes. Essa integração permite que você importe e teste suas cargas de trabalho em execução e identifique vulnerabilidades nas imagens e configurações associadas que possam comprometer a segurança delas.
Mais recursos
Agora que você viu como é fácil configurar a integração do Snyk com Kubernetes usando a linguagem de programação Python e o Pulumi, confira alguns links úteis para começar sua jornada de segurança de contêineres.
Documentação: visão geral da integração com Kubernetes
Documentação: importação e exclusão automáticas de projetos de cargas de trabalho do Kubernetes
Aprenda Rego com o excelente curso da Styra
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.
