Railsアプリでは例えば認証をする場合等に秘密情報を扱う必要があります。秘密情報の管理方法は非常にデリケートで注意する必要があります。
秘密情報管理の基本原則
- 開発者間では共有して秘密情報の確認変更を行いたい。
- 第三者に秘密情報が漏洩されることは避けたい。
Rails5.1まで
秘密情報を環境変数でアプリケーションに伝えていた。
Rails5.2以降
Credentialsという機能が実装されましたので基本的にはこの機能を使います。
Credentialsとは?
production環境用の秘密情報のことです。秘密情報そのものを指したり管理する仕組みを指したりします。
Credentialsでの秘密情報の管理の仕組み
秘密情報を構造化し記述してリポジトリで管理を行います。リポジトリに入る情報は一つのキーで暗号化をし、キー自体はリポジトリ外で管理をしておきアプリに伝えます。これにより多くの秘密情報を一括で簡単に管理できるようになります。
config/master.key(もしくはRAILS_MASTER_KEY環境変数)
唯一リポジトリ外で管理をするキー情報となります。もし紛失してしまったら2度とCredentialsを復号することができなくなってしまいますので取り扱いには十分注意するようにしましょう。
なお、Railsアプリ作成時のGitではデフォルトで.gitignoreファイルに「/config/master.key」が記述済みになっています。
config/credentials.yml
production環境用の秘密情報(Credentials)になりこのファイル自体は常に暗号化された状態になります。
このままでは何が書いてあるか暗号化されていてわからないので、下記のコマンドを実行すれば何が書いてあるか判断できます。
1 |
rails credentials:show |
secret_access_key
暗号化cookieや署名付きcookieの整合性確認に使用される秘密鍵になります。もし外部にこのキーが漏れてしまった場合は「rails secret」で再生成するべきです。
Credentialsを編集したい場合は下記コマンドを実行します。
1 |
rails credentials:edit |
アプリからCredentialsを参照するには下記のメソッドを実行します。
1 |
Rails.application.credentials.aws |
もし、Credentialsのマスターキーを紛失してしまったら?
もし、本当にマスターキーを紛失してしまった場合は古い「credentials.yml.enc」を削除して「credentials:edit」コマンドで作成し直しましょう。
この記事へのコメントはありません。