Coder Social home page Coder Social logo

iac's People

Contributors

afonsoaugusto avatar anapaulagomes avatar felipefrizzo avatar francilioaraujo avatar gomex avatar marcelomansur avatar rehzende avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

iac's Issues

Criar código pra manter bucket no AWS S3

Precisamos de um código para garantir que o bucket com um determinado nome exista, em uma determinada região.

A configuração deve permitir trocar as permissões do bucket, ao menos pra deixar público ou não. O padrão deve ser NÃO público.

Esse código deve ser testado no pipeline usando localstack ou algo equivalente.

Esse código deve ser um módulo a ser armazenado em repositório próprio: https://github.com/mentoriaiac/iac-modulo-s3

No repositório iac deve ter um arquivo terraform usado para consumir o módulo externo (que pode ser algo pronto ou feito por nós).

Esse modulo precisa ter ao menos um teste, que seria validar se o bucket se acessar via http, um bucket que não deveria ser público e validar se consegue upload de arquivos no bucket com a credencial correta.

Links que podem ajudar na solução do PR:

https://github.com/localstack/localstack
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/guides/custom-service-endpoints
https://github.com/UlisesGascon/sample-terraform-localstack
https://blog.gruntwork.io/how-to-create-reusable-infrastructure-with-terraform-modules-25526d65f73d

Criar automação pra configurar log centralizado. (era logentries)

Essa automação precisa acontecer na role https://github.com/DadosAbertosDeFeira/iac-role-services

