Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

http://zaru.theshop.jp/

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

「.env ください」 「 アクセスキー ください」

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

最高か?!

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

解決

Slide 28

Slide 28 text

(AWS | GCP) KMS + yaml_vault

Slide 29

Slide 29 text

thanks @joker1007

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

最高か?!

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

exit!