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

Elastic Compute Service:機密コンピューティングインスタンスにおけるディスクの計測と暗号化による保護

最終更新日:Jun 12, 2026

このトピックでは、CryptPilot を使用して、機密コンピューティングインスタンスにおける保管中のデータを保護する方法について説明します。CryptPilot はルートファイルシステムの信頼できる測定を実行し、ソフトウェアの改ざんを防止します。また、ディスクデータを暗号化して、保管中のデータの機密性を確保します。

TDX インスタンスや異種混在型機密インスタンスなどの機密コンピューティングインスタンスは、レジスタ暗号化やメモリ暗号化などのハードウェア機能を通じてランタイムデータを保護します。ただし、プログラムコードや処理済みデータは通常、クラウドディスクに保存されているため、保存データの保護には追加のメカニズムが必要です。このトピックでは、CryptPilot を使用して、機密コンピューティングインスタンスでディスク測定と暗号化保護を実装し、クラウドディスクに自己管理型の暗号化キーを使用する方法について説明します。

機密コンピューティングインスタンスのディスク保護には 2 つのアプローチがあります。これらは個別に使用することも、組み合わせて使用することもできます。

  • 機密システムディスクの測定と暗号化: システムディスクイメージの作成フェーズで dm-verity 測定を導入し、オプションで LUKS2 暗号化を行います。システム起動時に、rootfs の完全性検証が実行され、復号キーはリモートアテステーションを通じて信頼管理サービスから取得されます。このアプローチは、マシン全体の環境に対して信頼できる測定が必要なシナリオに適しており、その上でシステムディスクを暗号化することもできます。

  • 機密データディスクの暗号化: 実行中の機密コンピューティングインスタンスの個別のデータディスクパーティションに対して LUKS2 暗号化を実行します。このアプローチは、既存のビジネスインスタンスがあり、イメージを再作成せずに特定のデータディスクのみを暗号化したい場合に適しています。

シナリオに応じてセクションを選択してください。機密インスタンス用の測定可能なトラステッドブートシステムイメージを作成する場合は、機密システムディスクの測定と暗号化をご参照ください。実行中のインスタンスの特定のデータディスクのみを暗号化する場合は、機密データディスクの暗号化をご参照ください。

機密システムディスクの測定と暗号化

機密システムディスクの構成と保護

CryptPilot で処理された機密システムディスクはボリューム単位で構成され、主に次の 2 つの主要なボリュームが含まれます。

image
  • rootfs ボリューム:読み取り専用のルートファイルシステムです。起動時に、Linux カーネルの dm-verity メカニズムが rootfs ボリュームの完全なハッシュツリーを構築します。ルートハッシュ値はセキュアメモリに保存され、機密インスタンスの CC Eventlog に記録され、リモートアテステーションによるブートチェーンの完全性検証に使用されます。カーネルは、各データブロックのハッシュ値を、事前に保存されたルートハッシュ値と階層的に照合します。不正な改ざんはリアルタイムで検出され、システムの起動がブロックされます。ビジネス互換性を維持するため、読み取り専用の rootfs の上に書き込み可能なオーバーレイレイヤーが配置され、オーバーレイのバックエンドストレージは delta ボリュームが提供します。一時的な書き込みは測定結果に影響しません。

    このボリュームの暗号化はオプションです。有効にした場合、暗号化には LUKS2 (AES-256) が使用されます。デバイスはデータの暗号化と復号のためにマスターキーをランダムに生成します。ユーザーが提供したパスフレーズは、鍵導出アルゴリズムによって処理されてキー暗号化キー (KEK) が生成され、この KEK がマスターキーを暗号化してボリュームヘッダーに保存します。起動時には、リモートアテステーションを通じて KEK を取得し、マスターキーを復号します。すべての暗号化および復号操作は、機密インスタンスのセキュアメモリ内で実行されます。

  • delta ボリューム:システムディスクの残りのスペースで構成される暗号化ボリュームです。常に LUKS2 で暗号化され、rootfs の書き込み可能なオーバーレイレイヤーのバックエンドデータを保持します。rootfs へのすべての書き込み操作は、最終的に暗号化されて delta ボリュームに保存されます。

使用フロー

image

ステップ 1:信頼できる環境の準備

信頼できる環境は、次の条件を満たす必要があります。

  • Alibaba Cloud Linux 3 オペレーティングシステム:機密システムディスクを作成するための CryptPilot ツールは Alibaba Cloud Linux 3 に依存します。

  • パブリック IP アドレスの有効化:機密コンピューティングインスタンスは、起動時に Trustee サーバーにアクセスして復号キーを取得する必要があります。

  • 十分な容量:必要な容量は、作成するシステムディスクイメージファイルのサイズによって異なります。環境に 40 GB 以上の空き容量があることを推奨します。

