【Rails】credentials.ymlでシークレットキーなどを管理する


はじめに

Rails 5系から登場したcredentialsについて備忘録的にまとめておきます。

credentialsって?

秘密鍵などを置いておくファイルです。

このファイルの中身はmaster.keyによって暗号化されているため、正しいmaster.keyを知らない人は中身を見ることができません。

credentialsの中身は、master.keyの情報があれば他のファイルの中で変数として呼び出せるため、このファイルの中にAPIキーなどを入れておくと便利だったりします。

master.keyとcredentialsファイルはrails newしたときに自動で作られ、master.keyはデフォルトで.gitignoreに入っているので、githubから流出する心配もありません。

事前準備

今回はVScodeを使うことを前提としています。

まずはVScodeでcommand + shift + Pでパレットを開いてください。
次に検索ボックスにshellと入力してshellをインストールしてください。

これでターミナルからcredentialsファイルの編集をVScodeでできるようになります。

設定の仕方

以下のコマンドでcredentialsファイルをVScodeで開きます。

ターミナル
$ EDITOR='code --wait' rails credentials:edit

デフォルトで最初の3行に例がコメントアウトで書いてあるので、それを真似すればOKです。

xxxxx.credentials.yml
aws:
  access_key_id: 123
  secret_access_key: 345q

1行目はどんなグループなのか、2, 3行目はidやアクセスキーなどを書いてます。
グループの中身はインデントすることが必要です。

一つだけではなく複数設定できるので試しに設定してみます。

xxxxx.credentials.yml
aws:
  access_key_id: 123
  secret_access_key: 345q

gmail:
  email: '[email protected]'
  password: 'sample1234'

保存

credentialsファイルを保存するにはVScodeのタブを閉じる必要があります。
閉じて正しく保存されるとターミナルで以下のようにメッセージが表示されます。
New credentials encrypted and saved.

呼び出し方

中身を呼び出すためには、rubyファイル内で以下のように書けばOKです。

Rails.application.credentials[:グループ名][:中身]

今回の例では以下のように使えます。

Rails.application.credentials[:aws][:access_key_id]
Rails.application.credentials[:gmail][:email]

ターミナルからコンソールで確認できるので、credentialsファイルを編集したときは確認すると良いです。rails cでコンソールを開いて確かめてみます。

ちゃんと呼び出せていますね。

注意

チーム開発するときなどはmaster.keyを共有することで他の人もcredentialsの中身を見れたり編集したりできます。master.keyはメッセージアプリなんかで共有すると良いかと思います。

しかし、信頼している仲間であっても個人で持ってるawsのidとアクセスキーなんかはcredentialsでも共有すべきではないです。(クレジットカードの番号と認証コードを共有しているのと同じだと思ってください。)

共有すべき情報とそうではない情報は慎重に判断しましょう。
万が一裏切られてカイジのような展開になって後悔することのないように!笑