【結論】
・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.enc
とmaster.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), (省略)
これで、安全にアクセスキーを取り扱う事が出来ます。
参考情報
《今日の学習進捗(3年以内に10000時間に向けて)》
今日は興が乗らん!!(全く開発に身が入らず・・・) マッタリする日にしました。
学習開始からの期間 :155日
今日までの合計時間:1511h
一日あたりの平均学習時間:9.8h
今日までに到達すべき目標時間:1416h
目標との解離:95h
「10,000時間」まで、
残り・・・「8489時間!」