【ruby on rails チーム開発】Credential.ymlの設定
rails5.2系からrailssの秘密情報の管理がsecret.ymlからcredential.ymlになりました。
今回スクールでのチーム開発でrails5.2.3で開発していますので、credential.ymlについての設定を記載します。
・AWSの無料枠
・EC2の解放(AWSの登録は省略します)
・Linuxサーバの設定
・webサーバNginx設定
------------
・【自動デプロイ】capistrano設定
・IAMユーザの登録
・S3(ストレージ)の設定
■rails5.2から適応となったcredentialについて
・production環境用に他の人に知られたくない秘密情報を環境変数として設定して扱う(APIキー・DBパスワードなど)
https://github.com/rails/rails/pull/30067
・rails newするとconfig/credentials.yml.encとconfig/master.keyが生成される
・credential.ymlの内容は暗号化され、master.key(デフォルトでgit ignoreに記載されているためgit hubにはプッシュされない)で復号化して利用する
----------------------
----------------------
秘密情報を環境変数として定義するファイル
中身は暗号化されており、内容を編集する際はEDITER指定で「$ EDITOR="vi" bin/rails credentials:edit」で編集
master.keyを使用して復号化してrailsアプリで使用できるようにする
・credential.ymlの記載内容
APIキー・DBパスワードなど
(AWSキーについては記載しなほうが良い・チーム開発においてはcredential.ymlの内容はチーム全体で管理する内容のため、個人情報が他メンバーに知られてしまう
⇨production環境の/etc/emvironmentに記載)
・編集方法
$ EDITOR="vi" bin/rails credentials:edit
※変数を追加する場合は上のawsのような例と同じ書き方(段落など)出ないと、変にタブなどが入るとエラーが出ます。
・使用方法
例えば上記変数をrailsアプリケーション内で環境変数を使用する方法は(rals c)
>Rails.application.credentials.aws[:access_key_id] //=> 123
>Rails.application.credentials.aws[:secret_access_key] //=> 345
>Rails.application.credentials.aws //=>{:access_key_id=>123,:secret_access_key=>345}
>Rails.application.credentials.secret_key_base //=> 6f**********************
(credential.ymlのコメントアウトは外してます・secret_key_baseの記述をawsの記述に揃えています)
本番環境で起動された際にcredential.ymlを復号化して使用
・credential.ymlの復号化に使うため、内容をEC2の/etc/environmentに環境変数として設定しておく(gitignoreしているので本番環境では環境変数で読み取るため)
【例】RAILS_MASTER_KEY='**********'
・rails newした人のマスターキーしか使えないため、キー内容はチームで共有しておく
・git cloneした場合はマスターキーがない状態(githubに上がってないため)
マスターキーがない状態でcredential.ymlを編集すると新たにマスターキーが作成されるが、キー内容が違うため使えない
マスターキーを紛失した場合はcredential.ymlを削除して「credentials:edit」で作り直す
■(参考)チーム開発での運用方法
・master.keyの内容は共有しておき、credential.ymlの内容を他メンバーでも編集できるようにしておく
・他メンバーにも知られたくない個人の秘匿情報は、サーバ上の/etc/environmentに環境変数として設定しておく
■他の環境変数の設定
前の記事にも記載しました通り、環境変数の設定方法は何通りかあります。
環境変数を設定しないと、個人のAPIキーなどの情報がそのままgithubに上がってしまい他の人に悪用されかねません。
環境変数の設定先は本番環境とローカルで参照する先が違うのでファイルも違います。
・ローカル環境:.bash_profile (gem dotenv-railsでrailsでもenvファイルで環境変数を管理できるようです。私はうまくいかなかったのでこちらに設定しました。)
・本番環境:/etc/environment
※どちらも表示方法 EVV:['KEY']
■まとめると、今回のチーム開発で管理した環境変数の一覧は
ローカル:.bash_profile
・APIキー(PAYJP ※ユーザのgoogle・facebook認証連携は別の方担当のためわかりません、、)
・AWSキー
production環境:/etc/environment
・APIキー(PAYJP・google・facebook認証)
・AWSキー
・マスターキー
・DBパスワード
・secret_key_base
rails(credential.tml)
・BASIC認証キー
・secret_key_base
いえ、もっと私が理解していれば良い使い方ができたはずです、、
今回使用した感想としては、production環境での秘匿情報をcredential.ymlに記載するのもサーバ上の/etc/environmentに記載するのもあまり変わりないと思いました。(環境変数の表示方法は違いますが)
credential.ymlの利点としては、チーム開発でチーム内で共有したい編集が必要な情報がある場合なのでしょうか😶
あとどこに何を管理するか決めておかないと、アプリケーションが増えると.bash_profileの内容が悲惨なことになりそうです、、
参考にさせていただきました
https://qiita.com/NaokiIshimura/items/2a179f2ab910992c4d39
https://oknm.jp/posts/9e030108704dc3d1e36743051934126c52ae2e2d
「ruby on rails5 速習ガイド」
何かございましたらご指摘くださいませ🙇♀️