Comment passer des secrets aux informations d'identification (Ruby on Rails)

Les informations d'identification dans Ruby on Rails 5.2.0 sont la nouvelle norme d'or. Les bons vieux fichiers .env, mais non sécurisés, cèdent la place. Dans cet article, vous apprendrez:



  • pourquoi et comment passer des secrets aux informations d'identification,
  • comment utiliser les clés API dans Ruby, YML et js.erb,
  • donnez simplement la clé à chacune des équipes une fois pour toutes.


Jusqu'à il y a 3 ans, David Heinemeyer Hansson, le créateur du framework Ruby on Rails, tweetait à propos de l'arrivée de Rails 5.2.0, mais les nouvelles technologies mettent souvent du temps à s'accélérer et à gagner en publicité.



Cela peut être considéré comme un appel de réveil si vous devez jongler trop souvent avec les clés d'API, en les échangeant avec d'autres développeurs de votre équipe. Ensuite, il est temps de jeter un autre regard sur la façon dont vous pouvez utiliser les informations d'identification dans une application Ruby on Rails.



Pourquoi utiliser des informations d'identification au lieu de secrets?



Dans le cycle de développement, à mesure qu'il se développe, de plus en plus de services différents sont intégrés dans le projet. Chaque service externe possède sa propre clé API. Cela prend généralement très peu de temps avant que les collègues ne commencent à rechercher la dernière clé API. C'est très ennuyeux!



Ou, imaginez simplement que la clé API est en cours de mise à jour. Chaque développeur de l'équipe doit mettre à jour séparément la clé dans les fichiers dotenv locaux. Il semble que tout cela ne correspond pas au concept d'automatisation et d'idées de programmation, non?



Oubliez l'échange de clés API dans les chats ou les e-mails Slack. Vous n'avez plus à enfreindre votre politique de sécurité.



Credentials in Rails résout ce problème simplement et efficacement: le téléchargement de clés sur Github.



Téléchargement sur Github? Oui, téléchargez sur Github! Petite note: les clés API sont entièrement cryptées.



Le gros avantage de cette approche est qu'il n'y a qu'une seule clé à partager avec l'équipe. Et ça ne change jamais!



De nouvelles clés API ajoutées par vos pairs en tant qu'identifiants sont extraites de Github chaque fois que vous consultez la dernière version de la branche principale (anciennement appelée "branche principale" ).



La clé se trouve dans le dossier config / master.key.



Comment ça fonctionne?



L'exécution bin/rails credentials:edit



dans les rails crée deux fichiers requis dans le dossier de configuration:



  • credentials.yml.enc



    stocke toutes vos clés API. Au cas où vous seriez curieux, l'extension .enc signifie cryptage.
  • master.key



    Est la clé utilisée pour déchiffrer encrypted.file (1.) Assurez-vous d'ajouter master.key au fichier .gitignore.yml



    .


Avec le référentiel, nous envoyons notre fichier Credentials.yml.enc



à Github, maintenant il est entre de bonnes mains. En même temps, nous gardons master.key avec nous et le gardons comme si notre vie en dépendait!



Passer aux informations d'identification



Ouvrez le fichier d'informations d'identification en procédant comme suit dans un terminal:



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







Selon l'éditeur que vous utilisez, remplacez code



(VS Code). Par exemple:



vim ou vi = Vim

atom = Atom

subl ou stt = Sublime



Le fichier des identifiants est automatiquement ouvert dans l'éditeur et attend que vous l'actualisiez et le refermiez . Déplacez les clés ENV que vous utilisez dans le fichier .env vers le fichier credentials.yml.



Remplacez l'ancien fichier .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
      
      





sur 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
      
      





Remarque: la clé d'API Cloudinary est divisée en plusieurs parties selon la documentation.



Tout est prêt! Pour l'affichage, les informations d'identification peuvent être exécutées dans un terminal.



Courez bin/rails credentials:show



.



Il est temps de dire au revoir à notre vieil ami - le fichier .ENV. Supprimons-le.



Comment utiliser les informations d'identification dans différents formats tels que Ruby, YML et 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 nécessite un fichier JavaScript config / cloudinary.yml supplémentaire







// 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
      
      





Comment partager des clés avec une équipe



Partagez la clé master.key



avec d'autres développeurs pour activer le décryptage.



Chaque membre de l'équipe crée un fichier master.key



localement dans le dossier de configuration et le télécharge sur la clé partagée.



Production



La programmation devient de plus en plus amusante sans avoir à trouver les bonnes clés API. Grâce aux identifiants, nous pouvons mettre à jour l'application en tenant compte des recommandations de sécurité de l'information. Partagez la clé principale une fois et débarrassez-vous de la copie fastidieuse.



Merci pour l'attention!



All Articles