Slide 1

Slide 1 text

これから始める 秘匿情報との付き合い方 - 2023.02.17 shibuya.apk #40 @tomorrowkey

Slide 2

Slide 2 text

山下智樹 / STORES 株式会社 ex- おいしい健康 ex- クックパッド Android 13 年生 @tomorrowkey

Slide 3

Slide 3 text

なんでいま秘匿情報? Circle CI の インシデント対応 おつかれさまでした

Slide 4

Slide 4 text

STORES でなにやってるの? お商売をしているオーナーさんごとにオリジナルアプリを 作り、お客様へのクーポンの配布やお店からのご案内をと おして、双方にとってよい関係性を築いていくためのサー ビスです。

Slide 5

Slide 5 text

プロダクトの性質 ビジネスロジックとして サービスの成長 に伴い アプリ数が増える ということ

Slide 6

Slide 6 text

モバイルの秘匿情報って そこそこあるよね Firebase 認証情報 API サーバへOAuth クレデンシャル id, secret Google Play Publisher の認証情報 Android アプリアップロード鍵の情報 password, alias, key password その他プロダクト固有の秘匿情報

Slide 7

Slide 7 text

例えば、 1 アプリに対して秘匿情報が 8 個 8 オーナー に対してアプリを提供 64 個の秘匿情報

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

🤮

Slide 10

Slide 10 text

自分たちで秘匿情報を 管理しましょう joker1007/yaml_vault

Slide 11

Slide 11 text

yaml_vault ってなに? YAML を暗号化して秘匿情報のストレージとして 使うことができるライブラリ(Ruby gem) 暗号化のキーはパスフレーズの他にGCM/AWS KMS も使うことができる

Slide 12

Slide 12 text

アプリ開発への組み込み

Slide 13

Slide 13 text

秘匿情報の編集 lane :"edit-secrets" do editor = ENV["EDITOR"] || "vi" Tempfile.create(["", ".yml"]) do |file| # 複合して一時ファイルに書き出し sh( "yaml_vault decrypt #{project_root_path}/secrets.yml -o #{file.path}", log: false ) # エディタで開く system("#{editor} \"#{file.path}\"") # 編集した秘匿情報を暗号化 sh( "yaml_vault encrypt #{file.path} -o #{project_root_path}/secrets.yml", log: false ) end end

Slide 14

Slide 14 text

編集している様子

Slide 15

Slide 15 text

0:00 / 0:19 秘匿情報の使用 def yaml_vault @yaml_vault ||= YamlVault::Main.from_file( "#{project_root_path}/secrets.yml", [['$']], passphrase: ENV['YAML_VAULT_PASSPHRASE'], ).decrypt_hash end irb(#):001:0> yaml_vault => {"keystore"=> {"file"=> "MIIKzwIBAzCCCogGCSqGSIb3DQEHAaCCCnkEggp1MIIKcTCCBbgGCSqGSIb3DQEHAaCCBakEggWlMIIFo "store_password"=>"M1zEE541QpOBvIVZkM", "key_alias"=>"tomorrowkey", "key_password"=>"M1zEE541QpOBvIVZkM"}}

Slide 16

Slide 16 text

それから CI はどうなった

Slide 17

Slide 17 text

さいごに 秘匿情報はとても大切なので、大切に使おう ちょっとした工夫で、より安全に扱うことがで きる みなさんのプロダクトでどのように秘匿情報を 扱っているか、このあとの時間に教えてくださ い〜〜〜〜 Sample code: tomorrowkey/AppWithYamlVault

Slide 18

Slide 18 text

No content