ECS インスタンスで Intel® TDX をセットアップし、リモートアテステーションのサンプルコードを使用して検証します。
背景情報
Intel® TDX は、ECS インスタンス向けのハードウェアベースの保護技術です。TDX インスタンスでは、CPU レジスタ、メモリデータ、割り込み処理、およびその他のランタイム状態が CPU ハードウェアによって機密に保護されます。クラウドプロバイダーも外部の攻撃者も、実行中のプロセスや計算中の機密データなど、TDX インスタンスの内部ランタイム状態を監視または改ざんすることはできません。詳細については、「Intel® Trusted Domain Extension (Intel® TDX)」をご参照ください。
Intel® TDX は、デフォルトでインスタンスとアプリケーションを保護します。既存のアプリケーションは、再開発することなく TDX インスタンスに移行できます。
前提条件
コンソール
TDX インスタンスの作成は、標準インスタンスの作成と似ています。ここでは、TDX 固有の設定についてのみ説明します。一般的な設定については、「インスタンスのカスタム作成」をご参照ください。
ECS コンソール - インスタンスに移動します。
上部メニューで、対象リソースのリージョンとリソースグループを選択します。
-
インスタンスの作成 をクリックし、次のパラメーターを設定します。
パラメーター
説明
リージョンとゾーン
サポートされているリージョンとゾーンは、インスタンスタイプによって異なります。詳細については、「サポートされているリージョン、インスタンスタイプ、イメージ」をご参照ください。
この例では、中国 (北京) ゾーン I と ecs.g8i.2xlarge を使用します。
インスタンスタイプ
イメージ
機密 VM チェックボックスをオンにし、Alibaba Cloud Linux 3.2104 LTS 64 ビット イメージを選択します。

-
残りの設定を完了して、インスタンスを作成します。
CLI と API
RunInstances API を呼び出すか、Alibaba Cloud CLI を使用して、TDX が有効な ECS インスタンスを作成します。次のパラメーターを設定します。
|
パラメーター |
説明 |
例 |
|
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 ビット UEFI イメージのみがサポートされています。 |
aliyun_3_x64_20G_alibase_20240318.vhd |
|
SecurityOptions.ConfidentialComputingMode |
コンフィデンシャルコンピューティングモード。 |
TDX |
CLI の例
aliyun ecs RunInstances \
--SecurityOptions.ConfidentialComputingMode TDX \
--Region cn-beijing \
--ZoneId cn-beijing-i \
--SystemDisk.Category cloud_essd \
--ImageId 'aliyun_3_x64_20G_alibase_20240318.vhd' \
--InstanceType 'ecs.g8i.2xlarge' \
--SecurityGroupId 'sg-<YourSecurityGroupId>' \
--VSwitchId 'vsw-<YourVSwitchId>' \
--KeyPairName <YourKeyPairName> \
手順
手順 1:TDX が有効になっていることの確認
続行する前に、インスタンスで TDX が有効になっていることを確認してください。
-
TDX が有効になっているか確認します。
lscpu | grep -i tdx_guest出力に
tdx_guestが含まれている場合、 TDX は有効です。
-
TDX ドライバーがインストールされているか確認します。
ls -l /dev/tdx_guest出力に /dev/tdx_guest が含まれている場合、TDX ドライバーがインストールされています。

