2
3

More than 3 years have passed since last update.

Rails5.2以降のCredentialsについてのメモ

Last updated at Posted at 2020-05-31

例えていうならば

  • config/credentials.yml.enc

    プロジェクト内の秘密の情報を保管するための金庫

  • confif/master.key

    その金庫を開けるための鍵

ポイントとなるのはconfig/master.key

 production環境でアプリを利用する場合、production環境で使われる秘密情報(暗号化されているもの)を元データに復元するために利用する鍵が必要(元データに復元することを復号)

この鍵は、Rails5.2以降はconfig/master.keyファイルとして管理されている(自分でrails newした場合)

production環境用の秘密情報の管理

  • Rails5.1までは秘密情報を環境変数でアプリに伝える方法がとられていたが、
  • Rails5.2からはCredentialsという新しい機能になった

Credentialsとはなにか

  • 特定の方式で管理されるproduction環境用の秘密情報そのものその管理の仕組みという2つの意味があります。

  • Credentialsは、秘密情報が構造化して記述され(credentials.yml.enc)、リポジトリで管理されるが、リポジトリに入る内容は暗号化される。

  • 暗号化する暗号化されたものを復元するために鍵(config/master.key)をつかいます。

  • そしてこの鍵はリモートリポジトリの外で管理する(公に後悔しない)。つまりローカルのconfig/master.keyファイルのみで保存される。GitHubなどには保存しない!というか初期設定ではGitHubに保存されないようになっている。

秘密情報の暗号化とその復元

 暗号化された秘密情報(Credentials)は, config/credentials.yml.encに記述される。
このファイルの内容を編集するには、Railsの用意している専用のコマンドをつかう。(下で説明します)

config/credentials.yml.enc(Credentials)の初期状態の確認

 ファイル自体はrails newしたときに作成されていて、
 ファイルの中身を確認すると初期状態の長い暗号文があらわれます。

$ cat config/credentials.yml.enc
=> 0mX2hE/8qS1bsCY1D9e9zIl+qH3UnwZ8JbLN7LqwXXttCAb7KpbiKQRlmcchkbsQHq5CVF0p4OutHW4Z1n0EOK5+eeKc9LYieWkBBt1FvP4dtgeWLUvg987HbNiH1XollAgJ+yH1mhIeQ5DGswGIf3yDAqRxYoJdhijaf7wuVDysWTSypJNdhUiFNde87LzjDVAL7M2fvNYE2Uk8F0awpM2k5r9zJ1HDzDB2ApIam95nDAZjIChBcbgQKQP3eCSqhuomRAt4U1PS52hOSgT+DAhXd+SqRhHoUQkzCmnuVttl7Cq9hxQgAcsKeGnWyrG3eYDoyEtZAArsRczb9wvxunX6xtZubm8uolxz+PishTW4oUxwE4mEdThnUz1AEnVpzm/DH67G+Z5HrdOiUBt1aS9cD4B/gT+RoKkE--WUeSWKvOQJj65J0A--A2Uif217M8ZadNsqs75r5Q==

上のように暗号化されているためセキュリティ上は安心だが、開発者は何を書かれているのか把握できない。
そのため復元された内容を下記コマンドで閲覧することができる

$ bin/rails credentials:show

config/credentials.yml.enc(Credentials)の編集

config/credentials.yml.encの内容の編集

 下記コマンドで編集できる!
 EDITORという環境変数で、エディタを設定しておくと、その環境変数で指定されたエディタで、Credentialsを編集できるようになる。

$ bin/rails credentials:edit

アプリケーションからCredentialsを参照する

  • Railsアプリから秘密情報にアクセスできる。
$ bin/rails credentials:edit
  New credentials encrypted and saved
$ bin/rails c
[1] pry(main)> Rails.application.credentials.aws   
=> {:access_key_id=>123, :secret_access_key=>345}

鍵(config/master.key)の扱いに気をつける

  • このキーを紛失してしまうと、秘密情報を2度と復号できない

  • なくしたらconfig/credentials.yml.encを削除

    • 再度bin/rails credentials:editで新しくつくりなおす。
  • config/master.keyファイルをCredentialsと同じリポジトリに保存しないこと。このため「.gitignore」ファイルには「config/master.key」がはじめから記述されている。

参考

現場で使える Ruby on Rails 5速習実践ガイド

2
3
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
3