6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

イベントソーシングでイベントを変更/削除する必要がある場合の対処

Posted at

本稿ではイベントストアを改変せずに、イベントストアに蓄積したデータを削除するひとつの実験的なアイディアを紹介する。

イベントソーシングは原則、イベントを変更・削除してはならない。Aggregateを削除するようなコマンドも、イベントストア上では「削除しましたイベント」が追加される。要するに論理削除のような状態になる。

どうしても削除が必要なケース

しかし、ある状況下ではこの原則を破らないといけないことがある。ユーザからの個人情報削除要請があった場合だ。日本の個人情報保護法では、正しく個人情報を扱っている事業者には、個人情報削除の義務は課せられていないものの1、何らかの業務上の理由で削除しなければならないことがあるかもしれない。

このようなケースでは、イベントストアに「個人情報を削除した」イベントを追加するだけでは、イベントストア上に依然として情報が残っており問題となりうる。

イベントストアから情報を削除する方法

物理削除

イベントをストアから削除してしまう。なかったことにする。

ダミーへの置き換え

イベントを書き換えて、内容を無害なものにする。たとえば、クレジットカード番号なら「0000-0000-0000-0000」といった無意味なものにするとか。

これらどちらもイベントストア自体を改変することになる。

イベントストア自体を改変せずに削除する方法

イベントストア自体を改変せずに削除する方法のひとつのアイディアとして、暗号消去(Cryptographic Erase;CE)は検討に値する。暗号消去とは、暗号化されたデータを直接削除する代わりに、データを複合するための暗号鍵を削除することで、データを消去したとみなす方法。NISTが定めたデータの消去方法のガイドラインGuidelines for Media Sanitizationにも取り上げらてている。

イベントストアでCEを実施する前提として下記に注意する。

  • 暗号鍵が適切に管理されていること。破棄した鍵が、他のデバイスやストレージに鍵が残っていたらダメ。
  • 十分な暗号化アルゴリズムが用いられていること。
  • イベントストアのデータが既に暗号化済みであること。

したがって、消去が必要なイベントが既に平文で蓄積された状態では手遅れであり、予めCEを導入しておく必要がある。

イベントストアでCEするメリット

  • 後でイベントを改ざんしなくて済む
  • 鍵さえ消去すればいいので、イベントの特定の手間が無く、特定漏れによる消去未実施のリスクが少ない

イベントストアでCEするデメリット

  • 鍵の管理を徹底しないとならない

イベントストアでのCEの対応方法

データの消去の単位を決める必要がある。ユーザごとなのか、Streamごとなのか、フィールドごとなのか。これによって発行する鍵の数が変わってくる。

データ消去単位を決めたら、その単位ごとに鍵を発行する。例えば、個人情報は最小の単位としてユーザごとに消去要請がありえる。この場合、ユーザアカウントごとに1つずつ固有の鍵を作ることになる。

次に、イベントの中身に着目する。イベントの属性の中で、消去要請後も保持していい属性とそうでない属性を決める。消去が必須の属性は、暗号化してイベントに持たせるようにする。イベントまるごと暗号化してしまうと、鍵消去後にそのイベント自体を再生できなくなってしまうので、属性ごとの暗号化が望ましい。また、鍵が特定できるよう、フィールドやイベントのメタデータ等に鍵名を入れておくようにする。

// 平文イベント
{"user_id": 123, "name": "田中 太郎"}

// 暗号イベント(鍵名 $ 暗号化データ という書式にする)
{"user_id": 123, "name": "user0001.key$U2FsdGVkX19KkrXKIx2TQ61W0ZVkLT3uzxYYPFLLQOI="}

イベントをストアから取り出す際は、鍵を使い各暗号化属性を復号するようにする。鍵は消去済みかもしれないので、復号出来ない場合はダミーのデータに置き換える処理は必要になる。ダミーのデータは、ドメインモデルやQuery Modelに影響しないような無害で無意味なものを採用する。

CEの実施

いざ、CEを実施するとなったら、まずは鍵を完全に破棄する。もし、Query Model等の写像データに削除したいデータが残っている場合は、イベントストアに削除イベントを追加した上で、Query Modelにそれを処理させるか、Query Modelを消去して、イベントを再生する必要もある。

雑感

  • それでもイベントストアは改変しないほうがいいと思う。してはならないとも言える。
  • どうしても改変が必要な場合は、CEを検討できるかもしれない。
  • CEにすると、イベントストア単体ではQuery Model等を作れなくなるデメリットはある。
  • CEは鍵の管理が大変そう。
  1. 個人情報を削除してもらう方法はありますか - 弁護士ドットコム

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?