ONTAPにおけるデータ消去機能【ZeroingとSanitize】

## はじめに
NetApp StorageであるAFFやFASのOSであるONTAPには様々な機能がありますが、
この記事ではSecurityに関するDiskの初期化機能であるZeroingとSanitizeについて記載します。
操作や設定はCLIを用いて行います。
|![003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/3b4f7514-2948-0d87-52b2-95a36dccc92e.png)
|:-:|

## 何をしたい？できる？
- **ZeroingとSanitizeの違いを知る**
- <font color="Red">**ONTAP9.4以降のZeroingを確認する**</font>
- **ONTAP9からはデータ用DiskのSanitizeはONTAP上で実施できる事の確認**

## ファイルシステムとは
記憶装置に保存されたデータを管理し、操作するために必要なOSが提供する機能で、ファイルやファイル名、ディレクトリ構造といった概念を具現化しています。ファイルシステムには様々な種類があり、OSによって使用ファイルシステム(NTFSやXFS等)が異なります。
**ONTAPのファイルシステムは、WAFL(Write Anywhere File Layout)と呼ばれてますが、実体としてはAggregateがそれにあたります。**

|![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/59a78648-af97-a801-f27a-825cdb274129.png)
|:-:|

参考までにWAFLの特徴としては、以下のような形となります。
- データはNVRAM（Non-Volatile RAM：バッテリー付き不揮発メモリ）に保管した後、ディスクに纏めて書き込む
- 管理情報であるinodeと実際のデータを同じ領域に書き込む
- データの更新時に、既存ブロックにデータを上書きせずに新規ブロックとして追記するジャーナル型ファイルシステムを採用

|<img width="400" alt="qiita-square" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1268577/96f80c23-e080-2713-0f94-87f2c5cfc9ad.png>
|:-:|

## Zeroingについて
Aggregate削除後に利用された**DiskはZeroingする事で再利用可能となりますが、ONTAP9.3まではDisk全体に0が書き込まれてました。**
- 過去にZeroingした際の実績では、SATA DiskのZeroingには数日かかっていた
  (2TBで8時間位)
- Zeroing済のSpare Diskを用意しておく事で、Aggreagate作成や拡張にかかる時間を回避

<font color="Red">**なお、ONTAP9.4からはFast Zeroingが実装されていますが**</font>、高速なZeroingが行われ、ほぼ瞬時にDiskを再利用することが可能となってます。
- Fast ZeroingではAggregateの作成時に64bitの固有のFZ(Fast Zeroing) Signatureを生成
- Diskの4KBブロックごとのチェックサムを持つがにFZ Signatureを格納する領域を追加
- データをreadする際、このFZ SingatureがAggregateのものとディスクのもので一致しているかチェック
- 一致していなければ未初期化のブロックであると判断しゼロブロックとして扱う

Zeroingでは<font color="Red">**AggregateのFZ Signatureを新しく生成のみで、実際にはDiskへの書き込みは実施されませんので、データを確実に消去するにはsanitizeの実施が必要となります。**</font>


なお、ONTAP9.3以前からUpgradeして使い続けていてFast Zeroingが利用できないという場合において、事前にZeroingされていないDiskがあると色々不都合が発生するのではないか？と思われるかもしれませんが、**Disk故障時におけるRAID再構築を開始する為に事前にSpareDiskはZeroingする必要はありません。**
SpareDiskの事前Zeroingが必要なケースは、新しいAggregateを構築する場合か既存のAggregateのサイズを拡張する場合のみとなります。



#### Zeroingの実行手順

Aggregate削除後に利用されていたDisk状態
```bash:
> storage disk show -disk 1.1.10 -fields zeroed
disk   zeroed
------ ------
1.1.10 false
```
Zeroingの実行
```bash:
> storage disk zerospares
```


Zeroing後のDisk状態
```bash:
> storage disk show -disk 1.1.10 -fields zeroed
disk   zeroed
------ ------
1.1.10 true
```

## Sanitizeについて
Spare Diskに対して**指定したバイトパターンまたはランダムデータでDiskを上書きし、データを物理的に消去するプロセスで、元のデータのリカバリが不可能**になります。

制約は以下の通りです。
- ADP環境では、ADPの解除＝システムの初期化が必要となる
- 極一部SSDではサポートされていない
- HAペアのTakeover中の操作はサポートされない
- 読み取り/書き込みの問題が原因で障害が発生したDiskでは実行できない
- ATAドライブでは、フォーマットフェーズは実行されない
- ランダムパターンを使用している場合、一度に 100 本を超えるDiskに対して実行することはできない
- アレイ LUN ではサポートされない

#### NIST SP 800-88r1ガイドラインに従って物理メディア上のデータを削除
暗号化されたDiskを持たないONTAPでは、3サイクルの上書きパターンを連続して適用します。
これは米国国防総省（DoD）がHDDメディア（SAS/SATA/NL-SAS）に対して国家産業安全保障プログラム運用マニュアル（DoD 5220.22-M）で定めた規格に準拠しています。
 暗号化Diskを活用するONTAPの場合、「暗号化DiskのSanitize」を使用してSEDを暗号的にサニタイズし、既存のデータを取り出すことを不可能にし、NIST 800-88パージ標準に準拠しています。

#### Sanitizeの実行手順
**操作は基本的にnode shell上で行います**

node shellに移動し、Sanitizeの有効化 (HA構成だと各コントローラでそれぞれ実施)
```bash:
::> system node run -node <コントローラ名>

::> options licensed_feature.disk_sanitization.enable on
You will not be able to disable this feature, are you sure you
wish to continue? [no]  <==yesを入力
```
Sanitizeの実行
```bash:
> disk sanitize start 0a.01.11
WARNING: Disk sanitization will remove all data from the selected disks and cannot be recovered.
Do you want to continue (y/n)? <==yを入力

WARNING:  The sanitization process might include a disk format.
If the system is power-cycled or rebooted during a disk format,
the disk might become unreadable. The process will attempt to
restart the format after 10 minutes.

The time required for the sanitization process might be significant,
depending on the size of the disk and the number of patterns and
cycles specified.
Do you want to continue (y/n)? <==yを入力
The disk sanitization process has been initiated. When it is complete, the system's event log will be updated.
```

Sanitizeの進捗確認 
(4TBのSATA Diskに実施して30分位待った値)
```bash:
> disk sanitize status
Sanitization for 0a.01.11 is 3% complete.
```

## 参考及びリンク
[ドライブの高速初期化](https://docs.netapp.com/ja-jp/ontap/disks-aggregates/fast-zeroing-drives-concept.html)

[ディスクを完全消去する](https://docs.netapp.com/ja-jp/ontap/disks-aggregates/sanitize-disk-maintenance-mode-task.html)