Akamai Cloud Computing - Volume Encryption (ディスク暗号化)

# はじめに
Akamai Cloud Computing では、インスタンスに付与できるボリュームとして、Linode Block Storageを提供しており、インスタンスにデフォルトで付与されている「Local Disk」と追加で付与することができる「Block Storage」があります。
どちらもNVMeを採用しており、従来のハードディスクドライブに比べて、スループットが10～20倍、IOPSが最大2000倍に向上するなど、性能面で大幅な改善を見込めます。

Linode Block Storageには以下の特徴があります。

- Block Storageの容量：10GB～16TB ※１
- IOPS：最大8,000（バースト12,000）※2
- スループット：最大350MB/s（バースト525MB/s）※2
- 1つのコンピュートインスタンスに最大8つのボリュームをアタッチ可能
- データの可用性を高めるため、データレプリケーションが組まれている
- 低コストなNVMe（0.10 ドル/GB ）

※1 Local Diskのインスタンスごとに容量が決まっています
※2 バーストは最大60秒です

[**Linode Block Storage**](https://techdocs.akamai.com/cloud-computing/docs/block-storage)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/9daf181e-b81d-292c-465c-e9cc676ab187.png)

## Volume Encryption (ディスクの暗号化) 

新たにLinode Block Storageの追加機能として、Volume Encryptionがリリースされました。

[Oct 17, 2024 — Block Storage supports encryption (Limited availability)](https://techdocs.akamai.com/cloud-computing/changelog/oct-17-2024-volume-encryption)

執筆時点では、一部地域のみで提供しているLimited availabilityとなり、利用にはサポートへの問い合わせが必要です。

Volume Encryptionの機能では、ディスクを暗号化することにより保存されたデータの安全性が確保され、データが格納されているNVMeが破棄される際にも、暗号化は維持されるため不正なアクセスから保護することができます。
そのため、よりセンシティブな情報の管理を行う要件などにも対応することができるようになります。

### 機能

[**Akamai Techdocs - Volume Encryption**](https://techdocs.akamai.com/cloud-computing/docs/volumes-disk-encryption)

### 暗号化

Volume Encryption は追加するBlock Storageに適用することができます。Volume作成時のみに選択でき、作成後の変更はできません。
デフォルトでは、暗号化機能は無効となっています。
なお、Local Diskの暗号化がされていない場合でも、追加するVolume Diskのみを暗号化することは可能です。
なお、暗号化されているVolume上ののデータを、さらにユーザー側で重複して暗号化することはパフォーマンスが劣化するため推奨されていません。
Local Diskの暗号化機能もリリースする予定です。

### ボリュームサイズの変更

暗号化されたボリュームの拡張を行うことができ、変更した際にも暗号化は維持されます。
ボリュームサイズの縮小は行うことはできません。

### データの移動、転送

暗号化してアタッチしたBlock Storageは、デタッチ後に別のインスタンスにアタッチすることが可能です。
この際に、暗号化は維持されます。
別のデータセンターにBlock Storageを移設する場合には、転送中のデータは暗号化が解除され、転送先のBlock Storageの設定に従い、再度暗号化、もしくは非暗号化されて保存されます。

### パフォーマンス

ディスクの暗号化機能を有効にした場合、非暗号化と比較するとIOPSのパフォーマンスが低下する可能性があります。
ボリュームサイズを大きくした場合には、パフォーマンスが向上する設計となります。

## 暗号化ディスクの作成

Volumesから新規Volumeを作成する際に、暗号化オプションを選択することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/e0a39ebd-f567-5eed-8081-3fa9848a4e83.png)

作成されたディスクは一覧から暗号化済みであることが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/22a02ee0-40a8-851c-7fc1-ffa20de467c9.png)


## Volume Encryption ベンチマーク

Volume Encryptionの機能を利用した場合には性能が劣化しますが、どの程度の影響があるのか[Flexible I/O Tester(fio)](https://github.com/axboe/fio)を利用してディスクに対してベンチマークを行いました。

Flexible I/O Tester (fio) は、Linux カーネル開発者の Jens Axboe によって2005年に開発された、オープンソースのストレージベンチマークツールです。Linux の I/O サブシステムのテストを簡略化するために作られましたが、現在では多くのプラットフォームで利用可能な汎用的なI/Oワークロードベンチマークツールとして広く使用されています。

fioを利用したベンチマークを自動化するためにスクリプトを作成しテストしています。

[**Github Gist : Volume Encryption Benchmark Script**](https://gist.github.com/isss802/3a607b5af06c04c4bd421afb2a8b54bc)


### ベンチマーク項目

今回は、4つの異なるストレージ構成のベンチマークを実施しました。
評価対象は、IOPS（1秒あたりの入出力操作数）とスループットです。

テスト対象の構成は以下の通りです。

**ディスク**

- Encrypt 100GB：100GBの暗号化ストレージ
- Encrypt 10,000GB：10,000GBの暗号化ストレージ
- UnEncrypt 100GB：100GBの非暗号化ストレージ
- UnEncrypt 10,000GB：10,000GBの非暗号化ストレージ

**ブロックサイズとタイプ**

- シーケンシャルリード（read）
- シーケンシャルライト（write）
- ランダムリード（randread）
- ランダムライト（randwrite）


**ブロックサイズ***

- 4k
- 64k
- 512k
- 1M


### ベンチマーク結果

:::note warn
本試験結果は性能を保証するものではありません。
:::

**シーケンシャルリード（read）/　シーケンシャルライト（write）**

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/a36f8950-0b2c-b8fa-6ad1-dc989a7e66b6.png" width=49%>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/68306e5e-72fa-a3bf-64ce-1ca925b4413a.png" width=49%>

**ランダムリード（randread）/ ランダムライト（randwrite）**

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/9b62dc72-f7e0-6e46-b91c-5fdbaad73556.png" width=49%>

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49877/d6225097-9737-107c-75d2-37dbc16cc300.png" width=49%>

※詳細な結果はページ下部に記載

### ベンチマーク総評

暗号化と非暗号化では読み込みには大きく差は出ませんでしたが、特に4k,64kのファイルサイズでの書き込みでは性能差があることを確認することができました。
また、100GBのディスクより10,000GBのディスクのほうが高いパフォーマンスを発揮することもわかりました。

# まとめ

Volume Encryptionの導入により、データをより安全に格納し、運用することが可能になります。
この機能は、特にセンシティブな情報を取り扱う場面で有益な機能です。暗号化によるパフォーマンスへの影響は一定程度確認されましたが、用途や要件に応じて、暗号化の有無を適切に選択することができます。

Akamai はCDN、セキュリティ、クラウドサービスを通じ、オンラインライフの力となり守っています。本稿でご紹介したような課題やご相談があれば、お気軽にお問い合わせください
- [Akamai 営業担当者へのお問い合わせ](https://www.akamai.com/ja/why-akamai/contact-us/contact-sales)

# 関連記事

アカマイ・テクノロジーズ合同会社はQiitaでAkamai Cloud Computing Services関連など開発者向けの記事を掲載しております。

https://qiita.com/xenbase/items/52e2956a64cedc772bd9




#### 参考：ベンチマーク結果詳細


| Directory           | Block Size | Test Type       | IOPS      | Throughput (MB/s) |
|---------------------|------------|-----------------|-----------|-------------------|
| Encrypt 100GB | 4k      | randread      | 1260.173983 | 4.92 |
| Encrypt 100GB | 4k      | randwrite      | 6371.562844 | 24.89 |
| Encrypt 100GB | 4k      | read      | 1765.423458 | 6.90 |
| Encrypt 100GB | 4k      | write      | 6912.351018 | 27.00 |
| Encrypt 100GB | 64k      | randread      | 968.321513 | 60.52 |
| Encrypt 100GB | 64k      | randwrite      | 4740.740741 | 296.30 |
| Encrypt 100GB | 64k      | read      | 1186.214886 | 74.14 |
| Encrypt 100GB | 64k      | write      | 5178.255373 | 323.64 |
| Encrypt 100GB | 512k      | randread      | 457.960644 | 228.98 |
| Encrypt 100GB | 512k      | randwrite      | 1316.195373 | 658.10 |
| Encrypt 100GB | 512k      | read      | 522.982635 | 261.49 |
| Encrypt 100GB | 512k      | write      | 1319.587629 | 659.79 |
| Encrypt 100GB | 1M      | randread      | 317.224287 | 317.22 |
| Encrypt 100GB | 1M      | randwrite      | 659.793814 | 659.79 |
| Encrypt 100GB | 1M      | read      | 325.699746 | 325.70 |
| Encrypt 100GB | 1M      | write      | 659.793814 | 659.79 |
| Encrypt 10,000GB | 4k      | randread      | 1242.875712 | 4.85 |
| Encrypt 10,000GB | 4k      | randwrite      | 6825.244741 | 26.66 |
| Encrypt 10,000GB | 4k      | read      | 1918.808119 | 7.50 |
| Encrypt 10,000GB | 4k      | write      | 6868.161811 | 26.83 |
| Encrypt 10,000GB | 64k      | randread      | 992.00775 | 62.00 |
| Encrypt 10,000GB | 64k      | randwrite      | 5312.581064 | 332.04 |
| Encrypt 10,000GB | 64k      | read      | 1233.73494 | 77.11 |
| Encrypt 10,000GB | 64k      | write      | 5454.061252 | 340.88 |
| Encrypt 10,000GB | 512k      | randread      | 453.498671 | 226.75 |
| Encrypt 10,000GB | 512k      | randwrite      | 1319.587629 | 659.79 |
| Encrypt 10,000GB | 512k      | read      | 503.937008 | 251.97 |
| Encrypt 10,000GB | 512k      | write      | 1319.587629 | 659.79 |
| Encrypt 10,000GB | 1M      | randread      | 308.433735 | 308.43 |
| Encrypt 10,000GB | 1M      | randwrite      | 659.793814 | 659.79 |
| Encrypt 10,000GB | 1M      | read      | 324.873096 | 324.87 |
| Encrypt 10,000GB | 1M      | write      | 659.793814 | 659.79 |
| UnEncrypt 100GB | 4k      | randread      | 1286.671333 | 5.03 |
| UnEncrypt 100GB | 4k      | randwrite      | 6784.26501 | 26.50 |
| UnEncrypt 100GB | 4k      | read      | 1888.611139 | 7.38 |
| UnEncrypt 100GB | 4k      | write      | 6831.648077 | 26.69 |
| UnEncrypt 100GB | 64k      | randread      | 995.624696 | 62.23 |
| UnEncrypt 100GB | 64k      | randwrite      | 5565.217391 | 347.83 |
| UnEncrypt 100GB | 64k      | read      | 1218.322427 | 76.14 |
| UnEncrypt 100GB | 64k      | write      | 6059.171598 | 378.70 |
| UnEncrypt 100GB | 512k      | randread      | 484.389782 | 242.19 |
| UnEncrypt 100GB | 512k      | randwrite      | 1319.587629 | 659.79 |
| UnEncrypt 100GB | 512k      | read      | 537.815126 | 268.91 |
| UnEncrypt 100GB | 512k      | write      | 1319.587629 | 659.79 |
| UnEncrypt 100GB | 1M      | randread      | 345.945946 | 345.95 |
| UnEncrypt 100GB | 1M      | randwrite      | 661.498708 | 661.50 |
| UnEncrypt 100GB | 1M      | read      | 343.624161 | 343.62 |
| UnEncrypt 100GB | 1M      | write      | 659.793814 | 659.79 |
| UnEncrypt 10,000GB | 4k      | randread      | 1265.573443 | 4.94 |
| UnEncrypt 10,000GB | 4k      | randwrite      | 6875.367184 | 26.86 |
| UnEncrypt 10,000GB | 4k      | read      | 1875.512449 | 7.33 |
| UnEncrypt 10,000GB | 4k      | write      | 6732.689542 | 26.30 |
| UnEncrypt 10,000GB | 64k      | randread      | 999.511957 | 62.47 |
| UnEncrypt 10,000GB | 64k      | randwrite      | 5851.428571 | 365.71 |
| UnEncrypt 10,000GB | 64k      | read      | 1236.341684 | 77.27 |
| UnEncrypt 10,000GB | 64k      | write      | 6113.432836 | 382.09 |
| UnEncrypt 10,000GB | 512k      | randread      | 477.166822 | 238.58 |
| UnEncrypt 10,000GB | 512k      | randwrite      | 1319.587629 | 659.79 |
| UnEncrypt 10,000GB | 512k      | read      | 532.224532 | 266.11 |
| UnEncrypt 10,000GB | 512k      | write      | 1319.587629 | 659.79 |
| UnEncrypt 10,000GB | 1M      | randread      | 329.048843 | 329.05 |
| UnEncrypt 10,000GB | 1M      | randwrite      | 661.498708 | 661.50 |
| UnEncrypt 10,000GB | 1M      | read      | 343.163539 | 343.16 |
| UnEncrypt 10,000GB | 1M      | write      | 661.498708 | 661.50 |