Ruby on Rails Modifier les informations d'identification

Guide du débutant en Ruby on Rails : Modifier les informations d'identification et les secrets cryptés

Ruby on Rails, souvent appelé Rails, est un puissant cadre d'application web basé sur le langage de programmation Ruby. L'une de ses principales caractéristiques est la possibilité de gérer en toute sécurité des données sensibles, telles que les clés d'API, les identifiants de base de données et d'autres secrets, au moyen d'identifiants cryptés. Ce guide est conçu pour que les débutants comprennent comment travailler avec le système d'identification de Rails, en se concentrant sur l'édition des identifiants et la gestion efficace des secrets cryptés. À la fin, vous aurez une compréhension claire de la façon de gérer en toute sécurité les informations sensibles dans votre application Rails, avec des exemples pratiques et les meilleures pratiques.

Cet article suppose que vous avez des connaissances de base sur Ruby et Rails, notamment sur la façon de configurer une application Rails et de naviguer dans sa structure de répertoires. Si vous ne connaissez pas encore Rails, vous pouvez consulter la version officielle de Rubis sur Rails Guides pour les connaissances de base. Plongeons dans le monde des identifiants et des secrets cryptés de Rails !

Comprendre les informations d'identification et les secrets cryptés de Rails

Que sont les informations d'identification Rails ?

Les informations d'identification Rails constituent un moyen sûr de stocker des informations sensibles, telles que des clés API, des mots de passe ou des jetons, dont votre application a besoin pour fonctionner. Contrairement aux valeurs codées en dur dans le code source ou aux fichiers de configuration non chiffrés, les informations d'identification Rails sont chiffrées et stockées dans un fichier appelé config/credentials.yml.enc. Ce fichier est sûr pour le contrôle de version (par exemple, Git) car il est crypté, ce qui garantit que les données sensibles ne sont pas exposées.

Le cryptage est géré à l'aide d'une clé principale, stockée dans le système config/master.key ou une clé spécifique à l'environnement (par exemple, config/credentials/production.key). La clé principale est utilisée pour crypter et décrypter le fichier d'informations d'identification. jamais s'engager à contrôler les versions afin d'empêcher tout accès non autorisé à vos secrets.

Évolution de la gestion des secrets dans Rails

Avant Rails 5.1, les données sensibles étaient souvent stockées dans les fichiers config/secrets.yml, qui n'était pas chiffré et présentait des risques de sécurité s'il était accidentellement transféré dans un référentiel. Rails 5.1 a introduit les secrets cryptés, et Rails 5.2 et les versions ultérieures ont affiné ce système pour aboutir au système d'identification que nous utilisons aujourd'hui. Dans Rails 6 et les versions ultérieures, vous pouvez gérer des informations d'identification spécifiques à un environnement, ce qui permet d'avoir des secrets distincts pour les environnements de développement, de test et de production. Cette évolution a permis de relever les défis posés par le travail en équipe, où le partage de données sensibles en toute sécurité s'avérait fastidieux.

Pourquoi utiliser des informations d'identification cryptées ?

Les informations d'identification cryptées permettent de résoudre plusieurs problèmes :

  • La sécurité : Les données sensibles sont cryptées, ce qui réduit le risque d'exposition.
  • Contrôle de version : Les données cryptées credentials.yml.enc peut être livré en toute sécurité à Git.
  • Collaboration au sein de l'équipe : Les développeurs peuvent partager une base de code sans dévoiler de secrets, en utilisant une clé principale partagée en toute sécurité (par exemple, via un gestionnaire de mots de passe).
  • Secrets spécifiques à l'environnement : Rails prend en charge des identifiants distincts pour différents environnements, ce qui simplifie le déploiement.

Configuration des identifiants Rails

Création d'une nouvelle application Rails

Pour continuer, assurez-vous que Ruby et Rails sont installés. Vous pouvez vérifier vos versions avec :

bash
ruby -v
rails -v

Si Rails n'est pas installé, installez-le en utilisant :

bash
gem install rails

Créez une nouvelle application Rails :

bash
rails new myapp
cd myapp

