すべてのプロダクト
Search
ドキュメントセンター

Elastic Compute Service:TDX 機密コンピューティング環境の構築

最終更新日:Mar 14, 2025

このトピックでは、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 コンソールで TDX 対応インスタンスを作成する

ECS コンソールで TDX 対応インスタンスを作成する手順は、通常のインスタンスを作成する手順と似ています。 特定のパラメータに注意してください。 次のセクションでは、TDX 対応インスタンスに固有のパラメータについて説明します。 すべてのインスタンスに共通のその他のパラメータについては、「カスタム起動タブでインスタンスを作成する」をご参照ください。

  1. ECS コンソール にログインします。

  2. 左側のナビゲーションウィンドウで、[インスタンスとイメージ] > [インスタンス] を選択します。

  3. 上部のナビゲーションバーで、リソースが属するリージョンとリソースグループを選択します。地域

  4. [インスタンスの作成] をクリックし、パラメータを設定します。 次の表でパラメータについて説明します。

    パラメータ

    説明

    ネットワークとゾーン

    使用可能なインスタンスタイプは、選択したネットワークとゾーンによって異なります。

    [北京ゾーン I]:ecs.g8i.xlarge 以上のインスタンスタイプのみがサポートされています。

    インスタンスタイプ

    イメージ

    イメージバージョンとして [alibaba Cloud Linux 3.2104 LTS 64 ビット] を選択し、[機密 VM] を選択します。

    image

  5. プロンプトに従ってインスタンスを作成します。

API 操作の呼び出しまたは Alibaba Cloud CLI を使用して TDX 対応インスタンスを作成する

RunInstances 操作を呼び出すか、Alibaba Cloud CLI を使用して、TDX 対応インスタンスを作成できます。 次の表で関連パラメータについて説明します。

パラメータ

説明

値の例

RegionId

中国 (北京) リージョンを選択します。

cn-beijing

ZoneId

北京ゾーン I を選択します。 ecs.g8i.xlarge 以上のインスタンスタイプを選択します。

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

機密コンピューティングモードを指定します。

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 が有効になっていることを確認してください。

  1. TDX が有効になっているかどうかを確認します。

    lscpu |grep -i tdx_guest

    次のコマンド出力は、TDX が有効になっていることを示しています。tdx-install

  2. TDX ドライバーがインストールされているかどうかを確認します。

    ls -l /dev/tdx_guest

    次のコマンド出力は、TDX ドライバーがインストールされていることを示しています。image

ステップ 2:TDX 機密コンピューティング環境を構築する

説明

ほとんどの場合、アプリケーションコードを変更することなく、アプリケーションを非 TDX 環境から TDX 環境に移行できます。 通常のインスタンスを使用するのと同じ方法で、TDX 対応インスタンスを使用できます。 ECS インスタンスの TDX 保護を最大限に高めるために、以下のセクションで説明する機能を使用することをお勧めします。

TDX レポートは、TDX 対応インスタンスの ID を表すために CPU ハードウェアによって生成されるデータ構造です。 TDX レポートには、属性 (ATTRIBUTES)ランタイム拡張測定レジスタ (RTMR)Trusted Computing Base (TCB) セキュリティバージョン番号 (SVN) など、TDX 対応インスタンスに関する重要な情報が含まれています。 TDX レポートは、暗号化方式を使用して情報の整合性を確保します。 詳細については、「Intel TDX モジュール」をご参照ください。

  1. 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
  2. コンパイルツールとサンプルコードをインストールします。

    sudo yum groupinstall -y "Development Tools"
    sudo yum install -y sgxsdk libtdx-attest-devel
  3. サンプルの TDXReportParse コードをコンパイルします。

    1. TDXReportParse ディレクトリにアクセスします。

      cd /opt/alibaba/teesdk/intel/sgxsdk/SampleCode/TDXReportParse
    2. TDXReportParse をコンパイルします。

      sudo make
  4. コンパイルされた実行可能ファイルを実行します。

    sudo ./tdx_report_parse

    次のコマンド出力が返されます。 TDX 対応インスタンスが保護されている場合、インスタンスは非デバッグ状態になり、attributes 行に NO_DEBUG が表示されます。image

リモート構成証明サービスを使用して TDX 機能を検証する

