Rails

Encrypted secrets の運用メモ

More than 1 year has passed since last update.

Encrypted secrets は Rails 5.1 から使える環境変数の管理機能
/etc/environment による管理から Encrypted secrets に乗り換えたときのメモ

セットアップ

以下のコマンドを実行

$ rails secrets:setup

暗号化された secrets.yml.enc が作成される

config/secrets.yml.enc
X6a8TC38q6m4Qz6WA1ntCExn1DrlNqNriP1KwtrpKIWp28rhwFFCNdFufHJFBeIztEE5io1P5vQK8puoBWPvUT9xZW8U+cS5YWMkiaOyJ4nJngQ4JgCLpBRoI7jQSFQNfG6VuU5h2wJ567MeWzpBQrOdxzKJKCADi6QZ+QG7FkKrsmBLW3J9dJu6uUP4K29Onwus05QrXlKmnI9pJ587jiSYxkzGU1nHUsVircl7sHX8XHCjrU6eJAWV363T9mhrQLQb5n8IP0lo2IFxHkI4CplK0eWp6IiHI5HIebQMtJzW4wTClGcWKQ8vsT23mkXfwV0toAdfYIQHlX8XhN1/hYrPmynsd75tBdEh3giX9pqUJqiru5H3BWN9zxUGtNTSK7fx75bYFf134XQ2SvNYCjJv5u2orFlCsMJmwG56zhgMx/h0mxCOaAZLWQhflwZawd+qhKtCOxGR/Von3ZNsSThPZcYrTTdkdNbC9A2FCqUywoSmRIjctfwupXsrztgPyKcezcPZZ2zdV1yK2h3l1nVA3SFAFpMpDSsjS69BsD+ZWr55Dh4YiR0D16Y+YTSOCR7LHVy6pi30Suv2dj4RB32GuIaUejpma5lbIZfYAtt67CDW/frPkwB+94eVvUuH4HbvafnMijw6Nl4dAZx8KRfXolBflNuJZ0Aa0QIQzFH74gvL3X2EGaSS98W2+4L9hizKeRIZl7U2hF8TsNM+Q1ioSyCif2RyO45Z+wiP9gy4PbuNXM5i8Oy8TokYkuj3lCjunCOB1aJ98Iaa5bjtTOTfcA4nTPfPRlaux2NmnXcYEhAxP2F6dLpQZ6cig06Hs5DhbjGYyTNTiF902CcIOtF9xU9iCNZ6/t8ph2ZW1kxif82qTrKu+XTFmEE66jmT4l9eu7DC1jiiN14oosA0NQBMoadVVdtMjwgyFnWwgTKEvBuCm/RljRYdzDKki9vn4IoutV4Bt9ZX36Xtq/F3vzjwsASkQJCkb38DpR3mTyMa+3FwLER7eCjFZQdAS4nXnm7eoYWlwWtFcxNBt5AdOjENvEvz1j8Yz7E2dNd8czOfeL/99Vv6VcsWfJ+HC08fLONKrg2FaRhea41p5sQqmkX+7gB6VAQFxD27EKX0tBe7csNxZDqIPFIZjkij2kA8xc+0+RwhZzngGXhmunEUxz59pTcbi4/o2mVNxQs=--tgJzuYFhEhnaMxuK--CGcncM4zJKfjTJy+vDtkIw==

config/secrets.yml.key には復号に必要なキーが保存される

config/secrets.yml.key
0123456789abcdef0123456789abcdef

.gitignore に以下が追加される

.gitignore
# Ignore encrypted secrets file.
config/secrets.yml.key

secretsの編集とRailsからの利用

以下のコマンドで暗号化された secrets を直接編集できる

$ rails secrets:edit

Rails からは以下のように値を参照できる

> Rails.application.secrets.secret_key_base

開発環境では素のsecrets.ymlを使う

暗号化されたsecretsは、当然ながら復号しないとどんな環境変数が定義されているか確認できない。開発環境ではすぐに定義を確認できるように、素のsecrets.ymlも同時に定義している。

config/secrets.yml
development:
  secret_key_base: <your_secret_key_base>

test:
  secret_key_base: <your_secret_key_base>

production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

バージョン管理されないように注意する。

.gitignore
config/secrets.yml

コマンド実行時にキーを聞かれないようにする

環境変数RAILS_MASTER_KEYを設定しておくとコマンド実行時にキーを聞かれずに済む

.env
RAILS_MASTER_KEY: 0123456789abcdef0123456789abcdef

capistranoで復号キーをデプロイする

復号キーをデプロイするために以下のタスクを定義する

lib/capistrano/tasks/secrets.rake
namespace :deploy do
  task :secrets do
    on roles([:web, :app]) do
      execute "/bin/mkdir -p #{shared_path}/config/"
      upload! 'config/secrets.yml.key', "#{shared_path}/config/secrets.yml.key"
    end
  end
end

復号キーをデプロイ

$ cap production deploy:secrets