このトピックでは、Intel® TDX 対応の Elastic Compute Service (ECS) インスタンス上に Trust Domain Extensions (TDX) 高信頼コンピューティング環境を構築し、インスタンス上で TDX 機能を検証する方法について説明します。
背景情報
Intel® TDX は、CPU ハードウェアベースのテクノロジーであり、ECS インスタンスにハードウェア支援の分離と暗号化を提供して、CPU レジスタ、メモリデータ、割り込みインジェクションなどのランタイムデータを保護します。Intel® TDX は、より高いレベルのデータプライバシーを実現し、実行中のプロセスや処理中の機密データへの不正アクセスに関連するリスクを軽減するのに役立ちます。Intel® TDX の詳細については、「Intel® Trust Domain Extensions (Intel® TDX)」をご参照ください。
Intel® TDX は、ECS インスタンスとアプリケーションにデフォルトですぐに使える保護を提供します。アプリケーションコードを変更することなく、アプリケーションを TDX 対応インスタンスに移行できます。
TDX 対応インスタンスの作成
ECS コンソール
ECS コンソールで TDX 対応インスタンスを作成する手順は、通常のインスタンスを作成する手順と似ています。特定のパラメーターに注意してください。次のセクションでは、TDX 対応インスタンスに固有のパラメーターについて説明します。すべてのインスタンスに共通するその他のパラメーターについては、「カスタム起動タブでインスタンスを作成する」をご参照ください。
ECS コンソール - インスタンスに移動します。
上部のナビゲーションバーで、管理するリソースのリージョンとリソースグループを選択します。

[インスタンスの作成] をクリックし、パラメーターを設定します。次の表にパラメーターを示します。
パラメーター
説明
ネットワークとゾーン
選択したネットワークとゾーンによって、利用可能なインスタンスタイプは異なります。
北京ゾーン I: ecs.g8i.xlarge 以上のインスタンスタイプのみがサポートされます。
北京ゾーン L: ecs.gn8v-tee.4xlarge 以上のインスタンスタイプのみがサポートされます。
シンガポールゾーン B: ecs.g8i.xlarge 以上のインスタンスタイプのみがサポートされます。
インスタンスタイプ
イメージ
[高信頼 VM] を選択し、イメージバージョンとして Alibaba Cloud Linux 3.2104 LTS 64 ビット を選択します。
説明gn8v-tee 関連のインスタンスタイプでは、CPU と GPU の高信頼コンピューティング機能がデフォルトで有効になっており、[高信頼 VM] オプションはありません。

プロンプトに従ってインスタンスを作成します。
API 操作または Alibaba Cloud CLI
RunInstances 操作を呼び出すか、Alibaba Cloud CLI を使用して TDX 対応インスタンスを作成できます。次の表に、関連するパラメーターを示します。
パラメーター | 説明 | 値の例 |
RegionId | 中国 (北京) リージョンを選択します。 | cn-beijing |
ZoneId |
| cn-beijing-i |
InstanceType | ecs.g8i.2xlarge | |
ImageId | TDX をサポートするイメージの ID を指定します。カーネルバージョンが 5.10.134-16.al8.x86_64 以降の Alibaba Cloud Linux 3.2104 LTS 64 ビット Unified Extensible Firmware Interface (UEFI) イメージのみが TDX をサポートします。 | aliyun_3_x64_20G_alibase_20241218.vhd |
SecurityOptions.ConfidentialComputingMode | 高信頼コンピューティングモードを指定します。 説明 gn8v-tee 関連のインスタンスタイプでは、CPU と GPU の高信頼コンピューティング機能がデフォルトで有効になっています。このパラメーターを設定する必要はありません。 | TDX |
Alibaba Cloud CLI を使用して TDX 対応インスタンスを作成する例
aliyun ecs RunInstances \
--SecurityOptions.ConfidentialComputingMode TDX \
--Region cn-beijing \
--ZoneId cn-beijing-i \
--SystemDisk.Category cloud_essd \
--ImageId 'aliyun_3_x64_20G_alibase_20241218.vhd' \
--InstanceType 'ecs.g8i.2xlarge' \
--SecurityGroupId 'sg-[SecurityGroupId]' \
--VSwitchId 'vsw-[VSwitchID]' \
--KeyPairName [KEY_PAIR_NAME] \
手順
ステップ 1: TDX が有効になっているか確認する
ECS インスタンス上に TDX 高信頼コンピューティング環境を構築する前に、インスタンスで TDX が有効になっていることを確認してください。
TDX が有効になっているか確認します。
lscpu |grep -i tdx_guest次のコマンド出力は、TDX が有効になっていることを示します。

