Fernando Ike IT Director @ Nuveo // [email protected] // linkedin.com/in/fernandoike // twitter.com/fernandoike // www.10deploys.com // https://www.maburix.com
Problemas mais comuns - Segurança => TI - Servidores de produção mal configurados - Servidores de produção estão levemente diferentes comparando um do outro - Servidores de produção são mais "complicados" para aplicar correções de segurança (Patches)
Problemas mais comuns - Segurança => TI - Gerenciamento de usuários privilegiados são difíceis de escalar - Mudanças não autorizados pode ocorrer via acesso remoto (SSH) - Auditar é difícil e complexo
Por que segurança é tão complicado? - Antes - Instalar/atualizar servidores era um processo com muito trabalho manual - Servidores custam caro (Dinheiro, capacidade e armazenamento) - TI é péssima em liberar servidores porque geralmente alguma coisa (esquecida) quebra - Segredos, chaves ssh, certificados, string de conexões armazenados no servidor
- Sistema Operacionais são automaticamente provisionados a partir de um template - Imagens de containers são automaticamente provisionados a partir de um template Por que segurança é tão complicado? - Agora
- (Micro) serviços surgem e desaparecem rapidamente antes mesmo de conseguir catalogá-los (identificá-los) - A rastreabilidade tornou-se mais complexo - A segurança não é mais o gatekeeper das organizações Por que segurança é tão complicado? - Agora
Cenário mais comum - Snowflakes ● A construção do artefato é realizado numa ferramenta de Entrega Contínua ● As dependências são (re)instaladas a cada lançamento de versão do artefato ● O artefato é implementado nos servidores de homologação ● O artefato é implementado nos servidores de produção
Uma (falsa) premissa “A maneira mais econômica de garantir que o comportamento de dois servidores permanecerá completamente idêntico é sempre a implementar as mesmas alterações na mesma ordem em ambos anfitriões.” John Willis - @botchagalupe
Efeitos colaterais ● O repositório do sistema de empacotamento (Composer, PIP, GEM, apt, etc.) está indisponível ● As dependências quebram porque a biblioteca foo-1.15-1 não está mais disponível ● A biblioteca de dependência foobar-1.15-2 quebrou a construção do artefato
Problemas comuns em servidores mutáveis ● Aumento da complexidade operacional ○ Mais etapas no Pipeline ○ Maior tempo de Lead Time ○ Mais suscetível a falhas de terceiros, ex: repositórios externos
VM Infrastructure Hypervisor App A Artifact Bin/Libs App B Bin/Libs App C Bin/Libs Guest OS Guest OS Guest OS VM Infrastructure Hypervisor App A Artifact Bin/Libs App B Bin/Libs App C Bin/Libs Guest OS Guest OS Guest OS
Implementação - Não faça em produção ● Atualização de pacotes (bibliotecas e dependências) ● Alteração de configurações ● Modificações na aplicação ● “Não usar SSH”
Implementação - Boas práticas ● Servidores na Nuvem ● Automação completa de todo pipeline de serviços ● Logs centralizados ● Armazenamento de dados em “ambiente” externo ● Equipes de desenvolvimento e operações “engajadas”
Implementação - Boas práticas ● Estado de serviços, dados da aplicação ou qualquer outra informação que deve ser preservada até que outro “servidor” estava “no ar” devem estar em outro local da infraestrutura. (Stateless)
Visibilidade ● Onde e quando foi construído e por que? ● Qual foi a imagem anterior? ● Como iniciar, validar, monitorar e atualizá-la? John Willis - @botchagalupe
Visibilidade ● Qual repositório está sendo usado e qual hash do git foi usado para construir a imagem? ● Quais são as tags específicas do container/vm usada como registro do build? ● Qual o nome do projeto no qual pertence o artefato John Willis - @botchagalupe
Como tornar Imutável ● Provisione um novo servidor ● Teste o novo servidor ● Altera a referência para o novo servidor ● Mantenha a versão antiga (temporariamente) para fazer o rollback
Pontos de atenção ● Balanceadores de carga com suporte: ○ Canary ○ Blue/Green ○ Rolling Deploys ● Service Mesh ● Boa prática ao usar os códigos de status HTTP
Testes de segurança no pipeline ● Análise estática de código ● Validações de de conformidade de acesso autoriza ● Pen-tests ● Varredura por dependências com vulnerabilidades
Conclusão Infraestrutura Imutável é tornar como parte do artefato que será lançado (instalado) em produção a pilha (stack) completa da aplicação. Maximizando os diversos tipos de testes antes do artefato entrar em “produção”
Fernando Ike IT Director @ Nuveo // [email protected] // linkedin.com/in/fernandoike // twitter.com/fernandoike // www.10deploys.com // https://www.maburix.com