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

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

最終更新日:Sep 18, 2024

このトピックでは、Intelで信頼ドメイン拡張 (TDX) の機密コンピューティング環境を構築する方法について説明します。®TDX対応のECS (Elastic Compute Service) インスタンスをし、インスタンスのTDX機能を確認します。

背景情報

インテル ®TDXは、CPUレジスタ、メモリデータ、割り込みインジェクションなどのランタイムデータを保護するために、ECSインスタンスにハードウェア支援による分離と暗号化を提供するCPUハードウェアベースのテクノロジーです。 インテル®TDXは、より高いレベルのデータプライバシーを実現し、実行中のプロセスや処理中の機密データへの不正アクセスに関連するリスクを軽減します。 インテルの詳細については®TDX、Intelを参照®ドメイン拡張機能を信頼する (Intel)®TDX)

インテル ®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ビット (UEFI) を選択し、[機密VM] を選択します。

    image

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

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

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

パラメーター

説明

値の例

RegionId

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

cn-beijing

ZoneId

北京ゾーンIを選択します。

cn-beijing-i

InstanceType

ecs.g8i.xlargeまたはより大きなインスタンスタイプを選択します。

ecs.g8i.2xlarge

ImageId

TDXをサポートするイメージのIDを指定します。 Alibaba Cloud Linuxは、カーネルバージョンが5.10.134-16のLTS 64ビットUnified Extensible Firmware Interface (UEFI) イメージのみを3.2104しています。al8.x86_64以降はTDXをサポートしています。

aliyun_3_9_x64_20G_uefi_alibase_20231219.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_9_x64_20G_uefi_alibase_20231219.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)信頼できるコンピューティングベース (TCB) セキュリティバージョン番号 (SVN) など、TDX対応インスタンスに関する重要な情報が含まれます。 TDXレポートは、暗号方式を使用して情報の整合性を確保します。 詳細については、「Intel TDXモジュール」をご参照ください。

  1. Alibaba Cloud機密コンピューティング用のYUMソフトウェアリポジトリをインポートします。

    • YUMソフトウェアリポジトリのパブリックURLの形式は、https:// enclave-[Region-ID].oss-[Region-I D].aliyuncs.com/repo/alinux/enclave-expr.repoです。

    • YUMソフトウェアリポジトリの内部URLの形式は、https:// enclave-[Region-ID].oss-[Region-I D]-internal.aliyuncs.com/repo/alinux/enclave-expr.repoです。

    上記のURLの [Region-ID] をTDX対応インスタンスの実際のリージョンIDに置き換えます。 たとえば、中国 (北京) リージョンに固有の内部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対応インスタンスが保護されている場合、インスタンスは非デバッグ状態であり、属性行にNO_DEBUGが表示されます。image

リモート認証サービスを使用してTDX機能を確認する

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

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

  • プラットフォームで実行されているコードは、Alibaba Cloud Linuxなどのオペレーティングシステムと、TDX対応インスタンスで実行されている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パラメーターを指定します。 たとえば、中国 (北京) リージョンのDCAP (Distributed Cooperative Access Points) サービスを指すようにPCCS_URLパラメーターを指定します。

    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. 次のいずれかの操作を実行して、システムがリモート認証レポートを生成できるようにします。

    • システムがランダムに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パラメーターの値は、長さの制限によりハッシュ値になります。 例えば、report_data_in_hexパラメータは、公開鍵のハッシュ値に設定される。 ハッシュ値は、後続の鍵ネゴシエーションプロセスで使用することができる。

        サンプルコマンド:

        sudo ./app -d 1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef
        sudo ./app -d $(cat data.dat | xxd -p)

    リモート認証レポート (引用) が生成されると、次の図に示すコマンド出力と同様のコマンド出力が返されます。

    image

  5. リモート認証レポート (引用) を確認します。

    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 means for NO_DEBUG and 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. リモート認証レポート (引用) を確認します。

      重要

      次のコマンドの <path_to_quote> パラメーターの値を、リモート認証レポート (quote) の実際のパスに置き換えます。 例: /opt/alibaba/tdx-quote-generation-sample/quote.dat

      • Policies/tenant_td_policy.jsonファイルのポリシーに基づいて、リモート認証用に生成された引用符が検証され、対応する検証結果がJSON Web Token (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 

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

        [
          {
            "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"
                    }
                  }
                }
              ]
            }
          }
        ]
      説明
      • 簡単にするために、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'
      • さらに、クォートが生成されるときに指定される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)'

