
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:
1 |
gem install rails -v '5.2' |
2- Gere o nosso app:
1 |
rails new buy_movies |
3- Entre no diretório do app:
1 |
cd buy_movies |
4- Listando os arquivos da pasta config:
1 |
ls config |
5- O que temos é:

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:
1 |
gem 'devise' |
2- Instale a dependência rodando:
1 |
bundle install |
3- Instale o Devise executando no terminal:
1 |
rails g devise:install |
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:
1 |
rails g devise User |
5- Crie o scaffold para os filmes:
1 |
rails g scaffold Movie |
6- Adicione no ApplicationController (app/controllers/application_controller.rb):
1 |
before_action :authenticate_user! |
7- Adicione também a rota raiz para a action index de MoviesController
1 |
root to: "movies#index" |
8- Rode as migrations:
1 |
rails db:migrate |
Adicionando informações sensíveis no Credentials
1- Primeiro gere uma chave (aleatória) para usarmos na configuração do Devise rodando:
1 |
rails secret |
Obs: Guarde o valor gerado 😁.
2- Abra o arquivo de “Credentials” com o seguinte comando:
1 |
EDITOR=nano rails credentials:edit |
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:
1 |
devise_key: <chave gerada no passo 1> |
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):
1 |
config.secret_key = Rails.application.credentials.devise_key |
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:
1 |
EDITOR=nano rails credentials:edit |
2 – Substitua o conteúdo do arquivo por (e depois feche ele):
1 2 3 4 |
development: devise_key: <chave gerada no passo 1> production: devise_key: <outra chave> |
3 – Atualize a configuração do devise em config/initializers/devise.rb colocando:
1 |
config.secret_key = Rails.application.credentials[Rails.env.to_sym][:devise_key] |
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:
1 |
rails c |
2- Verificar a chave aplicada ao Devise:
1 |
Devise.secret_key |
3 – Verificar a chave no “credentials”:
1 |
Rails.application.credentials[Rails.env.to_sym][:devise_key] |
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 😁

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
💎 • https://onebitcode.com/vegas-backpage-women-seeking-men/
⚙ • usa single mom dating
🐞 • speed dating houston over 50
Espero que curta nossos conteúdos e sempre que precisar de ajuda, fala com a gente!
Estamos aqui para você 🙂
Bem-vindo à família OneBitCode o/
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 :/
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/
Valeu, Lucas!
Eu também não curti muito. Embora a saída seja simples, achei desnecessária a saída do suporte por ambiente. 😐
E já tem gente recorrendo a gems pra poder ‘resolver’ isso.
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?
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 🙂
Resolveram o problema! \o/
https://github.com/rails/rails/pull/33521
Boa 🙂
Não largo o figaro até hoje. Tão mais simples. Por mim essa gem seria padrão do Rails. 👌🏼
A essa é bacana também 🙂
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?