手順 2:TDX 環境の構築
ほとんどのアプリケーションは、再開発なしで TDX インスタンスに移行できます。TDX のセキュリティを最大限に活用するには、以下で説明する機能を使用してください。
TDX レポートは、TDX インスタンスの ID を表す CPU が生成するデータ構造です。これには、ATTRIBUTES、Runtime-extendable Measurement Registers (RTMRs)、Trusted Computing Base Security Version Numbers (TCB SVNs) などのキー情報が含まれており、暗号化方式を使用してその整合性を保護します。詳細については、「Intel TDX Module」をご参照ください。
-
Alibaba Cloud コンフィデンシャルコンピューティングの yum リポジトリを追加します。
-
パブリックエンドポイントのフォーマット:
https://enclave-[Region-ID].oss-[Region-ID].aliyuncs.com/repo/alinux/enclave-expr.repo。 -
VPC エンドポイントの形式:
https://enclave-[Region-ID].oss-[Region-ID]-internal.aliyuncs.com/repo/alinux/enclave-expr.repo。[Region-ID] を TDX インスタンスのリージョン ID に置き換えます。次の例では、インスタンスメタデータを使用してリージョン ID を動的に取得します。
token=$(curl -s -X PUT -H "X-aliyun-ecs-metadata-token-ttl-seconds: 5" "http://100.100.100.200/latest/api/token") region_id=$(curl -s -H "X-aliyun-ecs-metadata-token: $token" http://100.100.100.200/latest/meta-data/region-id) sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://enclave-${region_id}.oss-${region_id}-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/TDXReportParse -
TDXReportParse をビルドします。
sudo make
-
-
コンパイルされた実行可能ファイルを実行します。
sudo ./tdx_report_parseattributesフィールドのNO_DEBUGは、非デバッグモード(セキュアモード)を示します。
TDX リモートアテステーションの検証
Alibaba Cloud TDX 環境では、リモートアテステーションによってプラットフォームの信頼性と、その上で実行されるコードの整合性および機密性が検証されます。詳細については、「リモートアテステーションサービス」をご参照ください。
-
プラットフォーム:Alibaba Cloud が使用するハードウェアおよび仮想化スタック。
-
プラットフォームで実行されるコード:TDX 環境内のオペレーティングシステム (Alibaba Cloud Linux など) およびアプリケーション (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-sample -
Alibaba Cloud TDX リモートアテステーションサービスを設定します。
/etc/sgx_default_qcnl.confでPCCS_URLを設定します。次の例では、インスタンスメタデータを使用してリージョン ID を動的に取得し、DCAP サービスを設定します:token=$(curl -s -X PUT -H "X-aliyun-ecs-metadata-token-ttl-seconds: 5" "http://100.100.100.200/latest/api/token") region_id=$(curl -s -H "X-aliyun-ecs-metadata-token: $token" http://100.100.100.200/latest/meta-data/region-id) sudo sed -i.$(date "+%m%d%y") 's|PCCS_URL=.*|PCCS_URL=https://sgx-dcap-server.${region_id}.aliyuncs.com/sgx/certification/v4/|' /etc/sgx_default_qcnl.conf -
tdx-quote-generation-sample ディレクトリに移動し、アプリケーションをビルドします。
cd /opt/alibaba/tdx-quote-generation-sample sudo make -
クォートを生成します。
-
ランダムに
report_dataを生成し、見積もりを発行します:sudo ./app -
report_dataを指定し、見積もりを発行します:sudo ./app -d <report_data_in_hex>-
<report_data_in_hex>は、64 バイトの 16 進数文字列です。 -
report_data_in_hex内のカスタムデータは、生成されたクォートに含まれます。 -
report_data_in_hexは、長さが限られているため、通常は鍵合意のための公開鍵ハッシュなどのハッシュ値です。
説明例:
sudo ./app -d 1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef sudo ./app -d $(cat data.dat | xxd -p) -
同様の出力が返された場合、クォートが生成されたことを示します。

-
-
クォートを検証します。
-
評価ポリシーを設定して署名します。
重要この操作は、本番環境ではなく、信頼できる安全な環境で実行してください。
セキュリティ評価ポリシーを JSON 形式で定義します。
-
たとえば、次のポリシーは、TDX ECS インスタンスが暗号化された非デバッグ可能な状態 (セキュアモード) で実行されていることを検証します。
-
OS とアプリケーションの整合性を検証するためのパラメーターを追加することもできます。詳細については、「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同様の出力が返された場合、コンポーネントがビルドされたことを示します。

-
クォートを検証します。
重要<path_to_quote>を/opt/alibaba/tdx-quote-generation-sample/quote.datなどの実際のクォートパスに置き換えます。-
クォートを
Policies/tenant_td_policy.json内のポリシーと照合して検証します。結果は JWT として標準出力に出力されます。./verifier -quote <path_to_quote>出力例:

-
リライングパーティを使用して JWT 署名を検証します。
./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' -
クォート生成時に指定された
report_dataは、検証結果 ([tdx_reportdata] フィールド) にも表示されます。この値は、鍵交換などのビジネスロジックに使用します。./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" } } } ] } } ] -
-
-
サポートされているリージョン、インスタンスタイプ、イメージ
リージョンとインスタンスタイプの制限事項
コンフィデンシャルコンピューティングは特定のゾーンでのみ利用可能です。サポートされているインスタンスタイプはゾーンによって異なります。
|
リージョンとゾーン |
インスタンスタイプ |
|
中国 (北京) ゾーン L |
ecs.g8i.xlarge 以降 |
|
中国 (北京) ゾーン I |
|
|
中国 (杭州) ゾーン J |
ecs.r9i.xlarge 以降 |
|
中国 (香港) ゾーン B |
ecs.g8i.xlarge 以降 |
|
中国 (香港) ゾーン C |
ecs.g8i.xlarge 以降 |
|
中国 (香港) ゾーン D |
ecs.g8i.xlarge 以降 |
|
シンガポール ゾーン B |
ecs.g8i.xlarge 以降 |
イメージ
Alibaba Cloud Linux 3 を使用することをお勧めします。
-
Debian13.1以降: Debian 13.1、 Debian 13.2、 Debian 13.3。 -
Rocky9.5以降: Rocky 9.5、 Rocky 9.6、 Rocky 9.7、 Rocky 10.0、 Rocky 10.1。 -
Ubuntu24.04以降:Ubuntu 24.04. -
Alibaba Cloud Linux3以降:Alibaba Cloud Linux 3、Alibaba Cloud Linux 4。
制限事項
-
CPU レジスタとメモリデータが CPU ハードウェアによって暗号化されるため、TDX インスタンスのパフォーマンスは通常のインスタンスよりも低い場合があります。
-
RTMR リセット、割り込み保護、およびレジスタ状態の回復のため、TDX インスタンスは OS 内での再起動をサポートしていません。OS 内で
rebootコマンドを実行することはできません。 -
VNC ログオンはサポートされていません。代わりに、Workbench またはサードパーティのクライアント経由で SSH を使用してください。ランタイムログについては、「インスタンスのシステムログとスクリーンショットの表示」または「GetInstanceConsoleOutput」をご参照ください。
-
イメージの制限事項:
-
UEFI イメージのみがサポートされています。
-
Windows はサポートされていません。
-
カーネルバージョンが古いイメージはサポートされていません。カーネルバージョンは 5.10.134-16.al8.x86_64 以降である必要があります。
-
-
eRDMA およびさまざまな種類のアクセラレーターはサポートされていません。
-
Linux ゲストカーネルの SWIOTLB バッファに関する既知の問題:
-
OS から見えるメモリは、通常のインスタンスよりも少なくなります。TDX インスタンスは、周辺機器との通信のために暗号化されていないメモリ (SWIOTLB) を予約します。デフォルトでは、この領域は利用可能なメモリの 6% で、最大 1 GiB です。
-
マルチキューネットワークカードのシナリオで SWIOTLB メモリが不足しているため、大規模なインスタンスに複数の Elastic Network Interface (ENI) をアタッチするとクラッシュする可能性があります。コンソールでインスタンスを停止し、ENI をデタッチして回復してください。
-
高 I/O ワークロードでは、SWIOTLB の不足によりパフォーマンスが低下する可能性があります。次のコマンドで確認してください。
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より後のカーネルバージョンでは、より大きな SWIOTLB サイズをサポートするためにanyパラメーターを追加します:grubby --update-kernel=ALL --args=swiotlb=2097152,any # SWIOTLB を 4 GiB に設定します。説明SWIOTLB パラメーター値は、ターゲットサイズ (MiB 単位) × 512 で計算します。詳細については、「The kernel's command-line parameters」をご参照ください。
-
-