LinuxユーザーがイジるはじめてのAzure

LinuxユーザーがAzureを使いこなせるように応援するブログです

【これ何?】Azure Confidential Computing

ども。

 

今回のブログ記事はちょっと今までと趣向が変わり、「これ何?」シリーズの記事にしました。Linuxユーザーかどうかはあまり関係なく、Azureのサービスでこれ何?どんな感じ?というものが出てきた時にさらっと読んで理解しましょう、という趣向で記載しています。

 

まず、タイトルにあるAzure Confidential Computingですが、名前からして何だか機密性の高いコンピューティングの技術なんだろうな、というのは想像できるけど、正直オフィシャルサイトを読んでもさっぱり理解できねぇんだが!という状況かと思います。(読んで理解できた人はこのブログ読まなくてもよいですw)

 

「オフィシャルサイト:念のため」

Azure Confidential Computing の概要 | Microsoft Docs

 

ちなみにですが、Confidential ComputingってのはIntel SGXというプロセッサがTEEを使って隔離空間を作りだして、、、とか、AMD SEV/SEV-SNPのプロセッサの場合は仮想マシンをハイパーバイザ配下から機密性を保持して、、、みたいな説明を記載したところでチンプンカンプンになること間違いないので、そういう難しい技術を難しい説明で伝えるつもりはありません!

 

というかブログを読みに来た人の多くは、なんかセキュリティを高める技術なんだろうけど、使えるの?どう使うの?何がうれしいの?安いの?ぐらいしか興味がないと思いますので、その観点で記載します。

 

では始めます。

 

【そもそも何なん?】

Azure Confidential Computingというのは抽象化されたサービス名となってまして、実態としては4つある技術を総称しています。

 

1,Enclaves(えんくれーぶ、と呼ばれるOS内の隔離空間をそう呼んでいる)

2,Confidential VMs(VM丸ごと隔離空間にするぜ、というもの)

3,Confidential Container(aksのコンテナノード丸ごと、コンテナ内の一部の処理をEnclavesする、の2種類)

4、Confidential Services(上記機密性を維持した環境と連携可能なサービス)

 

【それって使えるの?】

まず1のエンクレーブですが、Intel SGXというIntel社が出している特別なプロセッサを使わないと使えない技術です。なので、どのAzure VMのSkuであっても利用できるものではありません。利用するにはDCsv2 or DCsv3 or DCdsv3 のいずれかのVMサイズを選択した場合のみ利用できます。この技術そのものはむかーしからOSSでもありますが、専用のSDKで実装したアプリケーションを、OS内のメモリ空間に機密性の高いエンクレーブという空間を用意して処理を行う、というものです。このエンクレーブの環境をTEE(Trusted Execution Environment)という技術を使って機密性を高く実現させている、というものです。ちなみに日本では現時点で東日本リージョンしか対応していません。

 

2は、VMそのものを丸ごと機密性の高いプロセッサを使った環境で保護されているよ、というものです。こちらもどのAzure VMのSkuでも使えるものではなく、DCasv5,DCadsv5,ECasv5,ECadsv5のいずれかのVMサイズを選択した場合にのみ利用できます。1のエンクレーブとは異なり、仮想マシンそのものを保護するAMDの技術ですが、Confidential VMを立てたからといって、何か特別なVM操作は必要なく、普通のVMと同じように扱えます。sshやRDPでのログインなども普通にできますし、OS DiskそのものもConfidential VMの仲間としてディスクも機密性高く保護されています。こちらも日本では現時点で東日本リージョンしか対応していません。

 

3は、1のエンクレーブで丸ごと保護されたコンテナノードを作れますよ(Confidential Container)、コンテナ内でエンクレーブを利用することもできますよ(Enclaves-aware Container)、というものです。主にAKSを利用されている場合に、コンテナとしてConfidential Computingに対応したものがほしい時に使います。こちらもどのAzure VMのSkuでも使えるものではなく、エンクレーブと同じくDCsv2 or DCsv3 or DCdsv3のSkuを選んだVMの中でコンテナを丸ごと保護するか、コンテナ内でエンクレーブ環境を用意するか、という使い方になります。1と同じく東日本リージョンのみ現時点では対応しています。

 

4は、平たく言うと周辺サービスですが、現時点ではSQL Database(SQL DB Alaways Encrypted with enclaves)とConfidential Ledger(blockchainのやつ) の2つのみ、データストアとして連携できるよ、というものになっています。いかにConfidential VMやエンクレーブで機密化した環境で実装しようとも、結局データそのものを配置するストレージ空間もIntel SGXやAMDといった特別なプロセッサで対応された環境でないといけないため、これら2つ用意しておいたよ、というものです。なのでConfidential Computingの中で連携できるサービスや機能だよ、という代物ですね。

 

