アプリ内で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
にてdb
のpassword
を呼び出したい場合、呼び出す箇所に以下のように記述します。
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です。
コメント