2
1

More than 3 years have passed since last update.

Rails 5.2~ credentials.yml.enc/master.key の扱いについて(備忘録)

Posted at

credentials.yml.enc / master.keyとは何か

Rails 5.2 ~ からはsecret.ymlが廃止され、credentials.yml.enc / master.keyが導入されました。credentials.ymlはmaster.keyによって暗号化、復号化されます。secret.ymlは暗号化されておりませんでしたので、セキュリティ的にはより強固なものとなったようです。

特徴

  • Rails 5.2 ~
  • credentials.yml.encはmaster.keyとペアであり、master.keyによって暗号化されている。
  • credentials.yml.enc, master.key共にデフォルトでgitignoreに追加されている。

編集及び取得方法

編集方法

$ cd [アプリケーションのディレクトリ]
$ sudo EDITOR=vim bin/rails credentials:edit

初めてこのコマンドを叩くとcredentials.yml.encとmaster.keyのペアが自動生成されます。
編集コマンドを叩いて次のような画面が出てきたらOK

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

ここにAWSやその他のサービスを使う際に必要となるaccess_key_id, secret_access_keyの情報を入力する。

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

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

取得方法

credentials.yml.encに書き込んだ情報はmaster.keyによって復号化され取得されます。その際の取り出し方について。

Rails.application.credentials.***

例 AWSの場合

Rails.application.credentials.aws[:access_key_id]  # アクセスキーID
Rails.application.credentials.aws[:secret_access_key] # シークレットアクセスキー

実際に取得できるか試してみる

credentials.yml.encに入力した情報の取得が成功しているかを判定する際に非常に便利なコマンドがあります。

$ rails c
$ [1] pry(main) > Rails.application.credentials.aws
$ => { :access_key_id=>"123", :secret_access_key=>"456" }

このように表示されていればOK!

チーム開発におけるcredentials.yml.encとmaster.keyの扱いについて

チーム開発においては、master.keyを信頼できる開発メンバーにファイル共有ソフト等を用いて共有します。credentials.yml.encは本番環境にデプロイしてもmaster.keyによって暗号化されているため問題ありません。
本番環境ではmaster.keyを絶対にアップロードしないで下さい。

本番環境でのmaster.keyの値を取得方法

本番環境にはmaster.keyは当然アップロードすることは出来ません。代わりに環境変数に設定してcredentials.yml.encを復号化します。

$ cd ~   #本番環境
$ sudo vim /etc/environment  #環境変数の設定

環境変数は必ず、RAILS_MASTER_KEYとして設定して下さい。
また、デフォルトでcredentials.yml.encはgitignoreに追加されてしまっているので、この記述をコメントアウトします。

 .gitignore
 # config/credentials.yml.enc
 config/master.key   #マスターキーは絶対にgit addしない。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1