2018-10-02 追記
Rails 5.2 以降では encrypted secrets は廃止された模様.代わりに credentials を使うようにとのこと.
https://github.com/rails/rails/blob/v5.2.0/activesupport/CHANGELOG.md
Add
config/credentials.yml.enc
to store production app secrets. Allows saving any authentication credentials for third party services directly in repo encrypted withconfig/master.key
orENV["RAILS_MASTER_KEY"]
. This will eventually replaceRails.application.secrets
and the encrypted secrets introduced in Rails 5.1.
概要
Ruby on Rails 5.1 Release Notes — Ruby on Rails Guides
2.5 Encrypted secrets Rails now allows management of application secrets in a secure way, inspired by the sekrets gem.
config/secrets.yml の暗号化バージョン (config/secrets.yml.enc) を利用できるようになった.中身が暗号化されているため,認証情報のような秘匿したい情報でも遠慮なく git で管理できるようになった.運用では復号のための秘密鍵の管理にだけ気を配ればよい.
初期設定
bundle exec rails secrets:setup
ls -1 config/secrets.*
config/secrets.yml
config/secrets.yml.enc # <- 暗号化された情報
config/secrets.yml.key # <- 秘密鍵
暗号化
config/secrets.yml.enc を編集する場合は下記コマンドを実行する (vim で編集したい場合).
EDITOR=vim bundle exec rails secrets:edit
環境変数 EDITOR で指定したエディタで一時ファイルを編集できる.書き方は config/secrets.yml と変わらない.
# secrets.yml.enc.XXXXX
production:
foo: bar
保存すると config/secrets.yml.enc が更新される.暗号化されているため,秘密鍵がなければ内容はわからない.
cat config/secrets.yml.enc
89VOBxN+FIc0zC/lX0eSPaxo3Simu3cHxBgl4YMl...
復号
以下の条件を満足していれば復号できる.
- config/environments/{environment}.rb で
config.read_encrypted_secrets = true
を指定している - config/secrets.yml.key が存在する,もしくは環境変数 RAILS_MASTER_KEY に秘密鍵が設定されている
復号された値は Rails.application.secrets
として参照できる.
RAILS_ENV=production bundle exec rails c
Running via Spring preloader in process 88666
Loading production environment (Rails 5.1.5)
>> Rails.application.secrets.foo
=> "bar"
秘密鍵の共有方法
要検討.例えば以下のような方法が考えられるか?
- パスワードマネージャで共有 (LastPass など)
- デプロイツールで秘密鍵配布 or 環境変数設定