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