【Rails】credentials.yml でシークレットキーを登録し、呼び出す方法

アプリ内でAPIキーやシークレットキーなどの秘密情報を設定する場合、他人に見られないよう厳重に管理する必要があります。

これらの秘密情報はサーバーの環境変数にセットして Railsで読み込んだり、dotenvのようなGemで管理したりする方法がありますが、

今回は、Rails5.2 から追加されたcredentials.yml.encでこれらの秘密情報を登録、および呼び出す方法についてまとめました。

(credentials.ymlの仕組みについての説明は省きます)

目次

開発環境

  • Ruby 3.1.2
  • Ruby on Rails 7.0.4
  • Bootstrap 5.2.3
  • M1 Macbook Air 2020
  • mac OS Monterey (ver. 12.4)

credentials.ymlの編集(シークレットキーの登録)

Railsアプリ内のシークレットキーはconfig/credentials.yml.encという名のファイルで管理しますが、エディターで直接開こうとしても暗号化されているため読めません。

そこで、ターミナルに以下のコマンドを入力してvimで編集します。(cd でアプリフォルダに移動した状態で実行)

$ EDITOR='vim' rails credentials:edit

開くと以下のように表示されます。

# 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: **********************************

初期状態で表示されているサンプルを参考にしてパスワードやシークレットキーを入力します。

vim で編集するにはまず、iを入力して表示モードから入力モードに切り替えます。

入力モードに切り替えたら、以下を参考にシークレットキーやパスワードを入力します(半角英数字のみ)。

aws:
  access_key_id: *****************
  secret_access_key: **********************************

db:
  password: ************
  hostname: *************

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

入力し終えたらescを押して入力モードを解除し、:wqで保存して終了します。

保存せずに終了する場合は:q!を入力します。

シークレットキーを呼び出す

config/credentials.ymlに登録したシークレットキーをコード上で呼び出すには、以下のように記述します。

Rails.application.credentials...

例えば、config/database.ymlにてdbpasswordを呼び出したい場合、呼び出す箇所に以下のように記述します。

production:
  adapter: mysql2
  encoding: utf8mb4
  database: ⚪︎⚪︎⚪︎_production
  username: root
  password: <%= Rails.application.credentials[:db][:password] %>
  host: <%= Rails.application.credentials[:db][:hostname] %>

また、以下のように記述することも可能です。

Rails.application.credentials.dig(:db, :password)

Rails.application.credentials.db[:password]

実際に呼び出せているかどうか、コンソール上で確認するといいでしょう。

irb(main):001:0> Rails.application.credentials.dig(:db, :password)
=> "***********"

登録したパスワードがちゃんと呼び出せていればOKです。

参考資料

目指せ、スーパーエンジニア
目指せ、スーパーエンジニア 【Rails】世界で一番わかりやすい!!「credentials.yml.enc」+「master.key」使い方をまとめました!
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

愛知の34歳。院卒で大手企業→仕事が嫌になり3年で退職→28歳でNZワーホリ→帰国後は5年くらいフリーター(主に季節労働)やるも、飽きて33歳で無職になる。暇になり何となく始めたプログラミング(Ruby on Rails)にハマり、、現在はテック系のブログ書いたり、Railsで自作したブログ「山が好き旅が好き」の運営したりしてます。さて、次は何をしようか。

コメント

コメントする

目次