Rails 5.2: Encrypted Credentials (O novo Secrets)

Rails 5.2: Encrypted Credentials (O novo Secrets)

Como você guarda as credenciais no seu APP Ruby On Rails? Na versão 5.2 do framework foi introduzida uma  ferramenta chamada “Credentials” que permite que guardemos informações sensíveis (como tokens de API’s e etc) com tranquilidade (e criptografia) no nosso APP.

Neste artigo rápido vamos ver como implementar as Credentials no Rails 5.2 passo a passo para deixar seus APPs mais seguros e fáceis de gerenciar.

 

O que vamos aprender?

  • 1 – Como usar as credentials (exemplo prático)
  • 2 – Como Separar as credentials por ambiente (Production, Development e etc)

Utilizando as Credentials

Para que fique fácil de compreender a implementação nós vamos usar um exemplo prático, então vamos criar um novo projeto com Rails e a gem Devise 😁.

Criando o App e conhecendo a estrutura

1- Primeiro instale o Rails 5.2 rodando:

2- Gere o nosso app:

3- Entre no diretório do app:

4- Listando os arquivos da pasta config:

5- O que temos é:

credentials.yml.enc
Vamos nos atentar para dois arquivos importantes nesta lista: o credentials.yml.enc e o master.key.

 

O credentials.yml.enc é o arquivo criptografado contendo as chaves da aplicação e o master.key é o arquivo que contém a chave para criptografar e descriptografar o credentials.

 

O arquivo master.key não deve ser adicionado ao gerenciador de versão (Git, SVN etc.), já que contém uma chave muito importante, tanto que já vem adicionado por padrão no .gitignore.

Para deploy, este arquivo deve ser criado manualmente no servidor ou pode ser substituído pela variável de ambiente RAILS_MASTER_KEY.

 

Adicionando o Devise e Criando o Scaffold

1- Adicione a gem Devise no Gemfile:

2- Instale a dependência rodando:

3- Instale o Devise executando no terminal:

Obs: Após executar esta instalação, o Devise vai mostrar 4 passos para implementação. Como estes passos não são o foco do post, vamos pular esta etapa.

4- Gere o model User com o devise conectado a ele rodando:

5- Crie o scaffold para os filmes:

6- Adicione no ApplicationController (app/controllers/application_controller.rb):

7- Adicione também a rota raiz para a action index de MoviesController

8- Rode as migrations:

 

Adicionando informações sensíveis no Credentials

1- Primeiro gere uma chave (aleatória) para usarmos na configuração do Devise rodando:

Obs: Guarde o valor gerado 😁.

2- Abra o arquivo de “Credentials” com o seguinte comando:

Com este comando você vai abrir para edição o arquivo credentials.yml.enc utilizando a chave de criptografia que está dentro do arquivo master.key. Foi utilizado o parâmetro “EDITOR=nano” para que o arquivo seja aberto com o editor de texto Nano, mas podemos utilizar qualquer outro editor de texto de sua preferência.

3- Adicione a seguinte linha no arquivo que foi aberto e fechá-lo:

Obs1: É assim que você vai inserir suas informações sensíveis ao credentials
Obs2:
 Assim que o arquivo é fechado, ele é recriptografado com a chave presente no arquivo master.key.

4- Adicione a seguinte linha na inicialização do Devise (config/initializers/devise.rb):

Nós acessamos o item da chave do Devise que acrescentamos no credentials.yml.enc por meio da chamada Rails.application.credentials.devise_key.

 

Separando por ambiente (Production, Development e etc)

Caso você deseje usar credenciais diferentes baseado no ambiente que seu APP estiver (usar as credenciais de sandbox de um meio de pagamento em development e as oficiais em production por exemplo), você pode fazer da seguinte forma:

1 – Abra novamente as credentials rodando:

2 – Substitua o conteúdo do arquivo por (e depois feche ele):

3 – Atualize a configuração do devise em config/initializers/devise.rb colocando:

Quando seu APP estiver em Production o comando Rails.env vai retornar “production” e quando estiver em Development vai retornar “development” fazendo com que a credencial correta seja selecionada.

Obs: Usamos o .to_sym no Rails.env para transformar “development” em :development

 