TDX ドライバーがインストールされているか確認します。
ls -l /dev/tdx_guest次のコマンド出力は、TDX ドライバーがインストールされていることを示します。

ステップ 2: TDX 高信頼コンピューティング環境を構築する
ほとんどの場合、アプリケーションコードを変更することなく、非 TDX 環境から TDX 環境にアプリケーションを移行できます。通常のインスタンスと同じ方法で TDX 対応インスタンスを使用できます。ECS インスタンスの TDX 保護を最大化するために、次のセクションで説明する機能を使用することをお勧めします。
TDX Report は、TDX 対応インスタンスの ID を表すために CPU ハードウェアによって生成されるデータ構造です。TDX Report には、属性 (ATTRIBUTES)、ランタイム拡張可能メジャーレジスタ (RTMR)、高信頼コンピューティングベース (TCB) セキュリティバージョン番号 (SVN) など、TDX 対応インスタンスに関する重大な情報が含まれています。TDX Report は、暗号化メソッドを使用して情報の完全性を保証します。詳細については、「Intel TDX Module」をご参照ください。
Alibaba Cloud 高信頼コンピューティング用の YUM ソフトウェアリポジトリをインポートします。
YUM ソフトウェアリポジトリのパブリック URL は次のフォーマットです:
https://enclave-[Region-ID].oss-[Region-ID].aliyuncs.com/repo/alinux/enclave-expr.repo。YUM ソフトウェアリポジトリの内部 URL は次のフォーマットです:
https://enclave-[Region-ID].oss-[Region-ID]-internal.aliyuncs.com/repo/alinux/enclave-expr.repo。
上記の URL の [Region-ID] を TDX 対応インスタンスの実際のリージョン ID に置き換えます。TDX 対応インスタンスは中国 (北京) リージョンでのみ作成できます。中国 (北京) リージョンに固有の内部 URL から YUM ソフトウェアリポジトリをインポートするには、次のコマンドを実行します:
region="cn-beijing" sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://enclave-${region}.oss-${region}-internal.aliyuncs.com/repo/alinux/enclave-expr.repoコンパイルツールとサンプルコードをインストールします。
sudo yum groupinstall -y "Development Tools" sudo yum install -y sgxsdk libtdx-attest-develサンプル TDXReportParse コードをコンパイルします。
TDXReportParse ディレクトリにアクセスします。
cd /opt/alibaba/teesdk/intel/sgxsdk/SampleCode/TDXReportParseTDXReportParse をコンパイルします。
sudo make
コンパイルされた実行可能ファイルを実行します。
sudo ./tdx_report_parse次のコマンド出力が返されます。TDX 対応インスタンスが保護されている場合、インスタンスは非デバッグ状態にあり、
attributes行にNO_DEBUGが表示されます。
リモートアテステーションサービスを使用して TDX 機能を検証する
Alibaba Cloud TDX 暗号化環境では、リモートアテステーションサービスを使用して、プラットフォームの信頼性とプラットフォーム上で実行されているコードの完全性および機密性を検証できます。詳細については、「リモートアテステーションサービス」をご参照ください。
プラットフォームは、Alibaba Cloud が使用するハードウェアプラットフォームと仮想化ソフトウェアスタックです。
プラットフォーム上で実行されているコードは、Alibaba Cloud Linux などのオペレーティングシステム、および TDX 対応インスタンスで実行されている NGINX や Java などのアプリケーションです。
TDX リモートアテステーションに必要な依存パッケージをインストールします。
sudo yum install -y gcc gcc-c++ make openssl-devel git jq sudo yum install -y tdx-quote-generation-sample tee-appraisal-tool libsgx-dcap-ql-devel libsgx-dcap-quote-verify-devel libsgx-dcap-default-qpl-devel tdx-quote-verification-sampleAlibaba Cloud TDX リモートアテステーションサービスを設定します。
/etc/sgx_default_qcnl.confファイルでPCCS_URLパラメーターを指定します。PCCS_URL パラメーターは、中国 (北京) リージョンの Distributed Cooperative Access Points (DCAP) サービスを指すようにのみ指定できます。sudo sed -i.$(date "+%m%d%y") 's|PCCS_URL=.*|PCCS_URL=https://sgx-dcap-server.cn-beijing.aliyuncs.com/sgx/certification/v4/|' /etc/sgx_default_qcnl.conftdx-quote-generation-sample ディレクトリにアクセスし、tdx-quote-generation-sample ファイルをコンパイルします。
cd /opt/alibaba/tdx-quote-generation-sample sudo make次のいずれかの操作を実行して、システムがリモートアテステーションレポート (quote とも呼ばれます) を生成できるようにします:
システムが report_data をランダムに生成し、quote を生成できるようにします。
sudo ./appreport_data を指定して quote を生成します。
sudo ./app -d <report_data_in_hex>report_data_in_hexパラメーターは、最大 64 バイト長の 16 進数文字列です。生成された quote に含まれる
report_data_in_hexパラメーターにカスタムデータを指定できます。長さの制限により、
report_data_in_hexパラメーターの値はハッシュ値です。たとえば、report_data_in_hex パラメーターは公開鍵のハッシュ値に設定されます。ハッシュ値は、後続のキーネゴシエーションプロセスで使用できます。
説明コマンド例:
sudo ./app -d 1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef sudo ./app -d $(cat data.dat | xxd -p)
リモートアテステーションレポート (quote) が生成されると、次の図に示すコマンド出力と同様のコマンド出力が返されます。

