Google Cloud Storageを不変ストレージにして、ランサムウェアによるデータ削除や内部犯によるデータ削除から守る方法を紹介します。
使えそうで使えない機能
まず最初に一見するとこの目的に使えそうではあるものの、実は活用できない機能(罠)を紹介します。Object VersioningとSoft Deleteです。
Object VersioningはGCSのオブジェクトを削除・書き換えしたときに古いオブジェクトを自動的に保持して復元できる機能です。この機能は偶発的なファイル削除に対しては有効に機能しますが、ランサムウェアや内部犯などの悪意を持った削除に対しては有効ではないです。
なぜなら、Object Versioningによってバックアップが取られている過去バージョンのデータを消すこともできるからです。そのため、悪意を持った犯人が過去バージョンも含めたすべてのバージョンを消してデータを完全に消し去ることができてしまいます。
Soft Delete機能はGCSのオブジェクトを削除したときに古いオブジェクトを一旦Soft Deleteという状態にした後、一定期間(デフォルトでは7日)経過後に本当に削除する機能です。Soft Delete状態のオブジェクトは管理者権限を持っていても削除することはできないため、一見すると不変ストレージとして使えそうです。しかし、管理者権限があればSoft Delete機能をOFFにすることができてしまうため、この方法もObject Versioningと同様に偶発的なファイル削除に対してのみ有効な方法です。
Bucket Lock
GCSを不変ストレージにするためにはBucket Lock機能を使用します。この機能を使うと一定期間の間、GCSオブジェクトの削除が不可能になります。
以下のようなterraformファイルでBucket Lockされたバケットを作成できます。
resource "google_storage_bucket" "immutable-bucket" {
name = "<BUCKET-NAME>"
location = "US"
retention_policy {
is_locked = true
retention_period = "<保持期間を秒で指定>"
}
}
Google Cloudのドキュメントでは最大で100年まで保持期間を指定できるように書いてありますが、terraformでは最大で2,147,483,647秒(約68年)までしか指定できないようです。(多分terraformのバグ?)
この方法で保持期間を設定したバケット内のオブジェクトは管理者権限(Ownerロール)を使っても削除できず、バケットを丸ごと削除することも不可能です。また管理者権限を使って保持期間を短くすることもできません。
そのため、ランサムウェアなどの悪意をもった相手にプロジェクトの管理者権限を奪われてしまってもデータを守ることができます。
不変ストレージのデータを削除する方法
最後にこの不変ストレージのデータを削除する方法について紹介します。この方法で作成した不変ストレージはGoogle Cloudプロジェクトを削除することで削除できます。そのため、不変ストレージを確実に「不変」にするためには、この削除方法からの防御が重要になります。
まず、プロジェクトの削除権限は非常に強い権限かつ、頻繁には必要にならない権限であるため、権限保持者を限定するという対策が考えられます。更にその上でPAMなどを用いてプロジェクトの削除操作を行うために複数人の共同作業が必要になるようにすることでより強固なセキュリティを構築できます。
また、万が一GCPプロジェクトが削除させてしまった場合でも早期に復旧させることで被害を最小化することもできます。多くのリソースは30日以内であれば復元可能です。GCSは30日よりも早く削除されることがあるようですが、プロジェクトの削除後なるべく早くに復元させればデータ損失を免れる可能性もあります。そのため、Google Cloudの外のモニタリングツールなどでプロジェクトの削除をいち早く気付けるようにアラートを設定することも対策として考えられます。
消すことができるのに不変とはどういうことなのか?という考察
さて、削除可能なのに「不変」とはどういう意味なのかということに関して考察します。
まずこの世に真の「不変ストレージ」はないです1。例えばオンプレ用の「不変ストレージ」として販売されている製品であっても、データセンターに侵入して不変ストレージを物理的に破壊することでデータを削除できます。もっと極端(ですが人類の実現可能な)例を考えると、不変ストレージとそのバックアップのあるすべてデータセンターに核ミサイルを同時に落とせばデータは消えてしまうでしょう。
そのため、ここで言う「不変」とは真の意味での不変ではなく、「現実的に考えれば削除できる可能性はほぼゼロに等しいと考えられる」という意味を指します。先ほどのオンプレの例で言えば、データセンターに侵入した後に物理破壊できる可能性です。不変ストレージを不変たらしめている要因は製品の仕様だけではなく、その製品の運用体制にもあります。オンプレデータセンターの入出管理が適切であればオンプレの不変ストレージは不変であるのと同様に、GCPのプロジェクト削除権限の管理が適切であればGCSの不変ストレージは不変になります。
-
理論物理学の極北のような、一般人にはSFと現実の間に見えるような領域にはあるかもしれませんがこの記事では考えません ↩