Alibaba Cloud TDX 暗号化環境では、リモート構成証明サービスを使用して、プラットフォームの信頼性と、プラットフォームで実行されているコードの整合性と機密性を検証できます。 詳細については、「リモート構成証明サービス」をご参照ください。

  • プラットフォームとは、Alibaba Cloud が使用するハードウェアプラットフォームと仮想化ソフトウェアスタックです。

  • プラットフォームで実行されているコードとは、TDX 対応インスタンスで実行されている Alibaba Cloud Linux などのオペレーティングシステムと、NGINX や Java などのアプリケーションです。

  1. 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
  2. Alibaba Cloud TDX リモート構成証明サービスを設定します。

    /etc/sgx_default_qcnl.conf ファイルの PCCS_URL パラメータを指定します。 PCCS_URL パラメータは、中国 (北京) リージョンの分散協調アクセス ポイント (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.conf
  3. tdx-quote-generation-sample ディレクトリにアクセスし、tdx-quote-generation-sample ファイルをコンパイルします。

    cd /opt/alibaba/tdx-quote-generation-sample
    sudo make
  4. 次のいずれかの操作を実行して、システムがリモート構成証明レポート (Quote とも呼ばれます) を生成できるようにします。

    • システムが report_data をランダムに生成し、Quote を生成できるようにします。

      sudo ./app
    • report_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) が生成されると、次の図に示すコマンド出力と同様のコマンド出力が返されます。

    image

  5. リモート構成証明レポート (Quote) を検証します。

    1. 構成証明ポリシーを設定して署名します。

      重要

      既知の安全な環境を使用することをお勧めします。 本番環境を使用して構成証明ポリシーを生成しないでください。

      構成証明ポリシーは JSON 形式で定義できます。

      • たとえば、次の構成証明ポリシーを設定して、TDX 対応 ECS インスタンスが暗号化された非デバッグ状態で実行されているかどうかを検証できます。これは、インスタンスが保護されていることを示します。

      • 構成証明ポリシーに追加パラメータを含めて、オペレーティングシステムとアプリケーションの整合性を検証することもできます。 構成証明ポリシーの詳細については、「Intel DCAP Appraisal Engine 開発者ガイド」を参照してください。

        {
            "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

      ポリシートークンが生成されると、次の図に示すコマンド出力と同様のコマンド出力が返されます。

      image

    2. TDX リモート構成証明が依存する他のコンポーネントをコンパイルします。

      cd /opt/alibaba/tdx-quote-verification-sample
      sudo make all

      依存コンポーネントがコンパイルされると、次の図に示すコマンド出力と同様のコマンド出力が返されます。

      image

    3. リモート構成証明レポート (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>

        次の図に示すコマンド出力と同様のコマンド出力が返されます。

        image

      • RelyingParty を使用して JWT 署名の ID を検証します。

        ./verifier -quote <path_to_quote> |./relying_party -v |grep "json payload" |awk -F 'payload:' '{print $2}'|jq 

        次の図に示すコマンド出力と同様のコマンド出力が返されます。 コマンド出力には、特定のフィールドのみが表示されます。

        説明

        簡潔にするために、appraisal_resultoverall_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": 171040082900000000,
              "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 カーネルのソフトウェア入力出力変換 Lookaside バッファ (SWIOTLB) には、次の既知の問題があります。

    • TDX 対応インスタンスで使用可能なメモリの量は、通常のインスタンスで使用可能なメモリの量よりも少なくなります。 TDX 対応インスタンスは、周辺機器との通信のために、暗号化されていないメモリ内の SWIOTLB と呼ばれる特定の領域を使用します。 デフォルトでは、SWIOTLB は TDX 対応インスタンスの合計利用可能メモリの 6% を消費し、サイズは 1 GiB を超えません。

    • 複数台の Elastic Network Interface (ENI) を large インスタンスタイプの TDX 対応インスタンスにバインドすると、ネットワーク インターフェース コントローラー (NIC) マルチキューシナリオで SWIOTLB が不足しているためにメモリ割り当てが失敗した場合、インスタンスがフリーズすることがあります。 インスタンスを回復するには、TDX 対応インスタンスを停止し、ECS コンソールでインスタンスから 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。 詳細については、「カーネルのコマンドラインパラメータ」をご参照ください。