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

本番データを安全に利用する

sasaki nobuya
September 04, 2017

 本番データを安全に利用する

本番データをdumpし、個人情報を含むカラムを指定のマスク方式でマスクしたdumpファイルを吐き出すgemを作った。

sasaki nobuya

September 04, 2017
Tweet

More Decks by sasaki nobuya

Other Decks in Technology

Transcript

  1. 2017 SpeeeKaigi #3
    本番デー
    タを安全,
    簡単に利用する
    株式会社 Speee
    佐々
    木 延也
    SpeeeKaigi
    1

    View Slide

  2. Pro le
    佐々
    木 延也
    三重県出身
    中日/HipHop/
    ビシエド が好き
    今年の8
    月1
    日 Speee
    入社
    前職はグルメ系Web
    サー
    ビスのWeb
    エンジニア/Android
    エンジニア
    SpeeeKaigi
    2

    View Slide

  3. みなさん
    本番デー
    タでテストしてますか?
    SpeeeKaigi
    3

    View Slide

  4. 本番デー
    タでテストするメリット
    SpeeeKaigi
    4

    View Slide

  5. 本番デー
    タでテストするメリット
    1.
    ユー
    ザー
    目線にたってテストができる
    (
    失敗例)
    ユー
    ザー
    は写真の順番にこだわりを持っていることが多い。
    しかし開発環境の画像デー
    タが適当だったため、
    そのことに
    気づかずデー
    タ修正時に順番がバラバラになってしまった。
    SpeeeKaigi
    5

    View Slide

  6. 本番デー
    タでテストするメリット
    2.
    色々
    なパター
    ンのデー
    タでテストがで
    きる
    (
    失敗例)
    特定の条件下でインポー
    トしたデー
    タには通常のライフサイ
    クルでは存在するはずのデー
    タがなく、
    それが原因で
    EXCEPTION
    が発生した。
    SpeeeKaigi
    6

    View Slide

  7. 本番デー
    タでテストするメリット
    3.
    パフォー
    マンスの検証ができる
    (
    失敗例)
    開発DB
    と本番DB
    で統計情報が異なっていたため開発環境で
    はindex
    が使われていたが本番では使われていなかった。

    れが原因でSlow
    クエリが頻発し一部のAP
    サー
    バー
    がダウン
    してしまった。
    SpeeeKaigi
    7

    View Slide

  8. なぜ本番デー
    タのテストが活発で
    なかったのか?
    SpeeeKaigi
    8

    View Slide

  9. 個人情報を保護してデー
    タを持っ
    てくるのが大変だから
    SpeeeKaigi
    9

    View Slide

  10. 大変な理由①
    1.
    本番環境への影響を避ける必要性
    mysqldump
    のオプションでテー
    ブルlock
    してしまったり
    するオペミスが起きうる。
    レプリケー
    ションで持ってくる場合は本番DB
    の設定を変
    える必要がある。
    SpeeeKaigi
    10

    View Slide

  11. 大変な理由②
    2.
    元の形式を維持する必要性
    理由
    アプリのバリデー
    ションにかからないようにするため
    (
    例)
    電話番号
    元デー
    タ ✕

    03-3333-4444 0000000000 03-1000-0000
    SpeeeKaigi
    11

    View Slide

  12. 大変な理由③
    3. DB
    のUnique
    制約を回避する必要性

    全て同じ文字列で埋める」
    などの方法ではDB
    のUnique

    約にかかってしまうことがある。
    SpeeeKaigi
    12

    View Slide

  13. これらの要件を満たす、
    いい解決
    策がなかったので
    SpeeeKaigi
    13

    View Slide

  14. mozaic
    SpeeeKaigi
    14

    View Slide

  15. Gem
    を作った(
    まだprivate...)
    SpeeeKaigi
    15

    View Slide

  16. 実現したい機能要件
    1.
    大規模なデー
    タのdump
    のパフォー
    マンスが問題ないこと
    2.
    コマンド1つで実現できること
    3.
    カラムごとにData Masking
    方式を切り替えられること
    4.
    適切なData Masking
    方式がなかったら、
    ユー
    ザー
    が自分
    でRuby
    のマスク処理を行えること
    5. MySQL, PostgreSQL
    に対応
    SpeeeKaigi
    16

    View Slide

  17. 実現したい機能要件
    1.
    大規模なデー
    タのdump
    のパフォー
    マンスが問題ないこと
    2.
    コマンド1つで実現できること
    3.
    カラムごとにData Masking
    方式を切り替えられること
    4.
    適切なData Masking
    方式がなかったら、
    ユー
    ザー
    が自分
    でRuby
    のマスク処理を行えること
    5. MySQL, PostgreSQL
    に対応
    SpeeeKaigi
    17

    View Slide

  18. 実現方法
    SpeeeKaigi
    18

    View Slide

  19. 3.
    カラムごとにData Masking
    方式を切り替えられること
    ---
    user: root
    host: localhost
    port: 3306
    db:
    name: sample_development
    rdbms: mysql
    tables:
    - name: owners
    columns:
    - name: phone_number
    method: tel # Data Masking
    方式
    - name: users
    columns:
    - name: mail
    method: email # Data Masking
    方式
    SpeeeKaigi
    19

    View Slide

  20. 3.
    カラムごとにData Masking
    方式を切り替えられること
    組み込みのData Masking
    方式
    方式 マスク方法
    tel
    電話番号の体裁を保ったままマスクする
    email
    メー
    ルアドレスの体裁を保ったままマスクする
    shuf e
    各レコー
    ドの順番を入れ替える
    blackout
    任意の文字、
    数字で埋める
    SpeeeKaigi
    20

    View Slide

  21. 4.
    適切なData Masking
    方式がなかったら、
    ユー
    ザー
    が自分
    でRuby
    のマスク処理を行えること
    mask
    メソッドとコンストラクタを持つRuby
    のクラスを指定
    ディレクトリに格納し、YAML
    の設定ファイルにクラス名を
    小文字で記載すると独自のマスク処理を行える。
    module Mozaic::MaskMethod::Plugin
    class SampleMask
    def initialize(records, column_name); ;end
    def mask; ;end
    end
    end
    SpeeeKaigi
    21

    View Slide

  22. 今後追加する予定の機能
    Data Masking
    方式のブラッシュアップ
    Plugin
    機構の導入
    差分更新できるようにする
    環境変数からクレデンシャルを取得できるようにする
    PostgreSQL
    対応
    SpeeeKaigi
    22

    View Slide

  23. ご清聴ありがとうございました
    SpeeeKaigi
    23

    View Slide