はじめに

第三の暗号化タイミング

セキュリティ設計や監査にて、通信経路上の暗号化とデータ保管時の暗号化を意識することは多いと思います。
実際、ほとんどの要件はこれでカバーできますが、これらだけでは暗号化されていないタイミングも発生します。
データの使用中です。

秘匿性の高いデータを取り扱うシステムにおいて、データの使用中までをカバーした機密性の維持の実現をするのが、「Confidential Computing」です。

Confidential Computing とは?

Confidential Computing とは、Google Cloud が Trusted Execution Environment (TEE) を用いて提供する使用中のデータ保護機能です。
Confidential Computing には、以下の3つのプロダクトがあります。

  • Confidential VM
  • Confidential Space
  • Split-trust encryption tool

Confidential VM は、GCE や GKE などで、オプションボタンひとつで簡単に利用できます。

ただ、論理的に考えて、パフォーマンスに影響を及ぼしてしまいそうに思えます。
公式サイトではこの性能劣化について、以下のように記されていました。

AMD SEV は、要求の厳しい計算タスクに高いパフォーマンスを提供します。 SEV Confidential VM と標準の Compute Engine VM のパフォーマンスの違いは、ワークロードに応じて、まったくない場合もあれば、最小限の場合もあります。

本当だろうか。。。

そこで、実際にできる限りスペックを揃えた環境を準備して、Confidential Computing が性能に与える影響を検証してみたいと思います。

検証

環境構築

ほぼデフォルトのままで、Confidential VM service だけ有効にしてみました。
そのインスタンスに合わせて変更した箇所は以下のあたり。

測定方法

sysbench を使って行いました。

$ sysbench --version
sysbench 1.0.20

測定に使った具体的なコマンドは以下になります。

CPU
$ sysbench cpu run --max-requests=10000 --num-threads=4
Memory
$ sysbench memory run
File I/O
$ sysbench fileio --file-total-size=5G --file-test-mode=rndrw --time=300 --max-requests=0 prepare
$ sysbench fileio --file-total-size=5G --file-test-mode=rndrw --time=300 --max-requests=0 run
$ sysbench fileio --file-total-size=5G --file-test-mode=rndrw --time=300 --max-requests=0 cleanup
Thread
$ sysbench threads --threads=500 --thread-yields=100 --thread-locks=4 run
Mutex
$ sysbench mutex --threads=100 --mutex-num=1000 --mutex-locks=100000 --mutex-loops=10000 run

結果

sysbench の各コマンドは、様々なメトリクスを返してくれますが、視認性のため比較表では、total time [s] のみを抜粋しています。

Test case Metrics non Confidential Confidential 劣化割合
CPU total time [s] 2.4145 2.5066 3.81%
Memory total time [s] 10.0001 10.0001 0.00%
File I/O total time [s] 300.0567 300.1126 0.02%
Thread total time [s] 10.059 10.065 0.06%
Mutex total time [s] 31.3859 41.6316 32.64%

計測は数回行いましたが、いずれも大きな差は発生しませんでした。
この結果から、Mutex 排他制御には 30% ほどの影響が出るようです。
しかし、それ以外の項目では CPU で若干の影響、それ以外の項目では、ほとんど影響がないと言えそうなレベルでした。

Cloud Monitoring 上でも、若干 Confidential VM の方が CPU 消費が多いくらいで、大きな差異は見受けられませんでした。

まとめ

テストケースを変えたり、インスタンスタイプや OS を変えたりはしていないので、検証としては十分とは言えませんが、ある程度実測値を元にした確認をすることができました。
とくにプログラムの変更もなく、性能や費用面への影響も少ない、Confidential VM は機密性の高いワークロードにおいて検討の機会が増えてきそうに思いました。

参考

https://cloud.google.com/confidential-computing/docs/confidential-computing-overview
https://cloud.google.com/confidential-computing/confidential-vm/docs/confidential-vm-overview
https://www.cloudskillsboost.google/paths/15/course_templates/87