概要
blog.naoshihoshi.com こちらの機能を開発しているときに、Rails5.2からcredential管理が変更されたことに気づいたので、 今回はRails5.2のcredential管理の方法をざっくり説明しようと思います。
Rails5.2のcredential管理の方法のざっくりとした説明
Ruby on Rails 5.2 リリースノート - Railsガイド
config/credentials.yml.encファイルが追加され、productionアプリの秘密情報(secret)をここに保存できるようになりました。これによって、外部サービスのあらゆる認証credentialを、config/master.keyファイルまたはRAILS_MASTER_KEY環境変数にあるキーで暗号化した形で直接リポジトリに保存できます。Rails.application.secretsやRails 5.1で導入された暗号化済み秘密情報は、最終的にこれによって置き換えられます。 さらに、Rails 5.2ではcredentialを支えるAPIが用意され、その他の暗号化済み設定/キー/ファイルも簡単に扱えます。 詳しくは、Rails セキュリティガイドを参照してください。
リリースノートのcredential管理の方法を引用しました。
ざっくり言うと、
config/master.key
に記述したキー情報でcredential情報を暗号化- 暗号化した情報は
config/credentials.yml.enc
に書き込む - credential情報は普通に人間が読める感じで書ける
- Railsアプリは
Rails.application.credentials.dig(:aws, :access_key_id)
って感じで簡単に呼べる
って感じです!
使い方の説明
とはいえ、実際使ってみないとよくわからないので、試してみましょう。
$ cd rails_root $ cat config/master.key nirejgaks945n3ge9223gsgs $ cat config/credentials.yml.enc omtTwkcvAjuPb8CGkx8h2R9EzqMEsEND3cD7he7z7Pd3KKrAas3jrRGGnhDfdYQr
これが初期状態です。 では、続いて、credential情報を登録してみましょう。 登録はrailsコマンドで実行します。
初期状態はsecret_key_baseだけが登録されているのですが、AWSの認証情報を追加してみます。 下記コマンドを実行すると、エディタが開きます。
$ EDITOR=vim bin/rails credentials:edit
# Used as the base secret for all MessageVerifiers in Rails, including the one protecting cookies. secret_key_base: kgJ3dPHLkTUwNTG3pM9kgJ3dPHLkTUwNTG3pM9k6M8RR4LrRJx7UeKYiebrcqCrh6LNX9GyYXACnqfcFb8Xk6M8RR4LrRJx7UeKYiebrcqCrh6LNX9GyYXACnqfcFb8X aws: access_key_id: AKIAJ9LIRFARVBVIAPOK secret_access_key: wNTG3pLkRR4L7YXM8UTUX9GeKYiyebrcFb8Xd
そして、再びconfig/credentials.yml.enc
を確認すると、情報が追加されている == 値が変更されていることがわかるはずです。
$ cd rails_root $ cat config/credentials.yml.enc omtTwkcvAjuPb8CGkx8h2R9EzqMEsEND3cD7he7z7Pd3KKrAas3jrRGGnhDfdYQrwkcvAjuPb8CGkx8hkcvAjuPb8CGGnhDfdYQrwkcvAjuPb82R9EzqMEsEND3MEsEND3c9EzqMEsEND
最後に、Railsから呼び出すことができるか確認します。
$ cd rails_root $ bin/rails c irb(main):001:0> Rails.application.credentials.dig(:aws, :access_key_id) => "AKIAJBVIIRA9LRVFAPOK"
ばっちりですね!
まとめ
これまでは、.envファイルなどで環境変数を設定したりしていたので、管理が煩雑になっていました。 Rails5.2からは今回紹介したcredential管理の方法を使えば管理が楽になると思います。 今回紹介した通り、使い方もシンプルであるため、おすすめです。