Help us understand the problem. What is going on with this article?

Rails5.2から導入されたcredentials.yml.encを極める

More than 1 year has passed since last update.

はじめに結論

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

と記述してください。

コマンドを実行すると下記のような初期設定が表示されます。

config/master.key
# 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の情報を記述してみる

config/master.key
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.rbconfig.require_master_key = trueを有効化することが推奨されてるようです。

config/environments/production.rb
config.require_master_key = true

参考記事

Rails5.2から追加された credentials.yml.enc のキホン

https://qiita.com/scivola/items/cc06ddbfd94d3118f693

SCPでAWS EC2インスタンスとファイルを送受信する

yuuuking
timee
日本の労働力の減少を若者の働き方改革で解決します。好きな時に好きなだけ働けるプラットフォームタイミーを作り、人々が好きなことをできる世界を実現します。
https://timee.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした