So wechseln Sie von Geheimnissen zu Anmeldeinformationen (Ruby on Rails)

Anmeldeinformationen in Ruby on Rails 5.2.0 sind der neue Goldstandard. Die guten alten, aber unsicheren .env-Dateien geben nach. In diesem Artikel erfahren Sie:



  • warum und wie man von Geheimnissen zu Anmeldeinformationen übergeht,
  • Verwendung von API-Schlüsseln in Ruby, YML und js.erb
  • Geben Sie einfach jedem Team ein für alle Mal den Schlüssel.


Bis vor 3 Jahren, David Heinemeyer Hansson, der Schöpfer des Ruby on Rails - Framework, twitterte über die Ankunft von Rails 5.2.0, aber neue Technologien oft Zeit Publicity zu beschleunigen und Gewinn nehmen.



Es kann als Weckruf angesehen werden, wenn Sie zu oft mit API-Schlüsseln jonglieren und diese mit anderen Entwicklern in Ihrem Team austauschen müssen. Dann ist es Zeit, einen weiteren Blick darauf zu werfen, wie Sie Anmeldeinformationen in einer Ruby on Rails-Anwendung verwenden können.



Warum Anmeldeinformationen anstelle von Geheimnissen verwenden?



Während des Entwicklungszyklus werden im Laufe der Entwicklung immer mehr verschiedene Dienste in das Projekt integriert. Jeder externe Dienst verfügt über einen eigenen API-Schlüssel. Normalerweise dauert es sehr wenig, bis Kollegen nach dem neuesten API-Schlüssel suchen. Das ist sehr nervig!



Oder stellen Sie sich vor, der API-Schlüssel wird aktualisiert. Jeder Entwickler im Team muss den Schlüssel in den lokalen dotenv-Dateien separat aktualisieren. Es scheint, dass all dies nicht dem Konzept von Automatisierungs- und Programmierideen entspricht, oder?



Vergessen Sie den Austausch von API-Schlüsseln in Slack-Chats oder E-Mails. Sie müssen Ihre Sicherheitsrichtlinie nicht mehr verletzen.



Anmeldeinformationen in Rails lösen dieses Problem einfach und effizient: das Hochladen von Schlüsseln auf Github.



Auf Github hochladen? Ja, auf Github hochladen! Kleiner Hinweis: API-Schlüssel sind vollständig verschlüsselt.



Der große Vorteil dieses Ansatzes besteht darin, dass es einen einzigen Schlüssel gibt, den Sie mit dem Team teilen können. Und es ändert sich nie!



Jedes Mal, wenn Sie die neueste Version des Hauptzweigs (früher als "Hauptzweig" bezeichnet ) abrufen, werden neue API-Schlüssel von Ihren Kollegen als Anmeldeinformationen von Github abgerufen .



Der Schlüssel befindet sich im Ordner config / master.key.



Wie es funktioniert?



Beim Ausführen bin/rails credentials:edit



in Schienen werden zwei Dateien erstellt, die im Konfigurationsordner erforderlich sind:



  • credentials.yml.enc



    speichert alle Ihre API-Schlüssel. Wenn Sie neugierig sind, steht die Erweiterung .enc für Verschlüsselung.
  • master.key



    Ist der Schlüssel, der zum Entschlüsseln von encrypted.file verwendet wird (1.) Stellen Sie sicher, dass Sie der Datei master.key hinzufügen .gitignore.yml



    .


Zusammen mit dem Repository senden wir unsere Datei Credentials.yml.enc



an Github, jetzt ist sie in guten Händen. Gleichzeitig behalten wir master.key bei uns und behalten es, als ob unser Leben davon abhängt!



Zu Anmeldeinformationen wechseln



Öffnen Sie die Anmeldeinformationsdatei wie folgt in einem Terminal:



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







Ersetzen Sie je nach verwendetem Editor code



(VS-Code). Beispiel:



vim oder vi = Vim

atom = Atom

subl oder stt = Sublime



Die Anmeldeinformationsdatei wird automatisch im Editor geöffnet und wartet darauf, dass Sie sie aktualisieren und wieder schließen. Verschieben Sie die in der ENV-Datei verwendeten ENV-Schlüssel in die Datei credentials.yml.



Ersetzen Sie die alte Datei .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
      
      





am 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
      
      





Hinweis: Der Cloudinary API Key ist gemäß der Dokumentation in mehrere Teile unterteilt.



Alles ist fertig! Zur Anzeige können Anmeldeinformationen in einem Terminal ausgeführt werden.



Ausführen bin/rails credentials:show



.



Es ist Zeit, sich von unserem alten Freund zu verabschieden - der .ENV-Datei. Lass es uns löschen.



Verwendung von Anmeldeinformationen in verschiedenen Formaten wie Ruby, YML und 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) %>
      
      





Für Cloudinary ist eine zusätzliche JavaScript- Datei config / cloudinary.yml erforderlich







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





So teilen Sie Schlüssel mit einem Team



Teilen Sie den Schlüssel master.key



mit anderen Entwicklern, um die Entschlüsselung zu aktivieren.



Jedes Teammitglied erstellt eine Datei master.key



lokal im Konfigurationsordner und lädt sie auf den freigegebenen Schlüssel hoch.



Ausgabe



Das Programmieren macht immer mehr Spaß, ohne den Aufwand, die richtigen API-Schlüssel zu finden. Dank der Anmeldeinformationen können wir die Anwendung unter Berücksichtigung der Empfehlungen zur Informationssicherheit aktualisieren. Teilen Sie den Hauptschlüssel einmal und beseitigen Sie das mühsame Kopieren.



Vielen Dank für Ihre Aufmerksamkeit!



All Articles