【Rails】独自のcredential(gemのdotenvは要らない)

【Rails】独自のcredential(gemのdotenvは要らない)

こんにちは、Mako(@makokamiya)です。

以前作らせていただいたRailsアプリでAPIを使った時に、APIキーやアクセストークンなどの資格情報を持たせるために、gemのdotenv-railsを使っていましたが、

なんと、Railsには独自の資格情報を管理する、credentialファイルというものが存在していたのです。ค(º ロ º ค)わぁーおッ!!

まだまだ知らないことだらけ、奥が深いなーと思いました。(( ˘ω ˘ *))フムフム

そこで今回は、credential(資格情報)について、Rails独自のcredentialファイルの使い方について、調べたことをまとめていきます。

credential(資格情報)とは

用語の意味

credential(読み方:クレデンシャル)を辞書で調べると、“信任状”、”資格証明書”、”認証情報”、といった意味があるようです。形容詞だと“信用証明となる”と言う意味。

web開発などでは、データベース接続設定の情報や、APIキーなどがそれに当たります。

Railsのcredentialファイル

Railsでは、config/credentials.yml.enc というファイルに様々なcredential(資格情報)を保管することができます。

このファイルは暗号化されており、直接みたり編集することはできないため、「EncryptedCredentials(暗号化された資格情報)」とも言うみたいです。


このフォルダには、デフォルトで secret_key_base が保管されていますが、これはCookieの改ざんを防止するために必要なようです。

このconfig/credentials.yml.enc に、APIキーなどを含めることができます。

Railsのcredentialファイルの使い方

credentialファイルを開く

config/credentials.yml.enc は暗号化されているので、直接編集できません。

以下のコマンドで復号して編集します。

EDITOR=vim bin/rails credentials:edit

credentialの追加

上記のコマンドを叩くと以下のように表示されます。

# aws:
#   access_key_id: 123
#   secret_access_key: 345

# Used as the base secret for all MessageVerifiers in Rails, including the one protecting cookies.
secret_key_base: 48ha74j3sh...

コメントアウトでaws設定情報が例として挙げられているので、同じように記入して :wq で保存終了します。

値の取り出し

追記した値を取り出して使うには、以下のように書きます。

Rails.application.credentials.aws[:access_key_id]
#=> 123
Rails.application.credentials.aws[:secret_access_key]
#=> 345

これらを、 config/database.yml や、たぶん application.rb でも使えるんだと思います。(まだ使ってないから言い切れない。)

参考

Rails セキュリティガイド 利用環境のセキュリティ

secret_key_baseとは

What is the use of secret_key_base in rails 4

まとめ

当たり前だけど、まだまだ知らないことだらけだなと。一度、Railsガイドを相対的に学習してみたいなーと思いました!

RailsガイドってRailsの公式の日本語版なのかな?

私は基本的に、公式ドキュメンを読むの好きです。Qiitaとかの記事も読むけど、一応公式もみておく、みたいな。

ところで、ブログの更新は最低3日に1記事を目標にすることにしました!

更新してなかったら叱ってくださいw