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