Verificando a chave

Caso você queira verificar se realmente a chave foi aplicada ao Devise, podemos seguir os seguintes comandos:

1- Entrar no console do Rails com o comando:

2- Verificar a chave aplicada ao Devise:

3 – Verificar a chave no “credentials”:

Repare que os valores serão os mesmos, ou seja, conseguimos aplicar corretamente um item do arquivo credentials.yml.enc na configuração de uma gem, a Devise.

 

Conclusão

Com a introdução das “Credentials” no Ruby On Rails nós podemos reduzir (ou zerar) a necessidade de variáveis de ambiente na hora de incluir dados sensíveis no nosso App, então vale a pena experimentar essa ferramenta.

Se você gostou desse post ou tem alguma dúvida comenta ai em baixo, ficaremos felizes em receber o seu feedback.

Aproveita e compartilha esse post no Facebook clicando aqui

Obrigado 😁



12 formas de vencer o bloqueio criativo e escrever textos memoráveis (e 6 dicas extras)

Não perca nenhum conteúdo

Receba nosso resumo semanal com os novos posts, cursos, talks e vagas \o/




Você é novo por aqui?

Primeira vez no OneBitCode? Curtiu esse conteúdo? O OneBitCode tem muito mais para você!

O OneBitCode traz conteúdos de qualidade e em português sobre programação com foco em Ruby on Rails e outras tecnologias como Angular, Ionic, React, desenvolvimento de Chatbots e etc.

Se você deseja aprender mais, de uma forma natural e dentro de uma comunidade ativa, visite nosso Facebook e nosso Twitter, veja os screencasts e talks no Youtube, alguns acontecimentos no Instagram, ouça os Podcasts e faça parte de nossa Newsletter.

Além disso, também estamos com alguns e-Books muito interessantes para quem deseja se aprimorar como programador e também como freelancer (os e-Books são gratuitos!):

Espero que curta nossos conteúdos e sempre que precisar de ajuda com os tutoriais, fala com a gente! Seja por Facebook ou e-mail, estamos aqui para você 🙂

Bem-vindo à família OneBitCode \o/

abril 20, 2018

10
Deixe um comentário

avatar
3 Comment threads
7 Thread replies
1 Followers
 
Most reacted comment
Hottest comment thread
7 Comment authors
Alexandre FerreiraLeonardo ScorzaLucas CatonMarlosDaniel Docki Recent comment authors
  Subscribe  
newest oldest most voted
Notify of
Lucas Caton
Visitante

Massa o artigo, Daniel!

A única coisa que eu não curti em Credentials é que o DHH acha que todos os projetos são iguais ao Basecamp e faz do jeito que atende ele. Olha quantas pessoas reclamando sobre o lance de não suportar environments por padrão e ele simplesmente ignora todo mundo :/

Leonardo Scorza

E ai Lucas 🙂
É verdade a falta do environments por default é meio estranha mesmo rsrs, mas felizmente fica fácil contornar (vamos ver se eles vão adaptar ou documentar isso no futuro).

Valeu \o/

Daniel Docki
Visitante
Daniel Docki

Primeira coisa que pensei e as vars de ambiente?

Como vou trabalhar com isso times? vou ter que distribuir a Master Key pro time poder editar ou adicionar coisas no Credentials?

Leonardo Scorza

E ai Daniel :),
O jeito vai ser distribuir a key sim (mas pelo menos você ia ter que distribuir as variáveis de ambiente também).

Valeu por acompanhar o artigo 🙂

Lucas Caton
Visitante

Resolveram o problema! \o/

https://github.com/rails/rails/pull/33521

Leonardo Scorza

Boa 🙂

Marlos
Visitante
Marlos

Não largo o figaro até hoje. Tão mais simples. Por mim essa gem seria padrão do Rails. 👌🏼

Leonardo Scorza

A essa é bacana também 🙂

Alexandre Ferreira
Visitante
Alexandre Ferreira

Leonardo, como fica quando faz deploy, por exemplo, para o Heroku? Tá pra usar este mesmo arquivo ou tem que usar o pedrão do Heroku?

Feito com s2 por OneBitCode
%d blogueiros gostam disto: