Rails6で秘密情報を管理する

1 min read読了の目安(約1200字

Rails6で秘密情報を管理したいときは bin/rails credentials を使います。

# bin/rails credentials:show
# aws:
#   access_key_id: 123
#   secret_access_key: 345

試しにAWSの access_key_id12345secret_acccess_keyを'6789'に設定して、Railsコンソールで取り出してみます。

rails credentials:editで秘密情報を編集できます。

/app# bin/rails credentials:edit

実態は暗号化されたファイル credentials.yml.encです。
config/credentials.yml.encconfig/master.keyで復号し、ファイルを編集し、編集が終わったらまた暗号化して保存しています。

rails credentials:editで表示される(復号化された)ファイルを以下のように編集して保存します。

aws: 
  access_key_id: 12345 
  secret_access_key: 6789 

保存した情報は暗号化されていて、master.keyがないと復号できません。
なので、config/credentials.yml.encはGitリポジトリにコミットできます。

保存した情報は Rails.application.credentials.xxxで取り出すことができます。

/app# bin/rails c

[3] pry(main)> Rails.application.credentials.aws[:access_key_id]
=> 12345
[6] pry(main)> Rails.application.credentials.aws[:secret_access_key]
=> 6789

stating環境用の設定を用意したい場合は--environment stagingを指定します。

/app# bin/rails credentials:edit --environment staging

ここで編集したファイルはconfig/credentials/staging.yml.encに保存されます。

development用のファイルを作りたい場合はbin/rails credentials:edit --environment developmentですね。

開発中にサーバを動かしてみて、credentialsファイルを編集したはずなのにnilで返ってきてしまう!という人は、ちゃんと--environment developmentのファイルを編集したかどうかを確認してみてください。