Precisa capturar o log de:

  • Todos os containers (Não importa quantos tenham, ou seja, não devemos precisar especificar quais, tendo container isso deveria capturar os logs
  • Log do nginx
  • Log do linux (a role deve ter inputs pra especificar quais logs devem ser monitorados)

Essa role deve ter o seguintes parâmetros:

  • Se funciona com docker ou não
  • Especificar a API KEY do Logentries

Colocar o deploy da app dokku no CI para testar

O código IaC atual cria a infra basica do Dokku, cria a rede "dokku_services", coloca o container do tika na mesma rede, configura tudo, mas não faz deploy. Isso é esperado, mas precisamos na etapa do molecule simular o deploy do dokku.

Como eu imagino que possa ser feito:

  • Clonar o repo mariaquiteria
  • Configuração da maquina do dokku como remote
  • Faz um push nesse remote
  • Pegar o código de retorno disso pra validar o processo

Proteger o nome e porta do servidor a ser feito deploy para evitar vazamento de dados

Hoje o deploy do mariaquiteria está exibindo essa mensagem no passo "Push to Dokku":

Generating SSH_HOST_KEY from ssh-keyscan against nat-25434.nuvem-brasil-10.absamcloud.com:43841
# nat-25434.nuvem-brasil-10.absamcloud.com:43841 SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.3
# nat-25434.nuvem-brasil-10.absamcloud.com:43841 SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.3
# nat-25434.nuvem-brasil-10.absamcloud.com:43841 SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.3
# nat-25434.nuvem-brasil-10.absamcloud.com:43841 SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.3
# nat-25434.nuvem-brasil-10.absamcloud.com:43841 SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.3

Isso é o nome do host dokku, com a porta. Eu sei que esconder esses dados não é o suficiente para oferecer uma real medida de segurança, afinal somente esconder é segurança por obscuridade, mas não sei se precisamos oferecer dados de "mão beijada para o atacante".

Precisamos criar um PR no repositório que é responsável por essa action: https://github.com/dokku/github-action

Nesse PR deve ter uma opção para ocultar o host e port, o default deve ser o comportamento padrão da action hoje, que é expor.

Fazer deploy do dramatiq como uma app nova do Dokku

Temos que alterar o playbook: https://github.com/DadosAbertosDeFeira/iac/blob/main/playbook.yml para que uma nova app seja criada e devidamente configurada.

Mais detalhes sobre como o dramatiq deveria ser configurado você encontra aqui: https://github.com/DadosAbertosDeFeira/maria-quiteria/blob/main/docker-compose.yml

Ele deve ser uma aplicação dokku como a outra que já tem lá hoje.

Fique atento que essa nova app é a partir do mesmo repo: https://github.com/DadosAbertosDeFeira/maria-quiteria mas ela deve ter um command diferente para iniciar o container, ok?

Critérios para aceitação de PR:

Obs: A distro usada será ubuntu 18.04 LTS.

Configurar check automático no deploy do dokku

Ao fazer deploy o dokku informa a seguinte mensagem:

Processing deployment checks
       No CHECKS file found. Simple container checks will be performed.
       For more efficient zero downtime deployments, create a CHECKS file. See http://dokku.viewdocs.io/dokku/deployment/zero-downtime-deploys/ for examples

O objetivo dessa issue é olhar a forma como o Dokku sugere que façamos o check e propor algo.

Hardening SSH

Precisamos reforçar a segurança fazendo hardening na configuração do SSH. Isso deve entrar na role: https://github.com/DadosAbertosDeFeira/iac-role-basica.

O escopo mínimo de hardening é:

  • Não permitir login de root
  • Login APENAS com chave publica
  • Limitar o tempo de autenticação (LoginGraceTime)
  • Limitar em 3 o número de tentativas
  • Desabilitar outros métodos de autenticação ( ChallengeResponseAuthentication no, KerberosAuthentication no, GSSAPIAuthentication no)
  • Desabilitar o X11Forwarding
  • Desabilitar PermitUserEnvironment
  • Desabilitar AllowAgentForwarding
  • Desabilitar AllowTcpForwarding
  • Desabilitar o PermitTunnel
  • Desabilitar o Banner (DebianBanner?)
  • Forçar o protocolo 2 (Protocol 2)

Você pode sugerir mais, porém esse apresentado até aqui é o mínimo que deve ser aplicado ^

Seria muito bom ter um teste automatizado pra validar algumas coisas dessa role no molecule também.

Obs: fail2ban está fora desse escopo. Seria MUITO legal ter isso, mas façamos em outro ticket.

Links:

https://linux-audit.com/audit-and-harden-your-ssh-configuration/
https://www.digitalocean.com/community/tutorials/how-to-harden-openssh-on-ubuntu-18-04-pt

Colocar o cloudflare no CI

Precisamos executar o cloudflare antes do deploy em produção.

O modulo terraform está pronto: https://github.com/mentoriaiac/iac-modulo-cloudflare/releases/tag/v0.1

Deve ser usado a tag especifica e não branch master.

Ele só deve rodar no ambiente correto, com base comportamento correto. Só executa a parte de staging, quando for staging e produção quando for o momento de deploy em produção. Os critérios dessa diferença serão definidos nesse ticket: #52

Colocar manutenção do bucket S3 no CI

Precisamos a manutenção do bucket S3 antes do deploy em produção.

O modulo terraform está pronto: https://github.com/mentoriaiac/iac-modulo-s3/releases/tag/v0.1

Deve ser usado a tag especifica e não branch master.

Ele só deve rodar no ambiente correto, com base comportamento correto. Só executa a parte de staging, quando for staging e produção quando for o momento de deploy em produção. Os critérios dessa diferença serão definidos nesse ticket: #52

Mudança de tasks por post_tasks

Olá, acredito que no arquivo playbook.yml ficaria mais intuitivo e idiomático se fosse trocado tasks por post_tasks , pois penso que a primeira vista pode ser confundido a ordem de execução entre tasks e roles.

Criar uma role pra deploy dos serviços de apoio para aplicação

O PR deve ser feito nesse repositório: https://github.com/DadosAbertosDeFeira/iac-role-services

Essa role deve fazer:

Obs: A distro usada será ubuntu 18.04 LTS.

Inputs da role:

  • Opção de deployar o serviço em questão ou não (Uma variável que vai permitir que o tika seja deployado ou não, o default é True)
  • Opção de setar a tag da imagem do serviço em questão (docker_tag_tika por exemplo deve ser a variável que será usada na role para especificar o nome da tag. Essa variável deve ter um default na role e não deve ser latest)

Obs: Esse deploy NÃO É PARA O DOKKU. É no Docker puro, é para fazer deploy de serviços que o Dokku não tiver suporte nativo.

Critérios para aceitação dessa role:

Sugestões de leitura:

Obs: Essas dicas não são limites, pode ser usado qualquer outra solução que funcione bem e que seja idempotente (rodar o ansible duas vezes e na segunda todos as tasks retornarem ok ao invés de changed ou failed)

Um playbook para configurar inicialmente o servidor web

Esse playbook não deverá aplicar nenhuma task especifica, apenas uso do roles baixadas via requirements.yml.

O que deve ser feito nessa task:

  • Instalar docker + dokku
  • Criar aplicação dokku
  • Instalar plugins do dokku (Let's encrypt e clone)
  • Configurar let's encrypt na aplicação criada
  • Configurar a aplicação pra receber chamada http via nginx do Dokku
  • Criar usuários e colocar as chaves públicas
  • Mudar a senha de root e apagar usuários desnecessários

Siga o README e execute o teste. Ele deve passar para essa issue ser completada.

Obs: A distro usada será ubuntu 18.04 LTS.

Critérios para aceitação dessa role:

  • Ambiente recebendo requisição HTTPS com certificado válido

PS: Preciso criar um teste automatizado para validar que tem certificado válido (ver como fazer com let's encrypt de teste)

Documentação do Dokku: http://dokku.viewdocs.io/dokku/getting-started/installation/
Código ansible oficial do Dokku: https://github.com/dokku/ansible-dokku

PS: Estamos abertos a usar outra solução (de PaaS ou não), mas precisar ser algo simples como Dokku.

Migração do NewRelic

O projeto hoje usa o NewRelic via heroku, mas precisamos migrar pra uma conta separada do heroku.

Limitar o uso do worker no Mariaquiteria

Hoje ele consume muito recurso e inviabiliza a maquina. Precisamos avaliar o quanto de recurso é necessário e limitar pra evitar que a maquina seja "tomada".

Colocar os dados seguros para deploy

Existem algumas variáveis seguras que precisam ser aplicadas na app dokku, mas elas não podem ser colocadas em texto plano no github. Elas precisam ser encriptadas.

Pretendemos usar ansible-vault pra isso.

O playbook deve deployar um env por vez

Precisamos adaptar o playbook, pois o CI precisa de um comando pra fazer deploy APENAS em staging ou em produção por vez, para que staging possa ser testado antes de produção.

Construir imagem docker do TIKA

A imagem padrão do Apache Tika - Dockerfile, não inclui o OCR para o Português.

O PR deve ser feito para esse repo: https://github.com/DadosAbertosDeFeira/iac-docker-tika

Por isso é necessário criar uma imagem docker contemplando as necessidades do projeto, seguindo os mesmos padrões da imagem oficial do grupo Apache, removendo as linguagens desnecessárias (ita, fra,...) e adicionando o português (por)

Critérios de aceitação:

  • Seguir o modelo do Apache Tika
  • A porta padrão é a 9998

O CI deve ter:

  • Um lint do Dockerfile
  • Um build da imagem
  • Um teste simples qualquer pra validar a imagem ( ex.: saber se o serviço subiu e está escutando na porta )
  • Trigger para que a partir de uma tag do github ele buidar com a tag igual a tag do github e depois fazer upload no hub.docker.com

Criar modulo terraform pra controlar entradas no Cloudflare

Precisamos de um modulo terraform que eu possa passar um conjunto de entradas e o modulo ser responsável por criar no dominio escolhido.

exemplo de input:

rules = [
 {
   type = "A"
   entry = "@"
   value = "10.10.10.10"
 },
 {
   type = "cname"
   entry = "www"
   value = "@"
 }
  ]

Precisamos de um padrão para os commits

Precisamos definir algumas regras para padronizar o envio de commits.

Algumas opiniões:

  • O texto deve ser em português (palavras em inglês que usamos no português são aceitáveis, tal como deploy e afins)
  • Precisa ter o link para a issue que está tentando resolver
  • Precisa ser sempre explicando o que está no commit

Obs: Isso são apenas opiniões e vocês podem sugerir coisas novas ou divergir do que eu coloquei, ok?

Sugestão de leitura: https://www.conventionalcommits.org/en/v1.0.0/#summary (Eu olhei por cima, ou seja, não endosso 100% não).

Configurar o LB e alta disponibilidade na ABSAM

Temos que colocar um servidor adicional e configurar o dokku lá também.

Precisamos usar o LB da ABSAM pra repassar o tráfego igual para as duas maquinas.

Seria muito legal que esse maquina estivesse em outro datacenter.

Integração com Discord

Seria legal termos algumas integrações com o Discord.

A minha primeira ideia seria enviar uma mensagem de deploy feito com sucesso ou falha pra nossa sala de infraestrutura.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.