【どう使うの?】※3と4は長くなりそうなので割愛

1のエンクレーブについてはIntel SGXに対応したAzure VMのSkuを選択し、その中でSDKを展開した実装して使います。対応しているSDKは以下です。

ダウンロードやインストールなどはオフィシャルサイトからリンクされているので、そちらを参考にしましょう。

Azure のコンフィデンシャル コンピューティング開発ツール | Microsoft Docs

 

2のConfidential VMについては何も考える必要はないです。前述した通り、DCasv5,DCadsv5,ECasv5,ECadsv5のいずれかのVMサイズを選択して、普段通りAzure Portalからデプロイすれば作成できます。(Portalではこのサイズを選択すると、Confidentail VMとして利用するかどうかのチェックボックスや選択フィールドが出てくるので、そこを選んで作成しましょう)

 

【何がうれしいの?】

1ですが、このエンクレーブの空間は機密性が高いため、アプリケーションが実行されているメモリ空間に対して、例えば管理者がgdbgcoreなどを使ってメモリダンプをしようとしても、出力が全て「?????」で埋め尽くされる、というガードが強くかかっているものです。なのでアプリケーションだけが内部的な処理をエンクレーブ内では平文でやっているけど、アプリケーション以外からは一切中身が見えない、わからない、というものです。VM管理者やOS管理者は内部の人間だけど、性悪説にのっとり内部犯そのものも物理的に防御する対策を講じたい、といった場合にうれしいものです。

 

2は、そもそもユーザー側でその恩恵を感じ取ることはまずないでしょう。なぜならこの技術はAMDを利用したHW上で展開した仮想マシンが物理的に機密化されている、というもののため、その仮想マシンを利用しているユーザー側の恩恵はありません。唯一あるのが、提供元である事業者や提供されているプラットフォームの管理者すら「信用しない!」と定めた場合です。つまりAzureっつっても、結局仮想基盤やハードウェアを管理しているマイクロソフトのエンジニアからしたら、うちらの仮想マシンも中身を覗くこともできちゃうよね?といった契約や紳士協定だけでは納得できない危篤高尚な方にとっては安心できる環境かもしれません。

 

【で、安いの?】

値段がネックで利用を見合わせる場合は買うべし、値段以外がネックで利用を見合わせる場合は買うな、っとどっかの偉い人が名言を出していたような記憶がありますが、ぶっちゃけ高いです。vCPUの数にもよりますが、同等のスペックで一般のVMサイズと比較すると約5倍程します。暗号化という技術そのものは本来高いものですが、今回のように専用のプロセッサを利用しないと実現できないような特殊な技術であればあるほど安くはない、っとお考えいただいた方がよいかと思います。

 

最後に。

実用性についてですが、正直Azure環境で本番展開するにはまだまだ発展途上な感じが否めない状況です。例えばAzure BackupやAzure Site Recovery、VMSSなどにもまだ対応できておらず、スポットVMエフェメラルディスク、高速ネットワーク、ライブマイグレーション、共有ディスク、ウルトラディスクなどにも対応はできていません。また、当たり前ですが、Confidential Computingのサービスを利用したからといって100%安全です!っていうわけではありません。そもそも通信経路が暗号化されているか、通信先のデータのセキュリティは担保できているか、しかるべき権限のみアクセス可能な状態か、MFAといった本人確認の対策を多層で管理されているか、ネットワーク層でのアクセス制御、ミドルウェア層でのOS内脆弱性防御、データ層での監査フローなどなど、セキュリティ対策とは各レイヤにおいて、対象とするリスクと効果を把握した上で自社にとって最低限必要な仕掛けを予算と鑑みながら展開していくものです。最新のプロセッサ技術を使って高い金払っているからもう安心だぜ!なんてことは絶対ありませんのでご注意ください。

 

この記事を最後まで読んでいただいた方はもうお分かりですね、OS内管理者やVM管理者ですらアクセスできない隔離空間を使った実装をしたい、(カード情報や個人情報、最重要機密情報などを扱う処理部分のみ適用する、など)または、提供されるプラットフォームや事業者に問わず、どこであったとしても我々利用者しか中身が管理できる自社のスタンス/ポリシーを維持する必要がある、こういったケースにのみ、Confidential Computingを利用してみようか、っと検討の素性にあがるものです。