Para facilitar o acesso as maquinas, utilizamos VMs na nuvem.
Usando a Amazon, criamos instancias baseadas em Linux, distribuição Ubuntu 20.04 LTS.
As VMs criadas na amazon serão chamadas de instâncias, com tais objetivos:
As VMs criadas nas instâncias, serão chamadas de VMs, com os objetivos:
Utilizamos um container em docker contendo o ssh, para o acesso as instâncias na nuvem.
Pelo ponto de vista da segurança e gerenciamento da conta na amazon, devemos atribuir contas diferentes, para propósitos diferentes. Assim temos:
Este usuário tem permissão para criar instâncias. Ainda é possível definirmos que configurações a instância criada tem permissão para usar. As mais interessantes/importantes, por mim destacadas são:
Montar o conjunto de regras de algumas linhas parece uma tarefa fácil, mas não foi para mim.
Inicialmente fiz vários testes usando um simulador dessas regras, que a princípio parece bem mais rápido e eficiente do que ficar tentando executar as ações e ajustando a policy de acordo. Porém mesmo olhando todos os exemplos que encontrava na net, parecia que não funcionava certo, e o pior era que não tinha nenhum tipo de log ou mensagem do que estava bloqueando a ação, era um simples sim
ou não
. Então depois de horas errando acabei indo testar direto usando o programa da amazon, awscli
que tenho uma breve experiência. Com ele quando um erro acontecia, uma mensagem criptografada aparecia como a mensagem de erro, e com as permissões certas, bastava decriptografa-la para acessar a mensagem de autorização negada. Com isso fui me guiando partindo sempre do princípio básico, fazer funcionar e testar o que bloqueia, demorei alguns minutos para encontrar o ponto certo, mas depois rapidamente as coisas se encaixaram e tudo funcionou perfeitamente. Amazon rocks!!
Coisas que não funcionaram bem comigo:
awscli
usando a opção --dry-run
então ele nunca vai realmente criar uma instânciaNesta fase serão criadas as permissões para a criação das intâncias, com segurança. Devido ao ótimo mecanismo de gerenciamento de permissões de acesso (IAM) é possível limitar a responsabilidade de cada usuário, minimizando os danos no caso de um incidente de invasão.
Após essa fase dois usuário serão criados. O primeiro usuário, criado pelo console da amazon (navegador), responsável por criar o outro usuário e configurar as suas permissões. Este último usuário terá a responsabilidade de criar instâncias free-tier
s na amazon.
O primeiro será chamado de setup-manager
, mas não é necessário usar o mesmo nome; e o último está sendo chamado de ubuntu-sim-deployer
, este está hard-coded
nos arquivos, sendo que para alterá-lo terá que alterar também nas dependências. Você foi avisado!.
Todos os passos serão executados no console da amazon.
IAM > Policies > Create Policy
JSON
e troque o conteúdo com o conteúdo de first-setup-policyIAMFirstSetupManager
IAM > Users > Add User
setup-manager
Programmatic access
IAMFirstSetupManager
Com o usuário criado e permissões setadas, podemos dar início a configuração inicial.
Não entrarei em detalhes sobre configuração/instalação do docker em diferentes plataformas, logo assumirei que este já esteja em perfeito funcionamento.
no diretório instances
contém um Dockerfile que cria uma imagem com o ansible e o cliente ssh. Então para criar a imagem:
$ docker build instances/
configurar as variáveis de ambiente da amazon, usando o arquivo aws.env.example como base. Então copiamos este para aws.env
(automaticamente ignorado pelo git, assim espero) e o configuramos com as credenciais do usuário setup-manager
, criado anteriormente. No final terá algo assim:
$ cat instances/aws.env
# Store your access keys, and pass it to docker with --env-file
AWS_ACCESS_KEY_ID=6bb1f81d42c1cd7ad1ee3536029e AWS_ACCESS_SECRET_KEY=n40Rk8gUHjDchQ70ncHpMMST97c7NiN6w21U9YiirPjR3TwDKhik9Qk+Ho AWS_DEFAULT_REGION=sa-east-1
- para nosso propósito, precisaremos de dois volumes sendo:
- um volume `somente-leitura` tendo os arquivos do ansible
- um volume para transferirmos as chaves da vpn para o host
o nome dos volumes criados na imagem docker é irrelevante, porém é aconselhado seguir o padrão:
**OBS**: adaptar `/caminho-diretório/instances` para o seu ambiente, tomando o cuidade de que seja um caminho absoluto. No windows deve ser algo como `C:\...`
```bash
$ docker run --rm -it --env-file aws.env -v /caminho-diretório/instances/ansible:/instances:ro -v /caminho-diretório/instances/vpnkeys:/vpnkeys ${IMAGE_ID}
bash-5.0# echo Alpine rocks!!!
Ao final do comando docker run ...
devemos cair direto no bash da imagem.
Com o bash aberto no container, você deve estar apto a usar tanto o ansible
quanto awscli
. Para ter certeza, execute estes testes:
bash-5.0# ansible-playbook instances/my-cidr.yml
Ao final deve mostrar a rede do endereço IP público.
bash-5.0# aws iam list-users
Deve listar todos os usuários pertencentes a conta.