Upgrade to Pro — share decks privately, control downloads, hide ads and more …

もう「クレデンシャルください」なんて言わせない

zaru
July 21, 2018

 もう「クレデンシャルください」なんて言わせない

Rails で秘匿情報や環境変数を管理するベストな方法

2018.07.21 Osaka RubyKaigi 01 LT
@zaru

zaru

July 21, 2018
Tweet

More Decks by zaru

Other Decks in Technology

Transcript

  1. もう「
    クレデンシャルください」
    なんて
    言わせない
    2018.07.21 Osaka RubyKaigi 01 LT
    @zaru

    View Slide

  2. @zaru
    株式会社ベー
    シック CTO

    View Slide

  3. http://zaru.theshop.jp/

    View Slide

  4. View Slide

  5. リモー
    ト OK
    https://basicinc.jp/enjoy-hacking

    View Slide

  6. 好きな Ruby
    メソッド
    Enumerable#cycle
    switch = %w(on off).cycle
    switch.next
    #=> on
    switch.next
    #=> off
    switch.next
    #=> on

    View Slide

  7. フォー
    ムオブジェクトと ActiveModel

    View Slide

  8. フォー
    ムオブジェクトと ActiveModel

    View Slide

  9. もう「
    クレデンシャルください」
    なんて
    言わせない

    View Slide

  10. みなさん、Rails
    で秘匿情報の管理どう
    してますか?

    View Slide

  11. こんなことありませんか?

    View Slide

  12. プロジェクトに新しく
    プログラマがジョインした

    View Slide

  13. 「.env
    ください」

    アクセスキー
    ください」

    View Slide

  14. View Slide

  15. つらみ
    その都度、
    手で渡すのが面倒
    もらう方も面倒くさい
    秘匿情報の渡し方に神経を使う

    View Slide

  16. こんなことありませんか?

    View Slide

  17. 開発をしていて
    環境変数を追加した

    View Slide


  18. デプロイ前に環境変数をサー
    バへ追加します」

    デプロイ前に .env.production
    修正します」
    「Ansible
    でサー
    バへ環境変数を追加します」

    View Slide

  19. View Slide

  20. つらみ
    デプロイフロー
    が煩雑
    マー
    ジ以外に気を遣う部分がある
    デプロイ失敗チャレンジ感
    手順をミスるとデプロイ失敗する

    View Slide

  21. 僕たちは秘匿情報や環境変数を
    どのように管理すれば良いのか

    View Slide

  22. 救世主?!
    Rails5.2
    から Credentials
    導入

    View Slide

  23. Credentials
    とは
    秘匿情報を1
    つのファイルで管理するよ
    マスター
    キー
    で秘匿情報を暗号化・
    復号
    config/master.key or RAILS_MASTER_KEY
    Git
    で管理できるのでチー
    ムで共有しやすい

    View Slide

  24. 最高か?!

    View Slide

  25. View Slide

  26. つらみ
    暗号化すると構造を維持してないので中身がわからない
    コー
    ドレビュー
    がやりにくい
    マスター
    キー
    が必要
    結局マスター
    キー
    の管理をどうしようという悩みがある

    View Slide

  27. 解決

    View Slide

  28. (AWS | GCP) KMS + yaml_vault

    View Slide

  29. thanks @joker1007

    View Slide

  30. 何が嬉しいのか
    YAML
    の構造を保ったまま value
    だけ暗号化する
    コー
    ドレビュー
    がやりやすい
    デプロイ時にファイル展開ではなくメモリ展開できる
    サー
    バに物理ファイルで秘匿情報を展開しなくて済む

    View Slide

  31. マスター
    キー
    ではなく IAM
    で開発者毎のクレデンシャルを渡せば
    OK
    開発者自身に管理してもらえる
    AWS EC2
    にロー
    ルを付与すればマスター
    キー
    なしに復号できる
    煩わしいマスター
    キー
    を管理せずに済む

    View Slide

  32. 最高か?!

    View Slide

  33. View Slide

  34. Heroku
    は?
    AWS API Key
    があればどこでも使えるので問題はない
    問題はないが、Heroku
    アサインユー
    ザであれば Con g vars
    見れる
    のでキー
    が見えちゃう
    Enterprise
    なら細かいアクセス制限できる…?
    いい方法があれば教えてください

    View Slide

  35. exit!

    View Slide