Como mudar de segredos para credenciais (Ruby on Rails)

As credenciais no Ruby on Rails 5.2.0 são o novo padrão ouro. Os bons e velhos arquivos .env inseguros estão cedendo. Neste artigo, você aprenderá:



  • por que e como passar de segredos a credenciais,
  • como usar chaves de API em Ruby, YML e js.erb,
  • basta dar a chave para cada um da equipe de uma vez por todas.


Até 3 anos atrás, David Heinemeyer Hansson, o criador do framework Ruby on Rails, tuitou sobre a chegada do Rails 5.2.0, mas novas tecnologias freqüentemente demoram para acelerar e ganhar publicidade.



Isso pode ser considerado uma chamada de alerta se você tiver que manipular chaves de API com muita frequência, trocando-as com outros desenvolvedores de sua equipe. Então é hora de dar uma outra olhada em como você pode usar credenciais em um aplicativo Ruby on Rails.



Por que usar credenciais em vez de segredos?



No ciclo de desenvolvimento, à medida que se desenvolve, mais e mais serviços diferentes são integrados no projeto. Cada serviço externo possui sua própria chave de API. Geralmente, leva muito pouco tempo antes que os colegas comecem a procurar a chave de API mais recente. Isso é muito chato!



Ou imagine que a chave API está sendo atualizada. Cada desenvolvedor da equipe deve atualizar separadamente a chave nos arquivos dotenv locais. Parece que tudo isso não corresponde ao conceito de automação e programação de ideias, certo?



Esqueça a troca de chaves de API em chats do Slack ou e-mail. Você não precisa mais violar sua política de segurança.



As credenciais no Rails resolvem esse problema de maneira simples e eficiente: fazer o upload de chaves para o Github.



Enviando para o Github? Sim, faça upload para o Github! Nota pequena: as chaves de API são totalmente criptografadas.



A grande vantagem dessa abordagem é que há uma única chave para compartilhar com a equipe. E isso nunca muda!



Novas chaves de API adicionadas por seus pares como credenciais são retiradas do Github toda vez que você verifica a versão mais recente do branch principal (anteriormente chamado de "branch master" ).



A chave pode ser encontrada na pasta config / master.key.



Como funciona?



A execução bin/rails credentials:edit



em trilhos cria dois arquivos que são necessários na pasta config:



  • credentials.yml.enc



    armazena todas as suas chaves de API. Caso você esteja curioso, a extensão .enc significa criptografia.
  • master.key



    É a chave usada para descriptografar criptografado.file (1.) Certifique-se de adicionar master.key ao arquivo .gitignore.yml



    .


Junto com o repositório, enviamos nosso arquivo Credentials.yml.enc



para o Github, agora está em boas mãos. Ao mesmo tempo, mantemos master.key conosco e como se nossa vida dependesse disso!



Mudando para credenciais



Abra o arquivo de credenciais fazendo o seguinte em um terminal:



EDITOR='code --wait' bin/rails credentials:edit







Dependendo do editor que você está usando, substitua code



(Código VS). Por exemplo:



vim ou vi = Vim

atom = Atom

subl ou stt = Sublime



O arquivo de credenciais é aberto automaticamente no editor e espera que você o atualize e feche novamente. Mova as chaves ENV que você usa no arquivo .env para o arquivo credentials.yml.



Substitua o arquivo antigo .ENV



:



STRIPE_PUBLISHABLE_KEY=pk_test_VG8LlUN82DcZS3cAOJVy0WyIR9Jwz0YZkq302MKc00t
STRIPE_SECRET_KEY=sk_test_VG8LlUN82DcZS3cAOJVy0WyIR9Jwz0YZkq302MKc00tgAAYF
STRIPE_WEBHOOK_SECRET_KEY=whsec_cZpB0VG8cZpB0VG8cZpB0VG8UrgA2gcZpB0VG8cZpB
CLOUDINARY_URL=cloudinary://15031853100444:XOr3XQ-DcZ4dBoan80@DcZ4Boan800U
GOOGLE_API_KEY=S3cAOJVy0WyS3cAOJVy0WyIR9AOJVy0WyIR92e
      
      





em credentials.yml



:



stripe:
  publishable_key: pk_test_VG8LlUN82DcZS3cAOJVy0WyIR9Jwz0YZkq302MKc00tgAAYF
  secret_key: sk_test_VG8LlUN82DcZS3cAOJVy0WyIR9Jwz0YZkq302MKc00tgAAYF
  web_hook_secret_key: whsec_cZpB0VG8cZpB0VG8cZpB0VG8UrgA2gcZpB0VG8cZpB

google_api_key: S3cAOJVy0WyS3cAOJVy0WyIR9AOJVy0WyIR92e

cloudinary:
  cloud_name: abcdefg
  api_key: 12345678910
  api_secret: abc315-VG8Ll8VG8Ll8L
      
      





Nota: A Cloudinary API Key é dividida em várias partes de acordo com a documentação.



Está tudo pronto! Para exibição, as credenciais podem ser executadas em um terminal.



Corra bin/rails credentials:show



.



É hora de dizer adeus ao nosso velho amigo - o arquivo .ENV. Vamos deletar.



Como usar credenciais em diferentes formatos, como Ruby, YML e JavaScript



Ruby



# nested key
Rails.application.credentials.stripe[:publishable_key]

# single key
Rails.application.credentials.google_api_key
      
      





YML



cloudinary:
  service: Cloudinary
  api_key: <%= Rails.application.credentials.dig(:cloudinary, :api_key) %>
  api_secret: <%= Rails.application.credentials.dig(:cloudinary, :api_secret) %>
      
      





Cloudinary requer um arquivo JavaScript config / cloudinary.yml adicional







// ruby code only possible with js.erb format
const abc = "<%= Rails.application.credentials.google_api_key %>"
      
      





Html



<!-- interpolate in script tag --> 
<script src="https://maps.googleapis.com/maps/api/js?key=<%= "#{Rails.application.credentials.google_api_key}"%>"</script
      
      





Como compartilhar chaves com uma equipe



Compartilhe a chave master.key



com outros desenvolvedores para habilitar a descriptografia.



Cada membro da equipe cria um arquivo master.key



localmente na pasta de configuração e carrega-o na chave compartilhada.



Resultado



A programação está se tornando cada vez mais divertida, sem o incômodo e o incômodo de encontrar as chaves de API certas. Graças às credenciais, podemos atualizar o aplicativo levando em consideração as recomendações de segurança da informação. Compartilhe a chave mestra uma vez e livre-se da tediosa cópia.



Obrigado pela atenção!



All Articles