リモートアテステーションレポート (quote) を検証します。
評価ポリシーを設定して署名します。
重要既知の安全な環境を使用することをお勧めします。本番環境を使用して評価ポリシーを生成しないでください。
評価ポリシーは JSON フォーマットで定義できます。
たとえば、次の評価ポリシーを設定して、TDX 対応 ECS インスタンスが暗号化された非デバッグ状態で実行されているかどうかを検証できます。これは、インスタンスが保護されていることを示します。
また、評価ポリシーに追加のパラメーターを含めて、オペレーティングシステムとアプリケーションの完全性を検証することもできます。評価ポリシーの詳細については、「Intel DCAP Appraisal Engine Developer Guide」をご参照ください。
{ "policy_array":[ { "environment":{ "class_id":"45b734fc-aa4e-4c3d-ad28-e43d08880e68", "description":"Application TD TCB 1.5" }, "reference":{ "tdx_attributes":"0000000010000000", "#NOTE": "0000000010000000 は NO_DEBUG と SPTE_VE_DISABLE を意味します" } } ] }
/opt/alibaba/tdx-quote-verification-sample/Policies/tenant_td_policy.jsonファイルのデフォルトポリシーを使用するか、カスタムポリシーをコンパイルして、後続の検証のためにポリシートークンを使用できます。ポリシートークンは、後続の検証のためにリモートアテステーションレポートを生成する任意の環境に転送できます。cd /opt/alibaba/tdx-quote-verification-sample sudo make Policies/tenant_td_policy.jwtポリシートークンが生成されると、次の図に示すコマンド出力と同様のコマンド出力が返されます。

TDX リモートアテステーションが依存する他のコンポーネントをコンパイルします。
cd /opt/alibaba/tdx-quote-verification-sample sudo make all依存コンポーネントがコンパイルされると、次の図に示すコマンド出力と同様のコマンド出力が返されます。

リモートアテステーションレポート (quote) を検証します。
重要次のコマンドの
<path_to_quote>パラメーターの値を、リモートアテステーションレポート (quote) の実際のパスに置き換えます。例:/opt/alibaba/tdx-quote-generation-sample/quote.dat。Policies/tenant_td_policy.jsonファイルのポリシーに基づいて、リモートアテステーション用に生成された quote が検証され、対応する検証結果が JSON Web トークン (JWT) フォーマットから標準フォーマットに変換されます。./verifier -quote <path_to_quote>次の図に示すコマンド出力と同様のコマンド出力が返されます。

