💨

Azure Blob Storageの不変ストレージを削除したくなった時

2021/08/18に公開

はじめに

以前にこちらの記事でAzureの操作ログ(アクティビティログ)や、AzureADのログ(サインインログや監査ログ)は不変BLOBに格納すると良いですよ、ということを書きました。
https://zenn.dev/tomot/articles/7ddeb902e8f426
操作ログの類は何かあった時に消えたり改変されたりすると困るので、保護された領域に格納したいものですが、しっかり守ってしまったせいで消せなくなって困った話を書き残したいと思います。

不変ストレージとは

あらためて、不変ストレージとは、下記のドキュメントで紹介されています。
https://docs.microsoft.com/ja-jp/azure/storage/blobs/immutable-storage-overview
※2021/8/16時点、このドキュメントは日本語版が提供されていないと表示されています。
github上の下のドキュメントだと思うのですが、たぶん英語版の更新(ドキュメントツリーの変更)に追いついていないんだと思います。。。
https://github.com/MicrosoftDocs/azure-docs.ja-jp/blob/master/articles/storage/blobs/storage-blob-immutable-storage.md
こちらのドキュメントでは「不変BLOB」とも書かれていますね。昔のドキュメントは不変BLOBだった気がするのですが、こちらの方がわかりやすい気がします。
不変ストレージには2種類のポリシーがあり、用途と効果が少し違いますが、基本的な動作としては一緒です。「コンテナに対して適用する」「有効なポリシーが掛かっていると、ポリシーが掛かっているコンテナや中身のデータ(BLOB)はもちろん、ストレージアカウントも削除できない」「BLOBは作成・読み取りのみ可能で、変更や削除はできない」という動作になります。

訴訟ホールドポリシー

こちらは、リーガルな対応などのためにデータを保護するためのポリシーです。ポリシーを解除するまで、削除や変更ができません。削除できるのは高権限ユーザーだけですので、そのユーザーを保護することで統制を担保することになります。

時間ベースのリテンションポリシー

こちらは、指定した期間が過ぎるまで、BLOBを削除できなくなるポリシーです。一定期間ファイルを残しておく必要がある、というような監査要件・統制要件に応えられるようなものになります。クラウド上の操作ログなど、「1年保管しておくこと」といった要件がアリがちですね。
「時間ベースのリテンションポリシー」は、一度設定すると解除することができません。
※動作を確認するお試し期間のことを「有効化」とここでは呼んでいます。この状態だと、ポリシーを削除することができます。
※お試し期間が終わるとポリシーは「ロック」されます。ここまでくると、ポリシーを削除することはできません。
※なお「指定した期間」を伸ばすことはできます(変更回数制限アリ&短縮はできない)

困ったこと

さて今回は「時間ベースのリテンションポリシー」がロック済のコンテナの削除を考えてみます。

中身のデータは下だけなので、時間ベースのリテンションポリシーは期限切れです。
BLOB作成時:2021/8/12
BLOBの保護期間:~2021/8/13
データ削除時:2021/8/18

無邪気に、コンテナを削除しようとしてみます。

すると、以下のエラーとなり削除に失敗します。

はて、データは消せるはずなのに…

削除条件

ということで削除するための条件を確認してみました。
特にドキュメントには記載が無く、サポートに確認をしたわけでもないので、あくまで私が検証した2021/8時点の動作の話です。

BLOBの削除

まず、中身の掃除を行います。このBLOBは、時間ベースのリテンションポリシーの期限が切れているので、削除できるはずです。

はい、想定通り削除でき、コンテナの中身が空になりました。

コンテナの削除

続けて、先ほど失敗したコンテナの削除を試してみます。

同じInformationが表示されますが、

今度はきれいさっぱり削除することが出来ました。

すると、削除条件って…

  • 時間ベースのリテンションポリシーが適用されていると、コンテナを削除することができません。
  • 「ポリシーが適用されている」とは、中身のBLOBデータが存在するかどうかでチェックされており、そのBLOBデータの「時間ベースのリテンション」が過ぎているかどうかは関係ありません。
  • よって、コンテナを削除したいときは、中身をキレイに削除してからにしましょう
    ということになります。

個人的な感覚でいえば、「時間ベースのリテンション」が過ぎているのであれば、中身のデータはもう保護する必要ないわけですし、それくらいValidationをかけてほしいものです。が、現時点ではこのように動作することが確認できました。

おわりに

実は前回の記事で作成した不変ストレージが削除できなくて困っていたのですが…、試行錯誤の結果削除できるようになりました。(ただし、365日で設定したので、本当に消せるのは1年後!)
私の記事通り試してみてハマった人がいるかもしれませんので、解決策を残しておきましたというお話でした。

Discussion