例えていうならば
-
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」がはじめから記述されている。