「credentials.yml」と「master.key」はRails5.2から追加された秘密情報を管理する仕組みです。
環境変数を使用せずにRails単体で秘密情報を管理できるため、ローカルの環境に依存しない大変便利な機能。
秘密情報の管理
開発をしていく中で、共有ツールを使用するのは当たり前、誰もがアクセスできて、プルリクなどをもらったり、自分にコードを見てもらうことが当たり前なオープンソース時代。
●そこで問題が発生
・自分の個人情報をさらけ出していると外部から攻撃され、個人情報が盗まれる可能性がある。
秘密情報とは
・例えば、AWSのアカウントだったり、データベースのパスワードなどです。
・他にも決済機能を入れている場合だったらstrpeやpaypalの秘密鍵や公開鍵がそれに値するでしょう。
・これらをGithubなどのバージョン管理システムでPublic(公共的)にみられないようにしないと大変なことになります。
Rails5.2でcredentials.ymlが誕生
●作成手順と流れ
①クマさんがcredentials.ymlを作成
②Githubにプッシュ
③クマくんがサメさんにmastre.keyを共有する。
※AWS秘密鍵、AWS公開鍵
④サメさんがGitthubからプルしてcredentials.ymlを同期
※秘密鍵が追加・変更・削除があった場合に、いちいちローカルの環境を更新せずGithubなどのバージョン管理システムからコードを同期するだけで追加・変更・削除が可能になったため、コストが激減した。
credentials.ymlの仕組み
入力された秘密情報の文字列をmaster.keyの文字列で暗号化し、credentials.ymlという鍵を作成します。
credentials.yml.encとは?
●公開鍵と呼ばれるものです。
イメージとして、credentials.yml.encは家の施錠前です。
master.keyがないと情報を開示できないため、Githubなどへの公開が可能です。
master.keyとは?
秘密鍵と呼ばれるものです。
rails newコマンドでRailsアプリを作成した人がmaster.keyを持っています。
イメージとして、master.keyはシンプルに家の鍵のものと考えてください。
家の鍵を道端におこないように、Githubなどへの公開してはいけません。
チームメンバーと共有したい場合は、 LineやSlackメールなどでチームメンバーだけに共有する。
credentials.ymlの編集
●credentials.yml.encの文字列を直接変更せず、コマンドを使用してテキストエディタで開きます。
●ymlファイルのため、インデントに注意
・コマンドを使用してテキストエディタを開いてから編集するのは、credentials.yml.encは暗号化された文字列であるため、変更されてしまうと鍵そのものが変わってしまうためです。あくまでも変更したいのは、鍵を施錠した中身であるため、注意しましょう。
下記コマンド実行
# VScodeで開く場合
$ EDITOR='code --wait' rails credentials:edit
# Vimで開く場合
$ EDITOR='vim' rails credentials:edit
表示文字列
# 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: 8be4sevDaga6...............
上記構文を下記のように変更
aws:
access_key_id: xxxxxxxxxxxxxxx
secret_access_key: yyyyyyyyyyyyyyyyyy
# Used as the base secret for all MessageVerifiers in Rails, including the one protecting cookies.
secret_key_base: 8be8e637d755f79c799048bed8be0c...
※今回は適当にawsの公開鍵を秘密鍵を変更します。
変更後保存したファイルを閉じてください。以下のように表示されたら暗号化はできています。
New credentials encrypted and saved.
以上。
下記参考サイト参照
https://hirocorpblog.com/rails-credentials-master/