Lorsque vous créez une nouvelle application Rails, Rails génère automatiquement deux fichiers clés dans le répertoire configuration répertoire :

  • config/credentials.yml.enc: Le fichier crypté dans lequel les informations d'identification sont stockées.
  • config/master.key: La clé de cryptage utilisée pour décrypter credentials.yml.enc.

Important : Ne jamais s'engager config/master.key au contrôle de version. Ajoutez-le à votre .gitignore afin d'éviter toute exposition accidentelle.

Vérification de la configuration de vos données d'identification

Pour vérifier que votre fichier d'informations d'identification existe, vérifiez le fichier configuration répertoire :

bash
ls config/

Vous devriez voir credentials.yml.enc et clé principale. Si clé principale est manquante, Rails en générera une la première fois que vous modifierez les informations d'identification (voir ci-dessous).

Modifier les informations d'identification de Rails

Ouverture du fichier d'identification

Pour modifier les informations d'identification, utilisez la commande Rails :

bash
EDITOR="vim" rails credentials:edit

Cette commande ouvre le fichier décrypté config/credentials.yml.enc dans l'éditeur spécifié (par exemple, Vim, Nano ou VS Code). Remplacer “vim” avec votre éditeur préféré, tel que “code”pour VS Code. Si <code.config/credentials.yml.enc ou config/master.key n'existe pas, Rails les créera.

Lorsque vous exécutez la commande, vous obtenez un fichier formaté en YAML. Un fichier d'informations d'identification par défaut peut ressembler à ceci :

yaml
# Utilisé comme secret de base pour tous les MessageVerifiers dans Rails, y compris celui qui protège les cookies.
secret_key_base : votre_secret_key_base

Le base_clé_secrète est une valeur critique utilisée pour signer et crypter les cookies et autres données dans Rails. Elle est générée automatiquement lorsque vous créez une nouvelle application Rails.

Ajout de nouvelles données d'identification

Vous pouvez ajouter vos propres informations d'identification dans le fichier YAML. Par exemple, pour ajouter les clés d'API AWS et Stripe, modifiez le fichier comme suit :

yaml
# config/credentials.yml.enc
aws :
    access_key_id : votre_access_key_id
    secret_access_key : your_secret_access_key
stripe :
    public_key : test_public
    clé privée : test_private
secret_key_base : votre_secret_key_base

Enregistrez et fermez l'éditeur. Rails cryptera automatiquement le fichier et l'enregistrera en tant que config/credentials.yml.enc. Les données sont désormais sécurisées et peuvent être soumises à un contrôle de version.

Références spécifiques à l'environnement (Rails 6+)

Pour Rails 6 et les versions ultérieures, vous pouvez gérer les informations d'identification spécifiques à l'environnement. Par exemple, pour modifier les informations d'identification de production :

bash
EDITOR="vim" rails credentials:edit --environnement production

Cela permet de créer ou de modifier config/credentials/production.yml.enc et utilise config/credentials/production.key pour le cryptage. Un exemple de fichier d'identification de production pourrait ressembler à ceci :

yaml
# config/credentials/production.yml.enc
aws :
    access_key_id : prod_access_key_id
    secret_access_key : prod_secret_access_key
secret_key_base : prod_secret_key_base

De même, vous pouvez gérer les identifiants de développement ou de test à l'aide de la fonction --développement de l'environnement ou --environnement test. Cela vous permet d'utiliser des clés API ou des identifiants de base de données différents pour chaque environnement.

Accès aux informations d'identification dans votre application

Titres de compétences en lecture

Vous pouvez accéder aux informations d'identification dans votre application Rails à l'aide de la fonction Rails.application.credentials. Par exemple, pour récupérer la clé d'accès AWS :

ruby
Rails.application.credentials.aws[:access_key_id]
# => "your_access_key_id"

Pour les informations d'identification spécifiques à l'environnement, Rails charge automatiquement le fichier approprié en fonction du paramètre RAILS_ENV variable d'environnement. Par exemple, dans le développement :

ruby
Rails.application.credentials.dig(:stripe, :public_key)
# => "test_public_development"

En production, le même code permet de récupérer la clé de production si elle est définie dans le champ config/credentials/production.yml.enc.

