このトピックでは、Enclave 機能を使用してアプリケーションとデータを保護することにより、信頼できる分離スペースを作成する方法について説明します。
背景情報
一般的に、データは、保存データ、転送中のデータ、使用中のデータの 3 つの状態に分類されます。 暗号化を使用することで、保管中のデータと転送中のデータを保護できます。 ただし、使用中のデータのセキュリティを確保するのが難しい場合があります。 通常、機密コンピューティングは、使用中のデータを保護するために使用されます。
エンクレーブ機能は、Elastic Compute Service (ECS) インスタンス内の信頼できる分離スペースとしてエンクレーブを提供し、エンクレーブ内の合法的なソフトウェアの安全な操作をカプセル化します。 これにより、マルウェア攻撃に対するコードとデータの機密性と整合性が保証されます。
Enclave 機能は、現在招待制プレビュー中です。 この機能を使用するには、 チケットを起票してください。
エンクレーブ機能は、機密データや機密データの強力な保護を必要とする金融、インターネット、ヘルスケアなどの業界のビジネスに適しています。
Enclave の動作
vCPU およびメモリなどのコンピューティングリソースが ECS インスタンス (プライマリ VM) 内で分離され、Enclave VM (EVM) が信頼できる実行環境として作成されます。 EVM のセキュリティは、以下の側面で保証されます。
基礎となる仮想化技術は、セキュリティの分離を提供する。 EVMは、プライマリVMおよび他のECSインスタンスから分離されます。
EVMは、独立し、カスタマイズされた、信頼できるオペレーティングシステムを実行します。 EVMには、永続的なストレージ、対話型接続、または外部ネットワークチャネルがなく、ローカルのセキュアチャネル (vsockに基づく) を使用することによってのみプライマリVMと通信して、攻撃対象を最小限に抑えることができます。 EVMで機密データを含むアプリケーションを実行し、プライマリVM内で実行されるアプリケーションと対話するための安全な呼び出しを行うことができます。
エンクレーブ機能によって提供されるセキュリティは、複数の態様で実装される。 下層では、Trusted Platform Module (TPM) またはTrust Cryptography Module (TCM) チップを使用する第3世代SHENLONGアーキテクチャが、セキュリティと信頼できる機能を強化するためにEVMにvTPMまたはvTCMデバイスを提供します。 上位レイヤーには互換性の高いSDKが用意されており、Enclave環境をすばやく構築して使用できます。 信頼できる機能の検証は、SDK などを使用して機密実行環境で実行されているコードを検証できます。 機密アプリケーションは、実行時に証明資料 (プラットフォーム情報、アプリケーション情報、署名を含む) を生成し、リモート証明サーバー (KMSを参照) を使用して証明資料を検証できます。 プライマリ VM がリソースを EVM に分割し、EVM の実行が開始されると、分割された vCPU またはメモリリソースにプライマリ VM からアクセスできないよう、基盤となるレイヤーがリソースアクセス分離を実行します。 この方法により、EVM の正常な動作とプライバシーが保証されます。
制限事項
エンクレーブ機能をサポートしているのは、g7、c7、およびr7インスタンスファミリーのみです。
ECSインスタンスごとに作成できるエンクレーブは1つだけです。
エンクレーブを使用する前に、プライマリVM用に少なくとも1つのプロセッサコアとメモリの一部を予約する必要があります。残りのプロセッサおよびメモリリソースは、エンクレーブに柔軟に割り当てることができる。 Hyper-Threadingを有効にすると、1つの物理コアに属する2つのハイパースレッドが予約されます。 したがって、エンクレーブ機能が有効になっているECSインスタンスには、少なくとも4つのvCPUが必要です。
その他の一般的な制限については、「制限」をご参照ください。
ツールセットによるエンクレーブの使用
Enclave Runtimeツールセットをインストールします。
Enclave Runtime ツールセットは、エンクレーブの起動と終了を含む、プライマリ VM 上のエンクレーブのライフサイクルを管理するものです。 以下のいずれかの方法を使用して、Enclave Runtime ツールセットをインストールできます。
ECSインスタンスを作成するときは、[エンクレーブ] を選択します。 Enclave Runtime ツールセットが自動的にインストールされます。
説明API操作を呼び出してEnclave機密コンピューティング環境がデプロイされているECSインスタンスを作成する場合、RunInstances操作のみを呼び出すことができます。 CreateInstance操作を呼び出すときに、機密コンピューティングモードパラメーター (
SecurityOptions.ConfidentialComputingMode
) を設定できません。ECSインスタンスが作成されたら、次のコマンドを実行して、Enclave RuntimeツールセットをプライマリVMにインストールします。
sudo rpmkeys --import http://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-7 sudo yum install -y alinux-release-experimentals sudo yum install -y https://enclave.oss-cn-hangzhou.aliyuncs.com/de-platform-runtime-0.1.0-1.2.al7.x86_64.rpm
Enclave Runtimeツールセットのインストール後、ローカルサービスはエンクレーブの開始を試みます。 デフォルトでは、エンクレーブのイメージは /usr/local/share/dragonfly/image.bin に保存されます。 設定ファイル /etc/enclave.conf を変更して、ストレージパスを変更できます。 構成ファイルには、エンクレーブに割り当てられたvCPUやメモリリソースなど、追加の構成オプションもあります。
Enclave Runtimeツールセットを初めてインストールするときに、次のコマンドを実行してエンクレーブイメージをダウンロードし、イメージをコンピューターに保存します。
wget -O /usr/local/share/dragonfly/image.bin \ https://enclave-cn-shenzhen.oss-cn-shenzhen.aliyuncs.com/download/linux/enclave_image/x86_64/0.1.0/image-0.1.0.bin
systemctlコマンドを実行して、エンクレーブで操作を実行します。
systemctl status de_platform_service # View the running status. systemctl start de_platform_service # Start the service. systemctl restart de_platform_service # Restart the service. systemctl stop de_platform_service # Stop the service.
SDKによるエンクレーブの使用
Alibaba Cloud Enclave では、Enclave が有効な ECS インスタンスで独自のアプリケーションを開発するための SDK が提供されます。 また、SGX SDKと互換性のある一連の API 定義およびコードライブラリも提供されます。 既に SGX アプリケーションを使用している場合は、わずかな変更でエンクレーブが有効なプラットフォームでアプリケーションを実行できます。
開発環境で次のDockerfileファイルを準備します。
FROM registry.cn-hangzhou.aliyuncs.com/alinux/aliyunlinux RUN rpmkeys --import http://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-7 \ && yum install -y alinux-release-experimentals \ && yum install -y devtoolset-9 wget openssl-devel zlib-devel patch git cmake3 \ https://enclave.oss-cn-hangzhou.aliyuncs.com/de-platform-runtime-0.1.0-1.2.al7.x86_64.rpm \ https://enclave.oss-cn-hangzhou.aliyuncs.com/teesdk-0.1.0-1.1.al7.x86_64.rpm \ && yum clean all -y \ && wget -O /devtoolset9_enable.sh \ https://enclave.oss-cn-hangzhou.aliyuncs.com/devtoolset9_enable.sh \ && chmod +x /devtoolset9_enable.sh WORKDIR /opt/app-root/src ENTRYPOINT ["/devtoolset9_enable.sh"]
次のコマンドを実行して、Dockerを使用してエンクレーブイメージを作成します。
docker build -t deenclave/sdk-builder .
コマンドを実行すると、deenclave/sdk-builderという名前のイメージが作成されます。 このイメージを使用して、DE Enclaveアプリケーションを構築できます。 Alibaba Cloud では、参考用として以下のような SDK の例 を用意しています。
SDKの例 1:コンテナーを起動してアプリケーションをビルドする
Alibaba Cloud の SDK サンプルプログラムは /opt/alibaba/teesdk/desdk/examples/SampleMath に用意されています。 このサンプルプログラムは、外部から入力された 2 つの平面座標点を受け取り、エンクレーブ内で 2 つの点の間の直線距離を計算し、計算結果をコンソールに送信します。 次の操作を実行します。
次のコマンドを実行して、作成したdeenclave/sdk-builderイメージを使用してコンテナを起動します。
docker run -it \ -v /opt/alibaba/teesdk/desdk/examples/SampleMath:/opt/app-root/src:z \ deenclave/sdk-builder
次のコマンドを実行して、開始したコンテナインスタンス内の環境変数を設定します。
source /opt/alibaba/teesdk/desdk/environment
cmakeコマンドを実行して、開始されたコンテナー内にサンプルコードをビルドします。
cmake3 -B build && \ cmake3 --build build
アプリケーションは /opt/app-root/src/build/SampleMath/App/app に、エンクレーブは /opt/app-root/src/build/SampleMath/Enclave/enclave.signed.soにあります。
プライマリVMにアプリケーションをアップロードします。
プライマリVMでエンクレーブを起動し、サンプルコードSampleMathを実行して、実行結果を確認します。
[root@AliYun ~]# ./app A(3,4) -> B(1,8) -> 4.47214 A(6,9) -> B(6,2) -> 7 A(3,3) -> B(7,5) -> 4.47214
SDK の例 2:Attestation を使用して認証資料を作成する
Attestation は、エンクレーブで実行されているイメージ、オペレーティングシステム、およびアプリケーションコードが変更または改ざんされていないことを確認できる認証プロセスです。 Enclave アプリケーションコードで SDK に用意された API を呼び出して認証資料を生成し、検証のために認証資料をリモート認証サーバーにアップロードできます。 リモート認証サーバーは検証結果を返します。
Alibaba Cloud では、以下のようなサンプルプログラムを用意しています。 これらのサンプルプログラムは、SDKの例1でSampleMathを実行するのと同じ方法でビルドして実行できます。
認証資料を生成するためのサンプルプログラムは /opt/alibaba/teesdk/desdk/examples/QuoteGenerationSample に用意されています。
証明材料を検証するためのサンプルプログラムは /opt/alibaba/teesdk/desdk/examples/QuoteVerificationSample に用意されています。