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