既知の問題と機能制限

  • TDX対応インスタンスは、CPUレジスタとメモリステータスを保護するためにCPUハードウェアベースの暗号化を提供します。 その結果、TDX対応インスタンスの全体的なパフォーマンスが影響を受けます。

  • RTMR、割り込み保護、およびレジスタ状態回復の設計上の制限により、TDX対応インスタンスをインスタンス内から再起動することはできません。 TDX対応インスタンスのオペレーティングシステムでrebootコマンドを実行して、インスタンスを再起動することはできません。

  • 仮想ネットワークコンピューティング (VNC) を使用してTDX対応インスタンスにログインすることはできません。 Workbenchやサードパーティクライアントなどのツールを使用して、SSH経由でTDX対応インスタンスにログインできます。 TDX対応インスタンスのランタイム中に生成されたログを取得できます。 詳細については、「システムログとスクリーンショットの表示」または「GetInstanceConsoleOutput」をご参照ください。

  • 画像には次の制限が適用されます。

    • UEFIイメージのみがサポートされています。

    • Windowsイメージはサポートされていません。

    • カーネルバージョンが5.10.134-16.al8.x86_64以降のイメージがサポートされています。

  • Elastic Remote Direct Memory Access (eRDMA) およびアクセラレータはサポートされていません。

  • 次の既知の問題は、Linuxカーネルのソフトウェア入出力変換ルックアサイドバッファ (SWIOTLB) に関連しています。

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

    • 大規模なインスタンスタイプのTDX対応インスタンスに複数のelastic network interface (ENI) をバインドすると、ネットワークインターフェイスコントローラー (NIC) マルチキューシナリオでSWIOTLBが不十分なためにメモリ割り当てが失敗すると、インスタンスがフリーズする可能性があります。 ECSコンソールでTDX対応インスタンスを停止し、インスタンスからENIのバインドを解除して、インスタンスを回復できます。

    • インスタンスのワークロードに大量のI/O操作が含まれる場合、SWIOTLBが不十分なため、TDX対応インスタンスのパフォーマンスが低下する可能性があります。 次のコマンドを実行して、上記の問題が存在するかどうかを確認できます。

      dmesg| grep 'swiotlb buffer is full'
      重要

      SWIOTLB関連のパラメーター設定が正しくないと、インスタンスの起動に失敗する可能性があります。 エラーが発生したときのデータロールバックを容易にするために、先に進む前にインスタンス上のディスクのスナップショットを作成することを推奨します。 詳細については「スナップショットの作成」をご参照ください。

      上記の問題が存在する場合は、次の手順を実行して、SWIOTLBのサイズを大きくしてインスタンスのパフォーマンスを向上させることができます。

      1. /etc/default/grubファイルを開きます。

        vim /etc/default/grub
      2. swiotlbパラメーターをGRUB_CMDLINE_LINUXフィールドに追加します。

        たとえば、GRUB_CMDLINE_LINUXをGRUB_CMDLINE_LINUX="... swiotlb=524288" に変更して、SWIOTLBのサイズを1 GiBに増やします。

        説明

        swiotlbパラメーターの値は、次の式を使用して計算できます。MiBで必要なSWIOTLBのサイズ × 512。 詳細については、「カーネルのコマンドラインパラメーター」をご参照ください。

      3. grub.cfgファイルを更新して、上記の変更を有効にします。

        grub2-mkconfig -o /boot/efi/EFI/alinux/grub.cfg