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/




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 também JavaScript.
Além disso, aqui sempre levamos à você conteúdos valiosos sobre a carreira de programação, dicas sobre currículos, portfólios, perfil profissional, soft skills, enfim, tudo o que você precisa saber para continuar evoluindo como Programador(a)!

Fique por dentro de todos os conteúdos o/

 

Nossas redes sociais:

📹 • https://youtube.com/Onebitcode [Live todas as terças-feiras às 19h)
💻 • https://linkedin.com/company/onebitcode
🙂 • https://facebook.com/onebitcode
 📱  • https://instagram.com/one_bit_code
🐦 • https://twitter.com/onebitcode

 

Nossos cursos:

🥇 • Programador Full Stack Javascript em 8 Semanas
💎 • Curso Completo de Ruby
 ⚙  • Minicurso: API Rails 5 Completo
🐞 • Minicurso de Testes para Ruby on Rails com RSpec

 

Espero que curta nossos conteúdos e sempre que precisar de ajuda, fala com a gente!
E
stamos aqui para você 🙂

Bem-vindo à família OneBitCode o/

0 0 vote
Article Rating
janeiro 17, 2020
Subscribe
Notify of
guest
10 Comentários
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Lucas Caton
2 anos atrás

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
2 anos atrás
Reply to  Lucas Caton

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
Daniel Docki
2 anos atrás
Reply to  Lucas Caton

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
2 anos atrás
Reply to  Daniel Docki

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
2 anos atrás
Reply to  Lucas Caton

Resolveram o problema! \o/

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

Leonardo Scorza
2 anos atrás
Reply to  Lucas Caton

Boa 🙂

Marlos
Marlos
2 anos atrás

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

Leonardo Scorza
2 anos atrás
Reply to  Marlos

A essa é bacana também 🙂

Alexandre Ferreira
Alexandre Ferreira
2 anos atrás

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
10
0
Would love your thoughts, please comment.x
()
x
%d blogueiros gostam disto: