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

これから始める秘匿情報との使い方

 これから始める秘匿情報との使い方

Tomoki Yamashita

February 17, 2023
Tweet

More Decks by Tomoki Yamashita

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

  3. なんでいま秘匿情報?
    Circle CI

    インシデント対応
    おつかれさまでした

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  7. 例えば、
    1
    アプリに対して秘匿情報が 8

    8
    オーナー に対してアプリを提供
    64
    個の秘匿情報

    View Slide

  8. View Slide

  9. 🤮

    View Slide

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

    View Slide

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

    View Slide

  12. アプリ開発への組み込み

    View Slide

  13. 秘匿情報の編集
    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

    View Slide

  14. 編集している様子

    View Slide

  15. 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"}}

    View Slide

  16. それから
    CI
    はどうなった

    View Slide

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

    View Slide

  18. View Slide