credentials.yml.encによるアクセスキーの管理方法

f:id:ryoutaku_jo:20190512015759p:plain

【結論】

・Rails5.2以降から、secrets.ymlは廃止され、代わりにcredentials.yml.encが導入された

・credentials.yml.encは暗号化されている為、master.keyで復号化しないと編集は出来ない

・master.keyはデフォルトでgitignoneに登録されている

【目次】

【本題】

アクセスキー暗号化の必要性

AWSなどのアクセスキーを、そのままGitHubに上げてしまうと、過剰請求の被害にある可能性があります。 その為、そういったセキュリティ情報は、暗号化させる必要があります。

Rails5.2より前は、secrets.ymlを用いて暗号化を行う仕組みが備わっていました。 しかしRails5.2以降は、secrets.ymlが廃止され、代わりにcredentials.yml.encが導入されています。

今回は、そのcredentials.yml.encを用いたアクセスキーの管理方法について解説します。

概要

rails new」した時点で、「config」ディレクトリには、credentials.yml.encmaster.keyという二種類のファイルが生成されます。

credentials.yml.encが、アクセスキーなどの情報を暗号化して保持しているファイルです。 そして、master.keyが、credentials.yml.encを復号化させる為の鍵になります。

credentials.yml.encの編集

まず、アクセスキーを情報をcredentials.yml.encに入力する必要がありますが、このファイルは暗号化されているので、開いても数字の羅列が表示されるだけで、直接編集を行う事が出来ません。

編集を行うには、ターミナルから下記コマンドを実行します。

$ EDITOR=vim bin/rails credentials:edit

環境変数でエディタを指定している場合は、$ EDITOR=vimの部分は省略可能です。 上記を実行すると、下記の様な初期の記述内容が表示されます。

# aws:
#   access_key_id: 123
#   secret_access_key: 345

# Used as the base secret for all MessageVerifiers in Rails, including the one protecting cookies.
secret_key_base: ****************************************

こちらを適宜修正して保存します。保存と同時に暗号化が行われ、ファイルが更新されます。

aws:
  access_key_id: super_tekitou
  secret_access_key: koremo_tekitou

# Used as the base secret for all MessageVerifiers in Rails, including the one protecting cookies.
secret_key_base: ****************************************

情報の取り出し方

ここに記述した情報はRails.application.credentials.xxxというコードで呼び出せます。

$ rails c

irb(main):001:0> Rails.application.credentials.aws[:access_key_id]
=> "super_tekitou"

irb(main):002:0> Rails.application.credentials.aws[:secret_access_key]
=> "koremo_tekitou"

例えば、shrineの設定ファイルでAWSのアクセスキーを呼び出したいのであれば、下記の様に記述します。

(省略)
if Rails.env.production?
  s3_options = {
      access_key_id: Rails.application.credentials.dig(:aws, :access_key_id),
      secret_access_key: Rails.application.credentials.dig(:aws, :secret_access_key),
(省略)

これで、安全にアクセスキーを取り扱う事が出来ます。

参考情報

Rails セキュリティガイド - Rails ガイド

《今日の学習進捗(3年以内に10000時間に向けて)》

今日は興が乗らん!!(全く開発に身が入らず・・・) マッタリする日にしました。

学習開始からの期間 :155日
今日までの合計時間:1511h
一日あたりの平均学習時間:9.8h
今日までに到達すべき目標時間:1416h
目標との解離:95h
「10,000時間」まで、

残り・・・「8489時間!」