ステップ 2:機密システムディスクイメージの作成

  1. ソースディスクイメージを準備します。

    機密システムディスクを作成する前に、ビジネスをデプロイしたディスクイメージファイルを準備する必要があります。このイメージは、次の 2 つの方法のいずれかで取得できます。

    既存の ECS インスタンスからシステムイメージをエクスポートする

    既存の Alibaba Cloud Elastic Compute Service (ECS) インスタンスにビジネス環境をデプロイおよび設定し、コンソールまたは API を介してインスタンスのシステムイメージを qcow2 ファイルとしてエクスポートします。

    公式ベースイメージをカスタマイズする

    Alibaba Cloud の公式サイトから最新の Alibaba Cloud Linux 3 ベースイメージをダウンロードし、virt-customize ツールを使用してイメージコンテンツ (ソフトウェアパッケージのインストール、サービスの設定、ビジネスアプリケーションの追加など) をカスタマイズして、ビジネス要件を満たします。

    Alibaba Cloud Linux 3 オンプレミスイメージのページにアクセスして、最新ディストリビューションのダウンロードリンクを取得できます。たとえば、次のコマンドを実行して、特定のバージョンの QCOW2 イメージファイルをダウンロードします。

    curl -O -L -C - https://alinux3.oss-cn-hangzhou.aliyuncs.com/aliyun_3_x64_20G_nocloud_alibase_20250117.qcow2
    説明
    • .qcow2 および .vhd 形式の Alibaba Cloud Linux 3 オペレーティングシステムのディスクイメージファイルのみをサポートします。

    • cryptpilot-convert で処理した後のイメージのコンテンツは変更できません。処理前に、必要なすべての設定とカスタマイズを完了していることを確認してください。

  2. (オプション) イメージを堅牢化します。

    機密コンピューティング環境で実行されるインスタンスの場合、堅牢化は攻撃対象領域を効果的に削減し、不要なサービスやコンポーネントがセキュリティリスクをもたらすのを防ぎ、全体的なセキュリティを向上させます。

    暗号化を実行する前に、イメージのカスタマイズフェーズで、以下のイメージの堅牢化セクションを参照して関連操作を完了できます。

  3. CryptPilot をインストールし、設定ファイルを準備します。

    1. CryptPilot をインストールします。

      信頼できるビルド環境に、機密システムディスクイメージを作成するためのツール (cryptpilot-convert、cryptpilot-enhance、cryptpilot-fde-host など) を提供するホストパッケージをインストールします。

      sudo yum install -y cryptpilot-fde-host
    2. CryptPilot のバージョンを確認します。

      cryptpilot-fde-host --version

      image

    3. CryptPilot 設定ファイル用のディレクトリを作成します。

      mkdir -p ./config_dir
    4. システムディスクの設定を書き込みます。

      CryptPilot は、機密システムディスクの rootfs ボリュームと delta ボリュームの暗号化設定を個別に設定できます。rootfs ボリュームを暗号化するかどうか、およびdelta データを永続化する必要があるかどうかの 2 つの側面に基づいて設定を選択します。fde.toml の内容には、次の 4 つの組み合わせを利用できます。選択したオプションの内容を ./config_dir/fde.toml に書き込みます。

      rootfs ボリュームは暗号化なし + delta ボリュームは非永続

      [rootfs]
      delta_location = "disk"
      
      [delta]
      integrity = true
      [delta.encrypt.otp]

      rootfs ボリュームは暗号化なし + delta ボリュームは永続

      [rootfs]
      delta_location = "disk-persist"
      
      [delta]
      integrity = true
      [delta.encrypt.kbs]
      kbs_url = "http://<trustee-ip>:8081/api"
      key_uri = "kbs:///default/local-resources/delta"

      rootfs ボリュームは暗号化あり + delta ボリュームは非永続

      [rootfs]
      delta_location = "disk"
      [rootfs.encrypt.kbs]
      kbs_url = "http://<trustee-ip>:8081/api"
      key_uri = "kbs:///default/local-resources/rootfs"
      
      [delta]
      integrity = true
      [delta.encrypt.otp]

      rootfs ボリュームは暗号化あり + delta ボリュームは永続

      [rootfs]
      delta_location = "disk-persist"
      [rootfs.encrypt.kbs]
      kbs_url = "http://<trustee-ip>:8081/api"
      key_uri = "kbs:///default/local-resources/rootfs"
      
      [delta]
      integrity = true
      [delta.encrypt.kbs]
      kbs_url = "http://<trustee-ip>:8081/api"
      key_uri = "kbs:///default/local-resources/delta"
      説明
      • OTP を使用する場合、delta ボリュームは起動ごとに新しいランダムキーを自動的に生成します。データはシャットダウン後に失われ、キーバックエンドのデプロイは不要です。OTP の詳細については、「ワンタイムパスワード (OTP)」をご参照ください。

      • Trustee などの永続キーバックエンドを使用する場合、設定内の <trustee-ip> を Trustee サービスをデプロイしたインスタンスのパブリック IP アドレスに置き換えます (Trustee への HTTPS アクセスを設定している場合は、kbs_url の http:// を https:// に置き換えます)。各キー取得方法の詳細な設定については、「信頼管理サービス (Trustee)」をご参照ください。

  4. 機密システムディスクイメージファイルを作成します。

    1. 機密システムディスクイメージファイルを作成します。

      • 設定で rootfs ボリュームを暗号化しない場合:

        sudo cryptpilot-convert --uki --in ./aliyun_3_x64_20G_nocloud_alibase_20250117.qcow2 --out ./confidential-disk.qcow2 --config-dir ./config_dir/ --rootfs-no-encryption
      • 設定で rootfs ボリュームを暗号化する場合:

        sudo cryptpilot-convert --uki --in ./aliyun_3_x64_20G_nocloud_alibase_20250117.qcow2 --out ./confidential-disk.qcow2 --config-dir ./config_dir/ --rootfs-passphrase "<rootfs_volume_encryption_key>"
        説明
        • <rootfs_volume_encryption_key> は、rootfs ボリューム用にキーバックエンドにアップロードされた暗号化キーと同じである必要があります。

        • delta ボリュームはインスタンスの起動時に暗号化されるため、機密システムディスクイメージファイルを作成する際に delta ボリュームのパスワードを指定する必要はありません。

        • システムディスクに追加の RPM パッケージをインストールする必要がある場合は、--package オプションを使用して RPM パッケージの名前またはパスを指定できます。

    2. 生成されたイメージを確認します。

      機密システムディスクイメージは、デフォルトで ./confidential-disk.qcow2 に作成されます。

      file ./confidential-disk.qcow2

      image

ステップ 3:カスタムイメージをインポートし、機密インスタンスを作成する

  1. カスタムイメージを OSS にアップロードします。

    ローカルイメージファイルを OSS にアップロードし、ファイルの URL を取得します。詳細については、「ファイルのアップロード」をご参照ください。

  2. カスタムイメージをインポートします。

    カスタムイメージをインポートする際、[起動モード] は [UEFI] に設定する必要があります。

    image

  3. イメージが正常にインポートされたら、イメージ詳細ページに移動し、NVMe ドライバーを [有効] に設定します。

    image

ステップ 4:インポートしたカスタムイメージを使用して機密コンピューティングインスタンスを作成する

  1. インポートしたカスタムイメージを使用して、TDX 機密コンピューティングインスタンスまたはヘテロジニアス機密コンピューティングインスタンスを作成します。

    インスタンスを作成する際は、次のパラメーターに注意してください。

    • [イメージ]:インポートしたカスタムイメージを選択し、[Confidential VM] を選択します。

      image

    • [パブリック IP アドレス]:[パブリック IPv4 アドレスの割り当て] を選択して、インスタンスが Trustee サービスにアクセスし、リモートアテステーションを通じてキーを取得できるようにします。

    • [ログオン資格情報]:[キーペア] を選択します。

      CryptPilot で作成された機密システムディスクは、現在パスワードベースのログオンをサポートしていません。

  2. (オプション) Trustee サービスをデプロイしている場合は、Trustee インスタンスのセキュリティグループにインバウンドルールを追加して、機密インスタンスのパブリック IP アドレスからポート 8081 へのアクセスを許可します。

    image

  3. 機密コンピューティングインスタンスを再起動します。

  4. Workbench ターミナルを使用して機密コンピューティングインスタンスに接続します。

    インスタンスに接続できれば、インスタンスは Trustee サービスにアクセスし、リモートアテステーションを通じてキーを取得できていることを意味します。

ステップ 5:(オプション) Trustee サービスに参照値を登録する

Trustee をキーストレージバックエンドとして設定した場合、インスタンスは起動時に Trustee サービスにリクエストを送信してディスク復号キーを取得します。Trustee サービスはリモートアテステーションを通じてインスタンス環境を検証し、TEE インスタンスで実行されているかどうかを確認します。さらに、実行中のイメージも検証したい場合は、まず Trustee にイメージの参照値を登録する必要があります。

  1. CryptPilot を使用して機密システムディスクイメージの参照値を計算し、reference-value.json に保存します。

    sudo cryptpilot-fde-host show-reference-value --disk ./confidential-disk.qcow2 | tee ./reference-value.json

    以下は出力例です。ここで、466713bf9b2dacca6cd15ff4acd050712e29b4164628e01bd2495411766f36d7ba4560f62537926cf16e08480f1c1804 がイメージの参照値です。image

  2. 参照値を Trustee サービスにインポートします。

    provenance=$(cat ./reference-value.json | base64 --wrap=0)
    cat << EOF > ./register-request.json
    {
        "version" : "0.1.0",
        "type": "sample",
        "payload": "$provenance"
    }
    EOF
    
    rvps-tool register --path ./register-request.json

イメージの堅牢化

機密コンピューティング環境では、イメージのセキュリティ設定が全体的な信頼性に直接影響します。暗号化の前にイメージを堅牢化することを推奨します。

  1. 攻撃対象領域の最小化:プリインストールされたクラウドサービスコンポーネント (Cloud Assistant や監視エージェントなど) は、機密コンピューティングシナリオにおける攻撃対象領域を拡大します。これらを削除することで、悪用のリスクを軽減します。

  2. データ分離の保証:開いたままの管理サービスは、データ漏洩のチャネルになる可能性があります。堅牢化により、必要なサービスのみが実行されることを保証します。

  3. アクセス制御:SSH およびその他のリモートアクセスを無効にすることで、不正なログオンを防ぎ、コンピューティング環境の閉鎖性を確保します。

堅牢化ツールの説明

堅牢化プロセスを簡素化するために、イメージセキュリティ堅牢化のベストプラクティスを統合した cryptpilot-enhance ツールを提供しています。

説明

公式ソースから取得した Alibaba Cloud Linux 3 ベースイメージではなく、ECS インスタンスのスナップショットからエクスポートしたイメージを使用する場合、Cloud Assistant や Security Center (Aegis) がプリインストールされている可能性があります。cryptpilot-enhance ツールは、これらのコンポーネントを自動的に検出してアンインストールします。

重要

cryptpilot-convert で生成されたイメージはコンテンツが確定しており、変更できません。したがって、cryptpilot-convert の前に cryptpilot-enhance を実行する必要があります。

cryptpilot-enhance は、2 つの堅牢化モードをサポートします。

  • full:完全な堅牢化。SSH サービスを削除し、最も厳格なアクセス制御を強制します。

  • partial:部分的な堅牢化。SSH サービスを保持しますが、キーベース認証を強制します。リモートメンテナンスが必要な本番環境に適しています。

堅牢化には、次の項目が含まれます。

堅牢化モード

項目

共通の堅牢化項目 (両モードで実行)

  • Cloud Assistant のアンインストール

  • Aegis のアンインストール

  • rpcbind サービスの無効化

  • cloud-init の削除

  • ユーザーアカウントのクリーンアップ

  • Bash 履歴のクリア

full モード

  • SSH サービスの完全なアンインストール

partial モード

  • SSH セキュリティ堅牢化:

    • パスワードログオンの無効化: PasswordAuthentication no

    • キーベース認証の有効化: PubkeyAuthentication yes

    • root ログオンの制限: PermitRootLogin prohibit-password

    • 高リスク機能の無効化: X11Forwarding no、AllowTcpForwarding no

  • 公開鍵が提供された場合、root ユーザーの ~/.ssh/authorized_keys に挿入されます

堅牢化ツールの使用例

  • イメージに対して完全な堅牢化を実行します。

    cryptpilot-enhance \
      --mode full \
      --image ./os-disk.qcow2
  • イメージに対して部分的な堅牢化を実行し、SSH 公開鍵を挿入します。

    cryptpilot-enhance \
      --mode partial \
      --image ./os-disk.qcow2 \
      --ssh-key ~/.ssh/id_rsa.pub

機密データディスクの暗号化

機密コンピューティングのシナリオでは、システムディスク全体を保護するだけでなく、実行中の機密インスタンスで特定のデータディスクパーティションのみを暗号化することもできます。このセクションでは、自己管理キーを使用して、機密コンピューティングインスタンス内でデータディスクの LUKS2 暗号化を実装する方法について説明します。

暗号化の原理

機密クラウドディスクは、Linux プラットフォームの LUKS2 技術に基づいており、ブロックストレージレベルでデータを暗号化して保護します。プロセスには、初期化とオープンが含まれます。

  • 初期化:ブロックデバイス (/dev/nvme1n1p1 など) を選択します。デバイス固有のマスターキーが、セキュアな乱数アルゴリズムによって AES-256 暗号化用に生成されます。マスターキー自体は、ユーザーが提供したパスフレーズから鍵導出アルゴリズムを通じて導出される鍵暗号化鍵 (KEK) によって暗号化され、ボリュームヘッダーに保存されます。

    重要

    初期化プロセスは、ブロックデバイス上の既存データを消去します。意図しないデータ損失を避けるため、注意して進めてください。

  • オープン:ユーザーが提供したパスフレーズから KEK を再導出し、マスターキーを復号してボリュームをアンロックします。システムは /dev/mapper/<volume_name> パスに仮想ブロックデバイスを作成します。このデバイスに書き込まれるすべてのデータは、ディスクに書き込まれる前に自動的に暗号化され、読み取り時には自動的に復号されます。暗号化と復号は Linux カーネル内で実行されるため、平文がインスタンス外に漏洩することを効果的に防ぎます。

image

暗号化されたインスタンスは、CPU に内蔵された AES ハードウェアアクセラレーションを使用して、暗号化と復号のオーバーヘッドを削減します。機密データディスクは、AEAD 暗号化モードによる整合性保護をサポートしており、攻撃者による暗号文データの改ざんを防ぎます。これは、大規模言語モデルの重みストレージやトレーニングデータセットストレージなどのシナリオに適しています。暗号化に使用されるパスフレーズはインスタンスの外部で管理され、複数のキー取得方法をサポートしています。詳細については、付録: キー取得方法 をご参照ください。

説明
  • TDX インスタンス または異種混在型機密インスタンスのデータディスクのみ暗号化をサポートしています。

  • クラウドディスクがロールバックされた場合、データの整合性と機密性は損なわれないため、機密クラウドディスクソリューションでは、このような潜在的な攻撃を特定することはできません。セキュリティ要件に基づいて、アプリケーションレベルでデータバージョンチェックを実行することを推奨します。

使用フロー

ステップ 1: 環境の準備

  1. 機密コンピューティングインスタンスを作成します。

    TDX 機密インスタンス または異種混在型機密インスタンスのみサポートされています。

  2. 機密コンピューティングインスタンスにリモート接続します。

    詳細については、Workbench を使用した Linux インスタンスへのログオン をご参照ください。

  3. CryptPilot をインストールします。

    sudo yum install -y cryptpilot-crypt

ステップ 2: クラウドディスクの作成とマウント

重要

クラウドディスクを暗号化すると、ブロックデバイス上の既存データが消去されます。この操作のために、新しいデータディスクを作成することを推奨します。

  1. 暗号化する空のデータディスクを作成します。

  2. 作成したデータディスクを ECS インスタンスにアタッチします。

  3. データディスクを初期化します。

    データディスクを初期化する際は、パーティションとファイルシステムのみを作成し、ファイルシステムはマウントしないでください。ファイルシステムは暗号化後にマウントする必要があります。

  4. アタッチしたディスクとパーティションの情報を表示します。

  5. lsblk

    出力には、現在の ECS インスタンスに 2 つのクラウドディスクがアタッチされていることが表示されます。

    • /dev/nvme0n1:既存のシステムディスク。

    • /dev/nvme1n1:新しく追加されたデータディスク。2 つの新しい空のパーティション (/dev/nvme1n1p1 と /dev/nvme1n1p2) があります。

    image

ステップ 3: ext4 ファイルシステムを持つボリュームの作成

  1. まず、構成ファイル /etc/cryptpilot/volumes/data0.toml を作成する必要があります。このファイルは、data0 という名前のデータボリュームを定義します。

    説明

    構成ファイルは TOML 形式を使用します。ファイル名は .toml で終わる任意のテキストファイルで構いません。ボリューム名と一致させる必要はありません。

    以下は、さまざまなシナリオに対応する典型的な構成例です。必要に応じて構成フィールドを変更してください。

    一時ボリューム

    # ボリューム構成
    dev = "/dev/nvme1n1p1"    # ブロックデバイス、つまりクラウドディスクの空のパーティションを指定します。この例では、/dev/nvme1n1p1 はデータディスクの最初のパーティションを使用します。
    volume = "data0"          # ボリューム名を指定します。この例では、data0 という名前です。
    auto_open = false         # true の場合、システム起動時にボリュームが自動的にオープンされます。false の場合、手動でのオープンが必要です。
    makefs = "ext4"           # 作成するファイルシステムのタイプを指定します。この例では、ext4 です。
    integrity = true          # true の場合、データ整合性サポートが有効になります。false の場合、無効になります。
    
    # キー構成
    [encrypt.otp]             # キーストレージタイプを指定します。ここでは、ワンタイムパスワード (OTP) が選択されています。

    永続ボリューム (Trustee を使用)

    # ボリューム構成
    dev = "/dev/nvme1n1p2"        # ブロックデバイス、つまりクラウドディスクの空のパーティションを指定します。この例では、/dev/nvme1n1p2 はデータディスクの 2 番目のパーティションを使用します。
    volume = "data0"              # ボリューム名を指定します。この例では、data0 という名前です。
    auto_open = false             # true の場合、システム起動時にボリュームが自動的にオープンされます。false の場合、手動でのオープンが必要です。
    makefs = "ext4"               # 作成するファイルシステムのタイプを指定します。この例では、ext4 です。
    integrity = true              # true の場合、データ整合性サポートが有効になります。false の場合、無効になります。
    
    # キー構成 (Trustee KBS から取得)
    [encrypt.kbs]
    kbs_url = "http://<trustee-ip>:8081/api"               # <trustee-ip> を Trustee インスタンスのパブリック IP アドレスに置き換えます
    key_uri = "kbs:///default/local-resources/data0"       # KBS に保存されている data0 ボリュームキーのリソース URI

    永続ボリューム (Alibaba Cloud KMS を使用)

    # ボリューム構成
    dev = "/dev/nvme1n1p2"        # ブロックデバイス、つまりクラウドディスクの空のパーティションを指定します。この例では、/dev/nvme1n1p2 はデータディスクの2番目のパーティションを使用します。
    volume = "data0"              # ボリューム名を指定します。この例では、data0 という名前です。
    auto_open = false             # true の場合、システム起動時にボリュームが自動的にオープンされます。false の場合、手動でのオープンが必要です。
    makefs = "ext4"               # 作成するファイルシステムのタイプを指定します。この例では、ext4 です。
    integrity = true              # true の場合、データ整合性サポートが有効になります。false の場合、無効になります。
    
    # キー構成
    [encrypt.kms]                 # キーストレージタイプを指定します。ここでは、Key Management Service (KMS) が選択されています。
    secret_name = "confidential_cloud_disk_passphrase"   # KMS インスタンスに保存されているシークレットの名前、つまり上記の例の confidential_cloud_disk_passphrase です。
    # アプリケーション ID 資格情報ファイル (clientKey_****.json) の内容
    client_key = '''
    {
      "KeyId": "KAAP.b183152a-c3bf-43ae-9399-a101607b****",
      "PrivateKeyData": "MIIJ0wIBAzCCCZ8GCSqGSIb3DQE****"
    }
    '''
    client_key_password = "258372e962f5204ce648bc66243f****"    # 資格情報パスワードファイル (clientKey_****_Password.txt) の内容
    kms_instance_id = "kst-bjj67d004a85ykq80****"               # KMS インスタンス ID
    # KMS インスタンス CA 証明書ファイル (PrivateKmsCA_kst-******.pem) の内容
    kms_cert_pem = """
    -----BEGIN CERTIFICATE-----
    MIIDuzCCAqOgAwIBAgIJALTKwWAjvbMiMA0GCSqGSIb3DQEBCwUAMH****
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    MIID3zCCAsegAwIBAgIJAO8qnQyTy8/kMA0GCSqGSIb3DQEBCwUAMH****
    -----END CERTIFICATE-----
    """
  2. ボリュームのステータスを表示します。

    sudo cryptpilot-crypt show data0

    data0 ボリュームの構成情報が表示されます。

    • Initialized 列:ボリュームが初期化を必要とするかどうかを示します。一時ボリュームは初期化が不要ですが、永続ボリュームは必要です。

    • Opened 列:ボリュームがオープンしていないことを示します。

      image

  3. ボリュームを初期化します。

    sudo cryptpilot-crypt init data0
  4. ボリュームをオープンします。

    sudo cryptpilot-crypt open data0
  5. ボリュームの仮想デバイスを確認します。

    sudo file -Ls /dev/mapper/data0

    ボリュームがオープンされると、パス /dev/mapper/<volume_name> に仮想ブロックデバイスが作成されます。

    image

  1. ファイルシステムをマウントし、マウント結果を確認します。

    1. data0 ボリュームを /mnt/data0 パスにマウントします。

      sudo mkdir -p /mnt/data0
      sudo mount -t ext4 /dev/mapper/data0 /mnt/data0
    2. マウント結果を確認します。

      mount | grep data0
      ls -la /mnt/data0/

      次の出力は、ボリュームが空の ext4 ファイルシステムで正常にマウントされたことを示しています。

      image

  2. ボリュームをクローズします。

    重要
    • ワンタイムパスワード (OTP) モデルを使用している場合、ボリュームをクローズすると、そこに保存されている機密データは永久に失われます。永続ボリュームはこの影響を受けません。

    • ボリュームをクローズする前に、ボリュームから読み取りまたは書き込みを行っているすべてのビジネスプロセスを停止し、ボリューム上のファイルシステムをアンマウントして、ボリュームが使用されていないことを確認してください。

    1. ファイルシステムをアンマウントします。

      sudo umount /mnt/data0
    2. ボリュームをクローズします。

      sudo cryptpilot-crypt close data0

      image

ステップ 4: 起動時のボリューム自動オープン設定

  1. 構成ファイルを変更します。

    自動的にオープンする必要があるボリュームについては、構成ファイル内の auto_open フィールドの値を true に変更します。image

  2. (条件付き) 永続ボリュームの場合、起動時にボリュームが自動的に開かれるようにするには、手動で sudo cryptpilot-crypt init <volume_name> を実行してボリュームを初期化する必要があります。

  3. cryptpilot サービスを起動し、起動時に開始されるように有効にします。

    重要

    cryptpilot 構成を変更するたびに、cryptpilot サービスを起動して有効にし、ボリュームの自動オープン 機能が有効になることを確認する必要があります。

    sudo systemctl enable --now cryptpilot.service
  4. インスタンスを再起動します。

  5. ボリュームのステータスを表示します。

    sudo cryptpilot-crypt show

    次の出力は、ボリュームが自動的にオープンされたことを示しています。image

付録:キーの取得方法

CryptPilot は、プロバイダー メカニズムを使用してさまざまなキーソースと統合し、「ディスクの暗号化/復号化方法」と「キーの取得元」を分離します。このセクションでは、前述の機密システムディスクおよび機密データディスクのセクションで参照されている、OTP、Trustee、Alibaba Cloud KMS、外部プログラム (exec) の 4 つの方法について説明します。

キーの取得方法

プロバイダータイプ

永続性

リモートアテステーションの要否

典型的なシナリオ

ワンタイムパスワード (OTP)

otp

なし (シャットダウン時に消失)

いいえ

一時データディスク、スワップパーティション

Trustee

kbs

はい

はい (高信頼実行環境 (TEE) のリモートアテステーションに基づいてキーをリリース)

セルフホストのキーバックエンド + 強力なトラステッドコンピューティング要件

Alibaba Cloud KMS

kms

はい

いいえ

クラウドマネージドのキー管理機能

exec (外部プログラム)

exec

外部プログラムに依存

外部プログラムに依存

カスタムのキー取得ワークフローを持つ上級者

上記のボリューム設定例では、実際のニーズに基づいて [encrypt.xxx] セクションを、本セクションで説明するいずれかのプロバイダー設定に置き換えることができます。

ワンタイムパスワード (OTP)

適用範囲

  • 機密データディスク - 一時ボリューム:ボリュームが再オープンされるたびに、異なるランダムキーが生成されます。ボリューム内のデータは、シャットダウン後に完全に失われます。一時データディスクやスワップパーティションに適しています。

  • 適用対象外:機密システムディスク、またはシャットダウン後もデータを保持する必要がある永続ボリューム。

設定例

ボリュームの toml 設定に以下を追加します:

[encrypt.otp]

追加のパラメーターは不要です。CryptPilot は、ボリュームを開いて初期化および復号化する際に、安全な一時キーを自動的に生成します。

信頼管理サービス (Trustee)

Trustee は、アテステーションサービス (AS)、参照値プロバイダーサービス (RVPS)、キーブローカーサービス (KBS) で構成されるオープンソースの信頼管理サービスです。この方法では、暗号化キーは KBS に保存されます。CryptPilot は、ボリュームを開くときに KBS からキーを取得します。KBS は、事前に設定されたポリシーに基づいてインスタンスのリモートアテステーションを開始し、アテステーションが成功した後にのみキーをリリースします。

Trustee は、機密システムディスク (強力なトラステッドコンピューティングシナリオで推奨されるキーバックエンドとして) と、機密データディスクの永続ボリュームの両方に適しています。

ステップ 1:Trusteeサービスのデプロイ

  1. 信頼できる環境 (別の ECS インスタンスなど) に Trustee パッケージをインストールします:

    sudo yum install -y trustee
  2. (オプション) HTTPS アクセスを設定します。HTTPS アクセスが必要な場合は、/etc/trustee/gateway.yml を編集し、TLS 証明書の設定を追加します:

    server:
      insecure_http: false
      tls:
        cert_file: "<path_to_https_certificate.pem>"
        key_file: "<path_to_https_certificate_private_key>"
      # 他の設定...
  3. Alibaba Cloud Linux 3 インスタンスでは、systemd を通じて Trustee サービスを起動できます:

    sudo systemctl restart trustee

    Trustee の実行後、ローカルマシンの ポート 8081 で待機します。

ステップ 2:リモートアテステーション検証ポリシーの設定

Trustee は、機密インスタンスの TEE ハードウェア環境、ファイルシステム、プログラム、および設定を検査し、検査結果を生成します。セキュリティ要件に基づいて、/opt/trustee/kbs/policy.rego でリリースポリシーを設定する必要があります。

  • 機密システムディスクのシナリオ (推奨:厳格なポリシー):リモートアテステーションによる 4 つのディメンション (ハードウェア、設定、実行可能ファイル、ファイルシステム) すべての信頼性の値が <= 32 である必要があります。特定のポリシーと参照値の生成については、前述の機密システムディスクの利用手順の「ステップ 3:機密システムディスクイメージの作成」(Trustee サービスに参照値を登録) をご参照ください。

  • 機密データディスクのシナリオ (最もシンプルなポリシー:ハードウェアのみの検証):利用を簡素化するために、4 つのディメンションのうちハードウェアディメンションのみを検証して、環境が有効な TEE ハードウェア環境であるかどうかを確認できます。/opt/trustee/kbs/policy.rego を以下のデフォルト設定に変更します:

    デフォルトのリモートアテステーションポリシー設定

    package policy
    
    import rego.v1
    
    default allow = false
    
    # ---------------------------
    # リソースパスのヘルパー
    # ---------------------------
    resource_path := data["resource-path"]
    path_parts := split(resource_path, "/")
    
    is_repo(name) if { count(path_parts) == 3; path_parts[0] == name }
    is_type(t)    if { count(path_parts) == 3; path_parts[1] == t }
    is_tag(tag)   if { count(path_parts) == 3; path_parts[2] == tag }
    
    # ---------------------------
    # デフォルトの決定
    # ---------------------------
    
    allow if {
            # cpu0 が存在する必要があります
            s := input.submods["cpu0"]
            # cpu0 は信頼性ベクトルを保持する必要があります
            tv := s["ear.trustworthiness-vector"]
            # そして、ハードウェアチェックに合格する必要があります
            tv["hardware"] <= 32
    }
説明

より厳格な多次元検証については、/opt/trustee/attestation-service/policies/opa/default.rego を確認し、「参照値設定ドキュメント」および「リモートアテステーション設定ドキュメント」を参照して参照値を設定してください。

ステップ 3:ボリューム暗号化キーのKBSへのアップロード

  1. キーストレージディレクトリを作成します (KBS はデフォルトで /opt/trustee/kbs/repository/default/ を使用します):

    sudo mkdir -p /opt/trustee/kbs/repository/default/local-resources/
  2. 暗号化キーを生成します。

    sudo yum install -y openssl
    openssl rand -base64 40

    image

  3. 生成されたランダムキーをローカルリソースファイルに書き込みます。たとえば、data0 という名前のボリュームの場合:

    sudo sh -c 'echo -n "<data0_volume_encryption_key>" > /opt/trustee/kbs/repository/default/local-resources/data0'

    上記の <data0_volume_encryption_key> を生成したランダムキーに置き換えます。対応する KBS リソース識別子は kbs:///default/local-resources/data0 であり、CryptPilot ボリューム設定でこの URI によって参照されます。

ステップ 4:ボリューム設定でのKBSの参照

[encrypt.kbs]
# Trustee インスタンスの HTTP(S) URL
kbs_url = "http://<trustee-ip>:8081/api"
# KBS 内のリソース URI、フォーマット:`kbs:///<repo>/<type>/<tag>`
key_uri = "kbs:///default/local-resources/data0"
# (オプション) KBS HTTPS アクセス用のルート証明書、PEM 形式。指定されていない場合はシステムのルート CA が使用されます
kbs_root_cert = """
-----BEGIN CERTIFICATE-----
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-----END CERTIFICATE-----
"""

ステップ 5:機密インスタンスへのリモートアテステーション依存関係のインストール

機密インスタンスでリモートアテステーションを有効にし、Trustee にアクセスしてキーを取得するには、対応するハードウェアの attestation-agent コンポーネントが機密インスタンスにインストールされていることを確認してください:

yum install -y attestation-agent

systemctl enable attestation-agent
systemctl start attestation-agent

Alibaba Cloud KMS

Alibaba Cloud KMS はクラウドベースのキー管理サービスで、セルフホストのキーバックエンドを構築せずに Alibaba Cloud でキーをホストしたいシナリオに適しています。この方法では、暗号化キーは KMS に「汎用シークレット」として保存されます。CryptPilot は、ボリュームを開くときに KMS インスタンスからキーを取得します。

ステップ 1:Alibaba Cloud KMSインスタンスと汎用シークレットの作成

  1. KMSインスタンスを購入してアクティベートします。

  2. 説明
    • 機密クラウドディスク用の KMS インスタンスの [キー管理タイプ] に制限はありません。セキュリティ要件に基づいて選択できます。この例では、[ソフトウェアキー管理] タイプの KMS インスタンスを使用します。

    • KMS インスタンスは ECS インスタンスと同じ VPC にある必要があります。

  3. ソフトウェアキーを作成します。

  4. 汎用シークレットを作成します。

    • [シークレット名]:インスタンスに基づいて入力します。この例では、confidential_cloud_disk_passphrase です。

    • [シークレット値の設定]:[プレーンテキスト] を選択し、ボリュームの暗号化キーとして使用するシークレット値を入力します。例えば、openssl rand -base64 40 コマンドで強力なランダムキーを生成できます。

    • [暗号化キー]:前のステップで作成したソフトウェアキーを選択します。

    image

  5. アプリケーションアクセスポイントを作成し、KMSインスタンスのCA証明書を取得します。

    以下を取得したことを確認してください:

    • アプリケーションアイデンティティ認証情報の内容 (ClientKeyContent):デフォルトのファイル名は clientKey_****.json です。

    • 認証情報パスワード (ClientKeyPassword):デフォルトのファイル名は clientKey_****_Password.txt です。

    • KMS インスタンスの CA 証明書:デフォルトのファイル名は PrivateKmsCA_kst-******.pem です。

ステップ 2:ボリューム設定でのKMSの参照

実際のセットアップに合わせて、以下の設定ファイル内の設定情報を変更します。

[encrypt.kms]
# KMS インスタンス ID
kms_instance_id = "kst-bjj67d004a85ykq80****"
# KMS インスタンス内の汎用シークレットの名前
secret_name = "confidential_cloud_disk_passphrase"
# アプリケーションアイデンティティ認証情報ファイル clientKey_****.json の内容
client_key = '''
{
  "KeyId": "KAAP.XXXXXXXXX",
  "PrivateKeyData": "XXXXXXXXX"
}'''
# 認証情報パスワードファイル clientKey_****_Password.txt の内容
client_key_password = "258372e962f5204ce648bc66243f****"
# KMS インスタンスの CA 証明書 PrivateKmsCA_kst-******.pem の内容
kms_cert_pem = """
-----BEGIN CERTIFICATE-----
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-----END CERTIFICATE-----
"""

外部プログラム (exec)

exec プロバイダーを使用すると、CryptPilot はボリュームを開くときに任意の外部プログラムを呼び出し、そのプログラムの標準出力をボリュームの復号化キーとして使用できます。この方法は 上級者向けで、エンタープライズ HSM、Vault、カスタム KMS システム、またはリモートキー配信サービスとの統合など、カスタムのキー取得ワークフローに使用できます。

説明

キー取得のセキュリティは外部プログラムとその実行時環境に完全に依存するため、プログラム自体に適切なアクセス制御が設定されており、信頼できるソースから提供されたものであることを確認してください。

設定例

以下の例では、デモンストレーション目的でのみ、echo プログラムを使用して固定パスワードを生成します。本番環境では固定パスワードを使用しないでください:

[rootfs]
delta_location = "disk"

[rootfs.encrypt.exec]
command = "echo"
args = ["-n", "AAAaaawewe222"]

[delta]
integrity = true

[delta.encrypt.exec]
command = "echo"
args = ["-n", "AAAaaawewe222"]

CryptPilot は、ボリュームを開く際に command で指定されたプログラムを (args パラメーターと共に) 実行し、その 標準出力 をボリュームの復号化キーとして使用します。