RelyingParty を使用して JWT 署名の ID を検証します。
./verifier -quote <path_to_quote> |./relying_party -v |grep "json payload" |awk -F 'payload:' '{print $2}'|jq次の図に示すコマンド出力と同様のコマンド出力が返されます。コマンド出力では、特定のフィールドのみが表示されます。
説明簡単にするために、
appraisal_resultのoverall_appraisal_resultフィールドをチェックして、証拠が評価ポリシーに準拠しているかどうかを確認できます。./verifier -quote <path_to_quote> |./relying_party -v |grep "json payload" |awk -F 'payload:' '{print $2}'|jq '.[0].result.overall_appraisal_result'さらに、quote の生成時に指定された
report_dataパラメーターも、リモートアテステーションサービスの検証結果に含まれます。report_data の値を使用して、キー交換などのビジネスロジックを実装できます。./verifier -quote <path_to_quote> |./relying_party -v -a|grep "json payload" |awk -F 'payload:' '{print $2}'|jq '.. | .tdx_reportdata? | select(. != null)'[ { "result": { "appraisal_check_date": 1710400829000000000, "nonce": 502551065253582, "certification_data": [ { "certification_data": { "qe_identity_issuer_chain": "LS0t...", "root_ca_crl": "MzA4...", "pck_crl": "LS0t...", "pck_crl_issuer_chain": "LS0t...", "tcb_info": "eyJ0...", "qe_identity": "eyJl...", "tcb_info_issuer_chain": "LS0t..." } } ], "overall_appraisal_result": 1, "appraised_reports": [ { "appraisal_result": 1, "detailed_result": [ { "td_mrownerconfig_check": true, "td_xfam_check": true, "td_mrservicetd_check": true, "td_attributes_check": true, "td_rtmr3_check": true, "td_mrtd_check": true, "td_mrowner_check": true, "td_rtmr0_check": true, "td_mrconfigid_check": true, "td_rtmr1_check": true, "td_rtmr2_check": true } ], "policy": { "environment": { "description": "Application TD TCB 1.5", "class_id": "45b734fc-aa4e-4c3d-ad28-e43d08880e68" }, "signature": "-6C0-...", "reference": { ... }, "signing_key": { "kty": "EC", "crv": "P-384", "alg": "ES384", "y": "CeW8...", "x": "NmSa..." } }, "report": { "environment": { "Description": "Application TD TCB", "class_id": "45b734fc-aa4e-4c3d-ad28-e43d08880e68" }, "measurement": { "tdx_mrownerconfig": "0000...", "tdx_mrservicetd": "3D03...", "tdx_xfam": "00000000000642E7", "tdx_mrtd": "0A40...", "tdx_mrowner": "0000...", "tdx_attributes": "0000000010000000", "tdx_mrconfigid": "0000...", "tdx_reportdata": "D98B...", "tdx_rtmr3": "0000...", "tdx_rtmr2": "0000...", "tdx_rtmr1": "6368...", "tdx_rtmr0": "D0FD..." } } }, { "appraisal_result": 1, "detailed_result": [ { "platform_provider_id_check": true, "sgx_types_check": true, "cached_keys_check": true, "smt_enabled_check": true, "accepted_tcb_level_date_tag_check": true, "advisory_ids_check": true, "expiration_date_check": true, "tcb_eval_num_check": true, "earliest_accepted_tcb_level_date_tag_check": true, "tcb_status_check": true, "dynamic_platform_check": true } ], "policy": { "environment": { "description": "Alibaba Cloud Evaluation Num Policy for TDX Platform", "class_id": "f708b97f-0fb2-4e6b-8b03-8a5bcd1221d3" }, "signature": "l00p...", "reference": { "accepted_tcb_status": [ "UpToDate" ], "allow_dynamic_plaform": true, "min_eval_num": 16 }, "signing_key": { "kty": "EC", "crv": "P-384", "alg": "ES384", "y": "7hlr...", "x": "OSbD..." } }, "report": { "environment": { "description": "TDX Platform TCB", "class_id": "f708b97f-0fb2-4e6b-8b03-8a5bcd1221d3" }, "measurement": { "earliest_issue_date": "2018-05-21T10:45:10Z", "is_cached_keys_policy": true, "fmspc": "90C06F000000", "is_smt_enabled": true, "earliest_expiration_date": "2024-04-02T10:22:51Z", "root_ca_crl_num": 1, "root_key_id": "9309...", "pck_crl_num": 1, "tcb_eval_num": 16, "latest_issue_date": "2024-03-13T15:45:02Z", "tcb_status": [ "UpToDate" ], "tcb_level_date_tag": "2023-08-09T00:00:00Z", "is_dynamic_platform": true, "sgx_types": 1 } } }, { "appraisal_result": 1, "detailed_result": [ { "td_qe_expiration_date_check": true, "td_qe_tcb_eval_num_check": true, "td_qe_earliest_accepted_tcb_level_date_tag_check": true, "td_qe_tcb_status_check": true, "td_qe_accepted_tcb_level_date_tag_check": true } ], "policy": { "environment": { "description": "Alibaba Cloud Num Policy for Verified TDQE", "class_id": "3769258c-75e6-4bc7-8d72-d2b0e224cad2" }, "signature": "l00p...", "reference": { "accepted_tcb_status": [ "UpToDate" ], "min_eval_num": 16 }, "signing_key": { "kty": "EC", "crv": "P-384", "alg": "ES384", "y": "7hlr...", "x": "OSbD..." } }, "report": { "environment": { "Description": "RAW TDX QE Report", "class_id": "3769258c-75e6-4bc7-8d72-d2b0e224cad2" }, "measurement": { "earliest_expiration_date": "2025-05-21T10:50:10Z", "earliest_issue_date": "2018-05-21T10:45:10Z", "root_key_id": "9309...", "tcb_eval_num": 16, "latest_issue_date": "2018-05-21T10:50:10Z", "tcb_status": [ "UpToDate" ], "tcb_level_date_tag": "2023-08-09T00:00:00Z" } } } ] } } ]
既知の問題と機能制限
TDX 対応インスタンスは、CPU ハードウェアベースの暗号化を提供して CPU レジスタとメモリステータスを保護します。その結果、TDX 対応インスタンスの全体的なパフォーマンスに影響が出ます。
RTMR、割り込み保護、およびレジスタ状態の回復の設計上の制限により、インスタンス内から TDX 対応インスタンスを再起動することはできません。TDX 対応インスタンスのオペレーティングシステムで reboot コマンドを実行してインスタンスを再起動することはできません。
Virtual Network Computing (VNC) を使用して TDX 対応インスタンスにログインすることはできません。Workbench やサードパーティクライアントなどのツールを使用して、SSH 経由で TDX 対応インスタンスにログインできます。TDX 対応インスタンスの実行時に生成されたログを取得できます。詳細については、「システムログとスクリーンショットの表示」または「GetInstanceConsoleOutput」をご参照ください。
イメージには次の制限が適用されます:
UEFI イメージのみがサポートされます。
Windows イメージはサポートされていません。
カーネルバージョンが 5.10.134-16.al8.x86_64 以降のイメージがサポートされます。
Elastic Remote Direct Memory Access (eRDMA) とアクセラレータはサポートされていません。
以下の既知の問題は、Linux カーネルの Software Input Output Translation Lookaside Buffer (SWIOTLB) に関連しています:
TDX 対応インスタンスで使用可能なメモリ量は、通常のインスタンスで使用可能なメモリ量よりも少なくなります。TDX 対応インスタンスは、周辺機器との通信のために、SWIOTLB と呼ばれる特定の領域を暗号化されていないメモリで使用します。デフォルトでは、SWIOTLB は TDX 対応インスタンスの利用可能な総メモリの 6% を消費し、サイズは 1 GiB を超えません。
large インスタンスタイプの TDX 対応インスタンスに複数の Elastic Network Interface (ENI) をバインドすると、ネットワークインターフェースコントローラー (NIC) のマルチキューシナリオで SWIOTLB が不足してメモリ割り当てに失敗した場合にインスタンスがフリーズすることがあります。ECS コンソールで TDX 対応インスタンスを停止し、インスタンスから ENI のバインドを解除してインスタンスを回復できます。
インスタンスのワークロードに大量の I/O 操作が含まれている場合、SWIOTLB が不足しているために TDX 対応インスタンスのパフォーマンスが低下することがあります。次のコマンドを実行して、上記の問題が存在するかどうかを確認できます:
dmesg| grep 'swiotlb buffer is full'重要SWIOTLB 関連のパラメーター設定が正しくないと、インスタンスの起動に失敗する可能性があります。エラー発生時のデータロールバックを容易にするために、続行する前にインスタンス上のディスクのスナップショットを作成することをお勧めします。詳細については、「手動でのスナップショットの作成」をご参照ください。
上記の問題が存在する場合、次の手順を実行して SWIOTLB サイズを増やすことで、インスタンスのパフォーマンスを向上させることができます:
SWIOTLB サイズを 1 GiB に変更します。
grubby --update-kernel=ALL --args=swiotlb=524288カーネルバージョンが
5.10.134-18.al8.x86_64より後の場合は、anyパラメーターを追加して、より大きな SWIOTLB をサポートできます。例:grubby --update-kernel=ALL --args=swiotlb=2097152,any # SWIOTLB サイズを 4 GiB に変更します。説明SWIOTLB パラメーターの値は、次の数式を使用して計算できます: 必要な SWIOTLB サイズ (MiB) × 512。詳細については、「カーネルのコマンドラインパラメーター」をご参照ください。