Vitor Hugo Bastos Cardoso apresenta voando alto com WordPress: um guia prátic...
Segurança e automação na AWS
1. Segurança e Automação Amazon Web Services
Lições das trincheiras.
Bruno Pereira Bruno Almeida
2. Quem Somos
CEO da Rivendel
CTO do Hotel Urbano
Desenvolvedor/Arquiteto com 12 anos de experiência
5 anos com Amazon Web Services
Mais de 70 clientes Amazon atendidos
Bruno Pereira
3. Quem Somos
Sócio da Rivendel e Arquiteto AWS
8 anos de experiência como DevOps
4 anos com Amazon Web Services
Mais de 50 clientes Amazon atendidos
Bruno Almeida
4. Quem Somos
Completando 1 ano em Maio
40+ clientes atendidos, cerca de 20 recorrentes
Parceira AWS e Mulesoft
Time atualmente com 10 pessoas
5. Motivação
Será mesmo que um Datacenter físico é mais seguro
que um ambiente automatizado em Cloud??
6. Motivação
A sua infraestrutura fica em um data center com qualquer uma
das certificações abaixo?
- HIPAA
- SOC 1/SSAE 16/ISAE 3402 (formerly SAS70) – (Focados em bilhetagem, medição e
transparência de custos financeiros)
- SOC 2 (Relatórios de segurança feito por auditoria externa)
- SOC 3 (Relatórios de segurança feito pela “AICPA”)
- PCI DSS Level 1 (Nível de segurança PCI para o meio físico)
- ISO 27001 (Certificação de boas práticas de segurança da informação)
- FedRAMP(SM) (Certificação compatível com o governo americano)
- DIACAP and FISMA
- ITAR
- FIPS 140-2
- CSA
- MPAA
- DoD 5220.22-M
(Politica de destruição de hardware)
8. Modelo de responsabilidade compartilhada
Se enxerguei mais longe
foi porque me apoiei nos
ombros de gigantes.
9. Modelo de responsabilidade compartilhada
Se enxerguei mais longe
foi porque me apoiei nos
ombros de gigantes.
Vamos nos apoiar na
Amazon e construir uma
solução campeã??
11. Grupos de segurança
Mecanismo útil para aplicar regras comuns de firewall em
múltiplos servidores de uma só vez, facilitando gestão
Importante criar grupos por camada de aplicação
Interessante liberar acesso para grupos
Tudo bloqueado por padrão, aberto só o que for liberado
explicitamente
13. Grupos de segurança – Melhorando
Grupos de segurança padrão definem as
regras de ENTRADA aos servidores. Eles
não tratam das regras de SAÍDA.
14. Segurança Web
Balanceamento: nginx, Apache, HAProxy ou ELB?
Preciso necessariamente de alguma coisa na frente do
servidor de aplicação?
Web Application Firewall (WAF)
16. Servidores HTTP com balanceamento
ELB + Autoscaling
Health-check de todas as
instâncias
Dá pra melhorar?
17. Servidores HTTP com balanceamento e WAF
Camada WAF adicional ao ELB
Proteção contra OWASP
Detectar a passagem de conteúdo
não autorizado como número de
cartão de crédito;
Gerar alerta forense
Proteção contra força bruta
Pode ser feito por software ou por
hardware especifico. Pode ser
instalado e configurado
manualmente ou contratado um
serviço especifico de WAF em
SaaS.
18. Heartbleed
Ocorreu uma falha possibilitando descriptograr o
conteúdo da requisição HTTPS.
Solução: atualizar o OpenSSL de sua instância
Na AWS, houve uma atualização automática no ELB
No seu Datacenter quanto tempo levou a correção?
19. Acesso de rede
Falamos muito de segurança WEB, mas e o meu acesso
à rede / instâncias (servidores) na AWS como fica?
Posso liberar o acesso SSH, RDP, FTP e MySQL aos
meus servidores publicamente e consigo acessá-los.
Mas isso é seguro?
20. NÃO!!!
Caso você deixe alguma dessas portas visivéis a
internet, você pode sofrer um ataque força bruta.
Com o seu endereço IP em mãos, pode-se executar um
comando nmap pra ver quais portas estão abertas e
então executar algum software de quebra de senha.
Como resolver? VPN/VPC to the rescue
21. VPN/VPC na Amazon
Precisamos de uma rede dentro da Amazon, ou seja uma
Virtual Private Cloud (VPC)
Passamos a ter regras de saída dos grupos de segurança,
em vez de só regras de entrada
Podemos configurar ACLs de rede
Temos a Amazon como extensão da nossa infraestrutura em
vez de tê-la como nuvem pública
VPC é totalmente gratuito
22. Porque ter Regras de Outbound?
Sua instância pode sofrer algum
ataque que a transforme em um
zumbi que faz chamadas a outros
servidores.
Esse tipo de ataque pode acontecer
caso não tenhamos regras de
entrada HTTP/HTTPS e SSH
adequadas, abrindo a entrada por
SSH ou SQL injection
23. ACLs de VPC
Onde se enquadra?
Em casos onde preciso aplicar
alguma regra para toda uma sub-
rede.
O conceito não é diferente do que já
é aplicável nos firewalls de mercado.
O objetivo é que você crie com ACLs
toda regra de entrada ou saída
válida aquela sub-rede ou grupo de
sub-redes.
24. Como se conectar de forma segura à VPC?
Posso ter uma VPN entre a minha rede e a AWS?
Sim, você pode usar a própria solução de
VPN AWS, basta ficarmos cientes de que a
solução padrão se conecta apenas a
grandes equipamentos de mercado.
Não tenho um equipamento de grande porte,
como faço essa configuração?
Podemos usar soluções linux como
OpenSwan ou OpenVPN.
Posso ter uma VPN do meu computador para
a AWS?
Sim, basta criar um servidor de VPN na AWS
usando PPTP ou OpenVPN.
25. O que fazer na sequência?
Você já parou pra pensar como controlar os acessos para
caso alguém da equipe saia da empresa ou projeto?
Será que é uma boa prática criar uma chave privada na AWS
e passar ela a todos os desenvolvedores?
Mesmo que você tenha uma chave para Homologação e uma
outra para produção, isto é suficiente?
26. Como controlar da melhor forma?
Como organizar e controlar as chaves privadas de acesso?
Devo criar usuários linux para cada usuário?
Sim, mas não acessíveis por senha
Então como?
Usuários devem possuir uma chave privada, pois o protocolo
SSH v2 já tem um bom nível de criptografia
Porém, é melhor ainda que cada integrante tenha sua chave
inserida no arquivo ssh de autorização de chaves
27. Hardening no SO
Quais acessos cada integrante da equipe realmente precisa
ter?
Permissão no SO limitada ao estritamente necessário
Quais pacotes manter instalados no SO?
Manter o mínimo de portas e serviços abertos
Protegendo ao máximo as chaves de acesso
Se é crítico ao extremo, contrate um Penetration Test!
28. Identity and Access Management (IAM)
Criando perfis e grupos para delegar autenticação e autorização
Controle de acesso por serviço, por servidor, grupo de
servidores, chegando a granularidade de 1 único recurso
Níveis diferentes de acesso em Dev, QA e PROD
Por que controlar os acessos?
Devemos ter usuários genéricos ou segregar usuários por
aplicação?
30. Entendendo até onde posso ir com as APIs
Como posso inicializar uma nova instância na AWS sem
intervenção manual?
ec2-run-instances [ID da AMI] -K [Chave Privada] -n 1 -g [Grupo
de Segurança]
31. Automatizando a subida de uma nova instância
Como eu poderia automatizar a ação de inicializar um servidor?
Nome: Script-teste.sh
Conteúdo:
#!/bin/bash
AWS_ACCESS_KEY= [ACCESS KEY]
AWS_SECRET_KEY= [SECRET ACCESS KEY]
ec2-run-instances [ID da AMI] -K [Chave Privada] -n 1 -g [Grupo de Segurança] && echo “OK”
32. Automatizando a criação de uma AMI
Como eu poderia automatizar a ação de montar um servidor
modelo?
Nome: Script-teste.sh
Conteúdo:
#!/bin/bash
AWS_ACCESS_KEY= [ACCESS KEY]
AWS_SECRET_KEY= [SECRET ACCESS KEY]
ec2-create-image [ID do Servidor Ligado que será o modelo] -n "Servidor WEB Modelo"
33. 1o processo de deploy automático com Auto Scaling
Nome: Script-teste.sh
Conteúdo:
#!/bin/bash
AWS_ACCESS_KEY= [ACCESS KEY]
AWS_SECRET_KEY= [SECRET ACCESS KEY]
ec2-create-image [ID do Servidor Ligado que será o modelo] -n "Servidor WEB Modelo"
as-create-launch-config ….
as-update-auto-scaling-group ...
34. AWS API + shell script for the win?
Não! Podemos fazer melhor que isso! :)
O ideal é usar um serviço especializado para configurar
servidores. Na AWS o serviço é o OpsWorks, que permite
escrever uma receita Chef, subir para um repositório git e ele
então configura um servidor para nós.
35. Vou configurar um serviço que irá configurar os
servidores pra mim?
Isso mesmo!
Usando Chef nós escreveremos uma receita em Ruby
(também aceita comandos shell), e vamos nesta receita
indicar o que queremos que ele efetivamente faça na
configuração.
36. Como começo a criar receitas?
Instale o chef em seu computador.
Crie um repositório git e ligue ele ao seu computador
dentro da pasta do projeto, execute o comando: knife cookbook create
[NOME DA RECEITA QUE DESEJA CRIAR]. Este comando irá criar toda
a estrutura de pastas da receita.
Vá até a pasta da receita que criou, e então na pasta recipe edite o
arquivo default. Insira por exemplo o conteúdo:
package "nginx" do
action :install
end
service "nginx" do
action [ :enable, :start ]
end
Pronto, salve o arquivo. Com este conteúdo em sua receita, você irá
instalar e habilitar em auto-inicialização o nginx.
37. Qual benefício de usar o OpsWorks e não um chef-
server?
Usando a API da AWS no OpsWorks conseguimos por exemplo pegar o
nome da Stack onde a receita está sendo executada. Isso fará com que
eu determine por exemplo qual arquivo de configuração de banco de
dados vou usar na receita.
case node[:opsworks][:stack][:name]
when "Producao"
#FAÇA ALGO
end
when "Homologacao"
#FAÇA ALGO
end
38. E o deploy da minha aplicação?
Podemos pelo Opsworks definir a aplicação que faremos
o deploy e qual o branch do controle de versão que será
aplicado.
Pensando em um ambiente com 1 deploy por semana,
isso não fará diferença. Pensando em Deploy Contínuo
com vários deploys por dia, isso fará muita diferença.
Você quer Deploy Contínuo, não é mesmo? :)
39. Que ferramenta eu uso em cada situação?
Na execução repetitiva de uma ação, como por exemplo
configurar nginx + php-fpm ou HipHop, o ideal é usarmos
o OpsWorks, pois ele irá aplicar aquela mesma receita
configurada uma única vez nas novas instâncias.
Em cenários pontuais e bem específicos como
configuração de um cluster de VPN OpenSwan ou
qualquer outra ocasião pontual que não se repete, o shell
script ainda será muito útil.