はじめに結論
Rails5.2ではRails new
をした際にconfig/secrets.yml
が生成されなくなりました。
代わりにconfig/credentials.yml.enc
が生成されます。
今回は、credentials.yml.enc
及びmaster.key
の使い方についてまとめていきます。
結論、Rails5.2では秘匿情報の取得は、Rails.application.secrets.xxxx
ではなく、 Rails.application.credentials.xxxx
で可能になります。
編集方法
まず、credentials.yml.encを編集するためにはrails credentials:editコマンド
を実行します。
ただ、EDITORが~/.bash_profileなどで未指定の場合は、
$ EDITOR=vim bin/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: 94cd28a0bbe83b737292da7928f2f5fca17937922b0a79a64c22cc4999d87d3426808ad3ea655e7a68652d6e3e3c1021339ceb87ee615322351640bed63ce8bd
TwitterAPIの情報を記述してみる
twitter
api_key: abcd1234...
api_secret: efgd5678...
※secrets.ymlのようにシングルクォーテーションで囲む必要は無いです。
コンソールで値を取得してみる
$ rails c
irb(main):001:0> Rails.application.credentials.twitter[:api_key]
=> abcd1234...
irb(main):002:0> Rails.application.credentials.twitter[:api_secret]
=> efgd5678...
irb(main):003:0> Rails.application.credentials.secret_key_base
=> "94cd28a0bbe83b737292da7928f2f5..."
capistranoで反映させたい
shared/config/master.yml
にmaster.ymlをコピーする必要があるようです。
参考:http://waiyanyoon.com/deploying-rails-5-2-applications-with-encrypted-credentials-using-capistrano/
scpコマンドを使ってEC2に転送しましょう。
参考:https://qiita.com/Yorinton/items/df24281fcf07729fa0f9
$ scp -i path/to/pem path/to/local_file EC2ユーザ名@IPアドレス:EC2インスタンスの任意のパス
今回はEC2インスタンス
内のshared/config/
配下にローカル
のmaster.yml
をコピーしたかったので、下記の用に記述しました。
$ scp -i .ssh/example.pem AppName/config/master.yml ec2-user@xx.xxx.xxx.xx:/var/www/AppName/shared/config/
こちらの設定を行うことでコマンドの記述をさらに短縮できるようです。
デプロイ前の準備
先に本番のshared/config/配下にコピーできた後に下記のコマンドを実行。
linked_filesは配列になっているので、そこにmaster.keyを追加します。
set :linked_files, fetch(:linked_files, []).push("config/master.key")
[本番環境]master keyの存在を確認する設定
本番環境ではmaster key
の指定漏れを防ぐためにconfig/environments/production.rb
でconfig.require_master_key = true
を有効化することが推奨されてるようです。
config.require_master_key = true
参考記事
Rails5.2から追加された credentials.yml.enc のキホン