Simplifier l'accès avec la notation par points

Pour plus de commodité, Rails prend en charge la notation point pour l'accès aux informations d'identification :

ruby
Rails.application.credentials.stripe.public_key
# => "test_public"

Toutefois, certains développeurs préfèrent utiliser creuser pour les clés imbriquées afin d'éviter les erreurs si une clé est manquante.

Exemple : Utilisation d'informations d'identification dans un contrôleur

Supposons que vous intégriez un service de paiement comme Stripe. Vous pouvez le configurer dans un contrôleur en utilisant des identifiants :

ruby
classe PaymentsController < ApplicationController
    def create
        Stripe.api_key = Rails.application.credentials.stripe[:private_key]
        # Logique de traitement des paiements
    fin
fin

Cela permet de sécuriser votre clé d'API et de l'exclure de la base de code.

Gestion de la clé principale

Sécurisation de la clé principale

Le config/master.key (ou des clés spécifiques à l'environnement comme config/credentials/production.key</code.) est essentielle pour déchiffrer les informations d'identification. Voici les meilleures pratiques pour la gérer :

  • Ne jamais s'engager dans le contrôle de version : Garantir master.key est dans .gitignore.
  • Partager en toute sécurité : Utilisez un gestionnaire de mots de passe ou un canal sécurisé (par exemple, une messagerie cryptée) pour partager la clé avec les membres de l'équipe.
  • Utiliser des variables d'environnement : Il est également possible de régler le paramètre >CLÉ_MAÎTRE_DES_RAILS au lieu d'utiliser la variable d'environnement clé principale. Par exemple :
bash
export RAILS_MASTER_KEY=votre_clé_maître

Rails donne la priorité CLÉ_MAÎTRE_DES_RAILS sur le clé principale fichier. Ceci est utile pour les environnements de déploiement comme Heroku ou AWS.

Rotation de la clé principale

Si vous soupçonnez que le passe-partout a été compromis, faites-en la rotation :

  • Générer une nouvelle clé principale :
bash
identifiants rails:edit

Cela crée un nouveau config/master.key et réencrypte config/credentials.yml.enc.

  • Mettez à jour tous les membres de l'équipe et les environnements de déploiement avec la nouvelle clé.
  • Si vous utilisez des informations d'identification spécifiques à l'environnement, répétez l'opération pour chaque environnement (par ex, rails credentials:edit --environment production).

Rotation de la base_clé_secrète invalidera les sessions et les cookies existants. Il convient donc de planifier soigneusement les rotations afin d'éviter de perturber les utilisateurs.

Meilleures pratiques pour les informations d'identification Rails

1. Garder les secrets hors du code source

Ne jamais coder en dur des données sensibles dans le code de votre application. Par exemple, évitez :

rubis
# Mauvaise pratique
AWS.config(access_key_id : "your_access_key_id")

Au lieu de cela, utilisez :

ruby
AWS.config(access_key_id : Rails.application.credentials.aws[:access_key_id])

Les secrets restent ainsi cryptés et sécurisés.

2. Utiliser des informations d'identification spécifiques à l'environnement

Tirez parti de la prise en charge par Rails des informations d'identification spécifiques à l'environnement pour éviter d'utiliser des clés de développement dans la production. Cela réduit le risque d'utilisation accidentelle de clés sensibles.

3. Filtrer les données sensibles dans les journaux

Les journaux Rails peuvent exposer par inadvertance des données sensibles. Configurer config.filter_parameters dans config/application.rb pour filtrer les paramètres sensibles :

ruby
config.filter_parameters += [:password, :secret, :token]

Les données sensibles sont ainsi marquées comme [FILTRÉLes produits de l'UE sont placés dans des registres, ce qui permet d'éviter l'exposition.

4. Rotation régulière des secrets

Faites pivoter périodiquement votre base_clé_secrète et d'autres informations d'identification afin de minimiser l'impact des fuites potentielles. Utiliser les mécanismes de rotation de Rails pour mettre à jour les cookies avec élégance.

5. Sécuriser la configuration de votre base de données

Garantir config/atabase.yml ne contient pas de données sensibles. Utiliser des identifiants pour les mots de passe des bases de données :

yaml
# config/database.yml
production :
adaptateur : postgresql
base de données : 
nom d'utilisateur : 
mot de passe :

Cela permet de sécuriser les informations d'identification de la base de données.

6. Audit de votre demande

Utilisez des outils tels que Brakeman et bundler-audit pour rechercher les vulnérabilités de sécurité dans votre application Rails. Intégrez-les dans votre pipeline CI/CD pour détecter les problèmes à temps.

Les pièges les plus courants et comment les éviter

1. Validation du passe-partout

Commettre accidentellement config/master.key au contrôle de version est une erreur courante. Il faut toujours revérifier votre .gitignore file:

gitignore
/config/master.key
/config/credentials/*.key

2. Références incohérentes en matière d'environnement

Lorsque vous utilisez des informations d'identification spécifiques à un environnement, veillez à ce que les clés soient cohérentes d'un environnement à l'autre. Par exemple, si vous ajoutez une clé rayure dans le développement, ajoutez-la également aux identifiants de production et de test, même avec des valeurs fictives.

3. Exposer les informations d'identification dans les journaux

Les journaux non filtrés peuvent révéler des secrets. Vérifiez toujours que les config.filter_parameters comprend toutes les touches sensibles.

4. Utilisation de l'ERB dans les justificatifs

Rails ne prend pas en charge Embedded Ruby (ERB) dans les fichiers d'identifiants cryptés, il faut donc éviter d'utiliser <%= %> syntaxe. Utilisez plutôt le langage YAML.

Sujets avancés

Utilisation d'informations d'identification avec des services tiers

Lorsque vous intégrez des services tiers comme AWS, Stripe ou SendGrid, stockez leurs clés d'API dans les informations d'identification. Par exemple :

yaml
sendgrid :
    api_key : your_sendgrid_api_key

Accédez-y dans votre application :

ruby
SendGrid::API.api_key = Rails.application.credentials.sendgrid[:api_key]

Cela permet à votre intégration d'être sécurisée et maintenable.

Cryptage des enregistrements actifs

Pour crypter les champs de la base de données, Rails propose Active Record Encryption (introduit dans Rails 7). En voici un exemple :

ruby
classe Article < ApplicationRecord
    crypte :summary, key : Rails.application.credentials.active_record_encryption[:primary_key]
end

Stocker la clé de chiffrement dans les informations d'identification :

yaml
active_record_encryption :
    primary_key : votre_clé_de_chiffrement
    key_derivation_salt : votre_salt

Cela permet un stockage sécurisé des champs sensibles de la base de données.

Gestion personnalisée des secrets

Pour les applications Ruby non Rails ou les cas d'utilisation avancés, envisagez des gemmes telles que sekrets pour gérer les secrets cryptés. Ceux-ci peuvent être intégrés dans Rails pour des flux de travail personnalisés.

Conclusion

La gestion des informations d'identification et des secrets cryptés dans Ruby on Rails est une compétence essentielle pour créer des applications sécurisées. En tirant parti du système d'identification intégré de Rails, vous pouvez stocker en toute sécurité des données sensibles, les partager avec votre équipe et déployer votre application en toute confiance. De l'édition config/credentials.yml.enc à la sécurisation de la clé principale et à l'utilisation d'informations d'identification spécifiques à l'environnement, ce guide a couvert l'essentiel pour les débutants.

Pour faire passer votre développement Rails au niveau supérieur, envisagez de vous associer à des experts tels que RailsCarma, un spécialiste de la Société de développement Ruby on Rails. RailsCarma offre des services complets, y compris le développement d'applications, la maintenance et l'assistance technique. audits de sécurité, L'équipe de Rails est composée de spécialistes qui vous aideront à créer des applications Rails robustes et sécurisées, adaptées à vos besoins. En suivant les pratiques décrites dans ce guide et en bénéficiant d'une assistance professionnelle en cas de besoin, vous serez bien équipé pour traiter les données sensibles en toute sécurité dans vos applications Rails.

Articles Similaires

À propos de l'auteur du message

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *


fr_FRFrench