Rails で秘匿情報や環境変数を管理するベストな方法
2018.07.21 Osaka RubyKaigi 01 LT @zaru
もう「クレデンシャルください」なんて言わせない2018.07.21 Osaka RubyKaigi 01 LT@zaru
View Slide
@zaru株式会社ベーシック CTO
http://zaru.theshop.jp/
リモート OKhttps://basicinc.jp/enjoy-hacking
好きな RubyメソッドEnumerable#cycleswitch = %w(on off).cycleswitch.next#=> onswitch.next#=> offswitch.next#=> on
フォームオブジェクトと ActiveModel
もう「クレデンシャルください」なんて言わせない
みなさん、Railsで秘匿情報の管理どうしてますか?
こんなことありませんか?
プロジェクトに新しくプログラマがジョインした
「.envください」「アクセスキーください」
つらみその都度、手で渡すのが面倒もらう方も面倒くさい秘匿情報の渡し方に神経を使う
開発をしていて環境変数を追加した
「デプロイ前に環境変数をサーバへ追加します」「デプロイ前に .env.production修正します」「Ansibleでサーバへ環境変数を追加します」
つらみデプロイフローが煩雑マージ以外に気を遣う部分があるデプロイ失敗チャレンジ感手順をミスるとデプロイ失敗する
僕たちは秘匿情報や環境変数をどのように管理すれば良いのか
救世主?!Rails5.2から Credentials導入
Credentialsとは秘匿情報を1つのファイルで管理するよマスターキーで秘匿情報を暗号化・復号config/master.key or RAILS_MASTER_KEYGitで管理できるのでチームで共有しやすい
最高か?!
つらみ暗号化すると構造を維持してないので中身がわからないコードレビューがやりにくいマスターキーが必要結局マスターキーの管理をどうしようという悩みがある
解決
(AWS | GCP) KMS + yaml_vault
thanks @joker1007
何が嬉しいのかYAMLの構造を保ったまま valueだけ暗号化するコードレビューがやりやすいデプロイ時にファイル展開ではなくメモリ展開できるサーバに物理ファイルで秘匿情報を展開しなくて済む
マスターキーではなく IAMで開発者毎のクレデンシャルを渡せばOK開発者自身に管理してもらえるAWS EC2にロールを付与すればマスターキーなしに復号できる煩わしいマスターキーを管理せずに済む
Herokuは?AWS API Keyがあればどこでも使えるので問題はない問題はないが、Herokuアサインユーザであれば Con g vars見れるのでキーが見えちゃうEnterpriseなら細かいアクセス制限できる…?いい方法があれば教えてください
exit!